반응형
MySQL에서 고가용성을 MySQL 자체 기능만으로 구현하려면 가장 먼저 고려되는 방식이 Group Replication이다.
이는 여러 노드 간 데이터를 자동 동기화하고, 장애 발생 시 자동으로 다른 노드가 역할을 이어받는 구조다.
즉, 별도의 외부 도구 없이 MySQL 서버들끼리 서로 통신하며 마스터 역할을 조정하고 복제까지 처리해주는 고급 기능이다.

✅ Group Replication이란?
- MySQL에서 제공하는 자체 고가용성 클러스터 기능
- Multi-Master 또는 Single-Primary 모드로 구성 가능
- 모든 노드는 동등한 상태이며, 하나의 노드에 장애가 발생해도 자동으로 대체됨
- 내부적으로는 Paxos 기반 합의 알고리즘을 사용하여 트랜잭션 일관성 유지
🔁 구성 구조 한눈에 보기
- 최소 3개 이상의 노드 구성 권장 (홀수 개 권장)
- 모든 노드는 binlog + GTID 설정 필수
- 네트워크 통신은 **Group Communication System(GCS)**를 통해 처리됨
- 기본 포트: 3306(MySQL), 33061(Replication), 33060(X Protocol)
반응형
🧱 구성 모드 2가지
1️⃣ Single-Primary Mode (기본)
- 하나의 노드만 쓰기 가능 (Primary)
- 나머지 노드는 읽기 전용
- 장애 발생 시, 다른 노드가 자동으로 Primary로 승격됨
2️⃣ Multi-Primary Mode
- 모든 노드가 쓰기 가능
- 충돌 방지를 위해 충돌 감지와 롤백 메커니즘이 작동
- 트랜잭션 충돌이 적은 환경에만 추천됨
실무에서는 대부분 Single-Primary 모드를 사용한다.
🛠️ 구성 예시 흐름 (요약)
3대 서버를 기준으로 구성
1. 각 서버의 my.cnf 설정
server-id = 1
log_bin = mysql-bin
gtid_mode = ON
enforce-gtid-consistency = ON
binlog_format = ROW
transaction_write_set_extraction = XXHASH64
group_replication_group_name = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot = OFF
group_replication_local_address = "192.168.0.101:33061"
group_replication_group_seeds = "192.168.0.101:33061,192.168.0.102:33061,192.168.0.103:33061"
group_replication_bootstrap_group = OFF
서버마다 server-id와 group_replication_local_address만 다르게 설정
2. 각 노드에 복제 계정 생성
CREATE USER 'repl'@'%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
3. 각 노드에서 Plugin 설치
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
4. Group Replication 시작
SET GLOBAL group_replication_bootstrap_group = ON; -- 최초 노드만
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
5. 나머지 노드들도 같은 방식으로 START
6. 클러스터 상태 확인
SELECT * FROM performance_schema.replication_group_members;
반응형
🔍 주요 특징 요약
| 항목 | 내용 |
| 복제 방식 | GTID 기반 동기 복제 |
| 자동 장애 전환 | 지원 (Single-Primary 모드 기준) |
| 노드 수 권장 | 최소 3개 (홀수 추천) |
| 충돌 감지 및 처리 | Multi-Primary에서 자동 감지 및 롤백 |
| MySQL 외부 도구 필요 여부 | 없음 (MySQL 기능 내장) |
| Failover 속도 | 수 초 내 처리 가능 |
🧠 실무에서 유의할 점
- 모든 노드 간 ping이 가능하고, 방화벽이 열려 있어야 함
- DNS보단 IP 주소 기반 설정 권장
- transaction_write_set_extraction은 반드시 설정
- 구성 중 중복 트랜잭션, UUID 충돌 등이 발생할 수 있으니 초기 설정을 정확히 할 것
- 안정성을 위해 read_only 및 super_read_only 설정 병행 추천
📘 공식 문서 참고
https://dev.mysql.com/doc/refman/8.0/en/group-replication.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] (JSON2️⃣) JSON_INSERT, JSON_SET, JSON_REPLACE 실전 활용법 (0) | 2025.07.17 |
|---|---|
| [MySQL] (JSON1️⃣) JSON 타입이란? 구조와 활용 예제 정리 (0) | 2025.07.17 |
| [MySQL] (고가용성4️⃣) Group Replication vs MHA 실무 비교와 선택 가이드 (0) | 2025.07.17 |
| [MySQL] (고가용성3️⃣) MHA 구성 방법과 장애 복구 흐름 정리 (2) | 2025.07.17 |
| [MySQL] (고가용성1️⃣) MySQL 고가용성 개념과 클러스터링 구조 이해하기 (3) | 2025.07.17 |
| [MySQL] (복제구조4️⃣) 복제 환경에서 자주 발생하는 문제와 해결법 (2) | 2025.07.16 |
| [MySQL] (복제구조3️⃣) GTID 기반 복제 완전 이해하기 (0) | 2025.07.16 |
| [MySQL] (복제구조2️⃣) Master-Slave 복제 설정 실습 가이드 (0) | 2025.07.16 |