DB

[MySQL] (고가용성2️⃣) Group Replication 구성과 특징 완전 분석

인생아 2025. 7. 17. 13:09
반응형

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

 

반응형