Database 85

[Real MySQL] 7-1. 데이터 암호화: MySQL 서버

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. MySQL 서버의 데이터 암호화TDE스토리지 엔진의 I/O 레이어와 디스크 사이에서 암호화/복호화 수행즉, 데이터 파일이 디스크에 저장될 떄 암호화되고 읽을 떄 복호화됨MySQL 서버에서는 테이블의 데이터가 암호화되있는지 여부를 파악할 필요 없음 2단계 키 관리master key데이터베이스 전체의 키를 관리하는 최상위 키 (데이터를 암호화는 것이 아니라, tablespace key를 암호화)파일에 의해 관리되므로 보안상 주기적으로 변경해야 함키 변경) ALTER INSTANCE ROTATE INNODB MASTER KEY; tablespace key (private key)각 테이블마다 개별적으로 존재하는 키마스터 키에 의해 암..

Database/Mysql 2025.03.09

[Real MySQL] 6. 데이터 압축

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 페이지 압축디스크에 저장하는 시점에 페이지가 압축되어 저장됨디스크에서 페이지를 읽어올 때 압축이 해제됨 압축 크기한 페이지가 어느 정도로 압축될지는 모름단, 특정 테이블의 페이지 크기는 모두 동일함 펀치홀운영체제의 파일 압축 기능MySQL에서는 16KB를 유지하면서 압축 후, 남은 공간은 운영체제에 반납하여 공간을 절약함 (실제로는 압축된 페이지만 사용)여러 문제점으로 인해 잘 사용되지 않음 문제점운영체제 뿐만 아니라, 하드웨어 자체에서도 지원해야 함파일 시스템 관련 명령어가 펀지 홀을 지원하지 못함 (복구하는 과정에서 남은 공간까지 가져올 수 있음) 설정CREATE TABLE t1 (c1 INT) COMPRESSION="zl..

Database/Mysql 2025.03.08

[Redis][Community Edition] 2-7. Manage Redis: Scale with Redis Cluster

1. Redis Cluster 101수평 확장 및 복제를 위한 공식 구조항목설명Auto Sharding데이터가 여러 노드에 자동 분산 저장됨 (수동 분할 불필요)Partial Failure Tolerance일부 노드에 장애가 생기거나 통신이 끊겨도 클러스터는 일정 수준의 작동을 유지함전체 장애 시 중단마스터 노드의 과반수가 다운되면 → 전체 클러스터가 중단됨→ 클러스터는 최소 다수의 마스터가 살아있어야 운영 가능 TCP ports포트 종류설명클라이언트 포트- 일반 Redis 명령 처리용 포트 (예: 6379)- 클라이언트가 명령을 보내는 포트- 클러스터 간 키 마이그레이션 시에도 사용됨클러스터 버스 포트- 노드 간 내부 통신 전용 포트- 기본값: 클라이언트 포트 + 10000 (예: 16379)- 바이너..

Database/Redis 2024.09.08

[Redis][Community Edition] 2-6. Manage Redis: Replication

0. Replication동기화replica가 master를 실시간으로 복제함항목설명특징비동기 복제- 지연이 낮음- 백그라운드에서 복제가 이루어짐복제가 진행되는 동안에도 서비스는 중단 없이 유지됨다중 레플리카하나의 Master에 여러 Replica를 연결할 수 있음 - 읽기 부하 분산- 고가용성 확보계단식 복제Replica가 또 다른 Replica의 Master가 될 수 있음계층적 구조 구성 가능 재연결연결이 끊겨도 replica는 자동으로 master에 재연결을 시도함재연결 성공 시, 복제를 시도함항목Partial RecynchronizationFull Recynchronization동작 조건복제 연결이 일시적으로 끊겼다가 재연결될 때Replica가 처음 연결되거나, 복제 기록이 손실된 경우복구 방식끊..

Database/Redis 2024.09.08

[Real MySQL] 17-4. InnoDB 클러스터: 구축

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 요구사항그룹 복제에서 요구하는 사항을 만족해야 함MySQL 서버 5.7.17~MySQL 셸 1.0.8~MySQL 라우터 2.1.2~Performance 스키마 활성화MySQL 셸 사용을 위한 파이썬 2.7 버전 이상 사용 2. InnoDB 클러스터 생성1. 사전 준비primary/js> dba.configureInstance("root@localhost:3306")mysql-shell에서 InnoDB 클러스터 설정 적용을 위해 restart 필수 2. 클러스터 생성primary/js> var cluster = dba.createCluster("testCluster")클러스터에 대한 정보를 저장할 메타데이터 데이터베이스 생성 ..

Database/Mysql 2024.09.07

