구조 예시
Writes/Updates
(INSERT/UPDATE)
│
Primary
(리더)
│
┌──────────┴──────────┐
│ │
Replica 1 (읽기 전용) Replica 2 (읽기 전용)
• 애플리케이션은 쓰기 요청은 리더에, 읽기 요청은 레플리카로 분산.
• 장애 발생 시 레플리카가 리더 역할로 승격(Failover) 가능.
MySQL Group Replication과 Galera Cluster는 모든 노드가 동등한 역할(리더-레플리카가 없음)을 수행
장애 복구와 데이터 일관성이 높은 수준으로 유지
구조 예시
Reads/Writes
┌──────────┬──────────┐
│ │ │
Node 1 Node 2 Node 3
• 장점: 단일 장애점(Single Point of Failure)이 없어 안정적.
• 단점: 노드 간 동기화로 인해 쓰기 성능이 낮아질 수 있음.
구성
<server_uuid>:<transaction_id>
• server_uuid: 트랜잭션이 실행된 MySQL 서버를 고유하게 식별하는 값(UUID 형식).
• transaction_id: 해당 서버에서 실행된 트랜잭션의 순번.
예시
3E11FA47-71CA-11E1-9E33-C80AA9429562:12345
• 3E11FA47-71CA-11E1-9E33-C80AA9429562: 트랜잭션이 실행된 서버의 UUID.
• 12345: 이 서버에서 실행된 12345번째 트랜잭션
GTID와 Binlog의 관계
- GTID(Global Transaction Identifier)는 각 트랜잭션에 고유하게 할당된 식별자
- MySQL은 트랜잭션이 발생할 때, Binlog에 GTID와 트랜잭션 내용을 함께 기록
- 슬레이브 서버는 Binlog에서 GTID와 트랜잭션 내용을 읽고 이를 재실행하여 데이터를 복제
[mysqld]
gtid_mode = ON # GTID 활성화
enforce-gtid-consistency = ON # 트랜잭션 일관성 보장
log_slave_updates = ON # 슬레이브도 Binlog를 기록
MySQL 서버를 재시작한 후, 슬레이브와 마스터 간 복제를 설정
CHANGE MASTER TO
MASTER_HOST='master-host',
MASTER_USER='replication-user',
MASTER_PASSWORD='replication-password',
MASTER_AUTO_POSITION=1; -- GTID 기반 복제 활성화
START SLAVE;
INSERT INTO users (id, name) VALUES (1, 'Alice');
3E11FA47-71CA-11E1-9E33-C80AA9429562:1