MySQL GTID Replication
목표
- MySQL 8.0에서 기본적인 GTID Replication을 구축한다.
- 서비스 연속성을 고려한 Topology 및 manual Failover를 수행한다.
GTID ??
GTID란 Global Transaction Identifier의 약자로 UUID:transaction_id(순차번호) 로 구성되어 있다.
기존의 복제 구성시 binary log의 포지션을 찾고 구성을 했던 오퍼레이션을 단순화할 수 있으며, GTID를 통해 각 서버마다 고유한 트랜잭션을 관리 할 수 있다
GTID 설정을 위한 파라미터
No | Options | Variable Scope | Dynamic Variable | Comments |
1 | log-bin | Global | No | binary-log 활성화 옵션 |
2 | log-slave-updates | Global | No | Stand-by-Master에만 적용된 구문이며, 해당 옵션으로 인하여 Slave의 동기화 성능 저하가 발생 될 수 있습니다. |
3 | gtid_mode=on | Global | No | GTID 활성화 파라메터로서, Master DB에 해당 옵션이 적용되어 있지 않을 경우 슬레이브를 연결 할 수 없습니다. |
4 | enforce-gtid-consistency | Global | No | Transactionally safe한 구문만 허용합니다. |
GTID 구성 및 Manual Failover
Topology
AS-IS
A Server = Active Master(Source)
B Server = Standby Master(Source)
TO-BE
A Server = Standby Master(Source)
B Server = Active Master(Source)
1. Master/Slave 사전작업 및 Replication 구성
my.cnf 설정 변경
gtid-mode=ON
enforce-gtid-consistency=ON
log_slave_updates=ON
log-bin=binlog
리플리케이션 계정생성
create user `replication_user`@`%` identified with mysql_native_password by 'new1234!';
grant replication slave on *.* to `replication_user`@`%`;
flush privileges;
dump & restore
/mysql/Dwight/instance/bin/mysqldump -u root -pnew1234! -v --databases dwight \
--quick --routines --set-gtid-purged=on \
--triggers --extended-insert --master-data=2 > /root/db_backup/dwight.sql
--각 서버 전송
rsync -avzr --progress dwight.sql root@10.213.213.53:/tmp
rsync -avzr --progress dwight.sql root@10.213.211.170:/tmp
rsync -avzr --progress dwight.sql root@10.213.211.8:/tmp
rsync -avzr --progress dwight.sql root@10.213.212.194:/tmp
rsync -avzr --progress dwight.sql root@10.213.213.165:/tmp
--각 서버 별 restore
source dwight.sql
--Slave 서버
set global super_read_only=1;
리플리케이션 설정
CHANGE MASTER TO MASTER_HOST="10.213.211.170",
MASTER_USER='replication_user',MASTER_PASSWORD='new1234!',
MASTER_AUTO_POSITION=1; -- 마스터를 바라보는 3개
CHANGE MASTER TO MASTER_HOST="10.213.211.8",
MASTER_USER='replication_user',MASTER_PASSWORD='new1234!',
MASTER_AUTO_POSITION=1; - 스탠바이 마스터를 바라보는 2개
2. Manual Failover
기존 마스터 장애 상황( 가정)
B서버( Standby Master) read_only 해제
set global super_read_only=0;
application 소스 변경
mysql -u root -p -h 10.213.211.8
+ Read Replica 로드밸런서 변경( 실제 테스트 시에는 미구성
B서버 -> A서버 리플리케이션 구성 및 read_only 설정
CHANGE MASTER TO MASTER_HOST="10.213.211.8",
MASTER_USER='replication_user',MASTER_PASSWORD='new1234!',
MASTER_AUTO_POSITION=1;
set global super_read_only=1;
결과
매우 간단하게 Failover 수행 가능, 실제 서비스의 경우 LB를 통해 Read instance에 밸런싱 되고 다른 HA 솔루션을 사용하여 더욱 빠른 Failover가 수행 될 수 있습니다.
'MySQL & MariaDB' 카테고리의 다른 글
MySQL GTID 복제 환경에서 Reset Master/Reset Slave 명령어 (0) | 2022.12.27 |
---|---|
MySQL Multi Source Replication(MSR) 실습 (0) | 2022.12.26 |
[Real MySQL 8.0] 02. 설치와 설정 & 03. 사용자 및 권한 (0) | 2022.10.06 |
MySQL System Architecture - 2. Memory (0) | 2022.07.06 |
MySQL System Architecture - 1. Process/Thread (0) | 2022.07.06 |