[Real MySQL] 17-3. InnoDB 클러스터: MySQL

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. MySQL 셸고급 클라이언트 툴 다양한 언어 모드 지원mysqlsh> \pymysqlsh> \sqlmysqlsh> \js  APIX DevAPIX 프로토콜을 사용해 MySQL 서버에서 관계형 데이터와 문서 기반 데이터를 처리할 수 있음  Admin APIInnoDB 클러스터 및 InnoDB 레플리카 셋 구축 지원 글로벌 객체session셸에서 MySQL 서버에 연결했을 때 생성된 세션에 매핑되는 객체세션 단위에서 사용할 수 있는 기능 제공 dbaAdmin API 사용 시 쓰이는 객체 clusterInnoDB 클러스터에 매핑되는 객체클러스터 제어 기능 제공 rsInnoDB 레플리카 셋에 매핑되는 객체레플리카셋 제어 기능 제공 d..

Database/Mysql 2024.09.07

[Real MySQL] 17-2. InnoDB 클러스터: 그룹 복제

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 그룹 복제바이너리 로그내부적으로 Row 포맷의 바이너리 로그와 릴레이로그, GTID를 사용함 클러스터 형태복제에 참여하는 MySQL 서버들이 하나의 복제그룹으로 묶인 클러스터 형태를 가짐그룹 내 서버들은 서로 통신하면서 양방향으로도 복제를 처리할 수 있음즉, 하나의 복제 그룹 내에서 쓰기를 처리하는 서버가 여러 대 존재할 수 있음기존 복제의 경우 소스-레플리카 형태로 구성되어 단방향으로만 복제가 이루어졌음프라이머리-세컨더리라는 용어로 그룹 멤버(서버)를 표현함 반동기 방식한 서버에서 트랜잭션이 커밋 준비 완료 그룹 멤버 간 합의트랜잭션 정보를 그룹의 다른 멤버들에게 전송과반수 이상의 멤버로부터 응답을 전달받으면 통과만약 과반수..

Database/Mysql 2024.09.07

[Real MySQL] 17-1. InnoDB 클러스터: 아키텍처

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. InnoDB 클러스터복제 기능을 통해 고가용성을 확보할 수 있으나, 단순한 문제는 아님소스 서버에 장애가 발생할 때, failover 작업을 수동으로 수행해야 함 (레플리카 서버 승격)레플리카 서버의 읽기 모드 해제소스 서버에서 데이터 변경 수행 비활성화 (스플릿 브레인 현상 방지)애플리케이션 서버는 커넥션 설정을 해야 함 (새로운 소스 서버를 바라보도록)failover 작업을 자동화하기 위해 HA 솔루션을 사용함사용 환경에 맞게 수정하는 작업이 필요 (지속적인 유지보수 및 관리가 필요함)ex) MMM, MHA, OrchestratorMySQL에서 빌트인 형태의 HA 솔루션인 InnoDB 클러스터가 도입됨  (5.7.17~)즉..

Database/Mysql 2024.09.07

[Real MySQL] 16-5. 복제: 복제 토폴로지

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 싱글 레플리카하나의 소스 서버에 하나의 레플리카 서버만 연결됨가장 기본적인 형태 데이터 분석용예비용 2. 멀티 레플리카하나의 소스 서버에 2개 이상의 레플리카 서버를 연결싱글 레플리카를 사용하다가 트래픽이 많아질 경우 사용함 트래픽 대응클라이언트는 읽기 요청이 많으므로 읽기 요청 처리를 분산시키기 데이터 분석용클라이언트 요청이 아닌 용도(AI, 배치, 통계 등)의 전용으로 쓰는 방법 예비용 (1대 필수)예기치못한 예외로 인해 서버가 다운될 경우, 예비용이 대기하고 있어야 안정적으로 요청을 원활하게 처리할 수 있음소스 서버 or 레플리카 서버의 예비용으로 활용될 수 있음 3. 체인사용 목적멀티 레플리카 복제 구성에서 레플리카 서..

Database/Mysql 2024.09.07

[Real MySQL] 16-4. 복제: 동기화 방식

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. Asynchronous Replication소스 서버가 레플리카 서버에서 변경 이벤트가 정상적으로 전달되어 적용되었는지 확인하지 않음 장점빠른 성능레플리카 서버의 문제가 전파되지 않음 단점동기화 여부 보장 X소스 서버에 장애가 발생하면 최근 트랜잭션이 레플리카 서버에 전송되지 않을 수 있음레플리카 서버가 승격될 경우, 누락된 트랜잭션이 있는지 수동으로 확인해야 함 2. Semi-Synchronous Replication비동기 방식에서 좀 더 향상된 데이터 무결성을 제공하는 방식소스 서버는 레플리카 서버로부터 응답을 받아야 트랜잭션을 완전히 커밋시킴레플리카는 릴레이 로그 커밋이 성공하면 ACK 응답을 보냄네트워크 통신이 추가적으..

Database/Mysql 2024.09.07