본문 바로가기

MySQL & MariaDB

MySQL GTID Replication 실습

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가 수행 될 수 있습니다.