MySQL Semi-Sync Replication

JM·2021년 6월 3일
0

MySQL

목록 보기
3/10

📌 MySQL은 플러그인으로 구현되는 Semi-Sync Replication에 대한 인터페이스를 지원

🔨 Semi-Sync Replication?

  • Slave DB로부터 Relay log에 기록이 완료되었다는 응답을 받고 트랜잭션을 진행하는 방식
  • 충돌이 발생하였을 경우 커밋 된 모든 트랜잭션이 하나 이상의 복제본으로 전송되었음을 보장
  • 응답 시간이 초과되었을 경우 Async 방식으로 Replication 진행

🔨 동기화 방식

  • AFTER_SYNC(기본값)
    Commit -> Binlog Flush/Commit -> Send Event with ACK Request -> Write Relay Log -> Ack -> Engine Commit -> Returns result to the Client


  • AFTER_COMMIT:
    Commit -> Binlog Flush/Commit -> Engine Commit -> Send Event with ACK Request -> Write Relay Log-> Ack -> Returns result to the Client

🔨 구성

📌 Replication이 구성된 상태에서 진행

(1) 플러그인 설치

- Master DB -
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> SHOW PLUGINS;
+---------------------------------+----------+--------------------+--------------------+---------+
| Name                            | Status   | Type               | Library            | License |
+---------------------------------+----------+--------------------+--------------------+---------+
| rpl_semi_sync_master            | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
+---------------------------------+----------+--------------------+--------------------+---------+

- Slave DB -
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql> SHOW PLUGINS;
+---------------------------------+----------+--------------------+-------------------+---------+
| Name                            | Status   | Type               | Library           | License |
+---------------------------------+----------+--------------------+-------------------+---------+
| rpl_semi_sync_slave             | ACTIVE   | REPLICATION        | semisync_slave.so | GPL     |
+---------------------------------+----------+--------------------+-------------------+---------+

(2) 플러그인 활성화

- Master DB -
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

- Slave DB -
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

(3) Replication 재실행

mysql> STOP SLAVE;
mysql> START SLAVE;

- MySQL 8.0.23 이후 -
mysql> STOP REPLICA;
mysql> START REPLICA;

(4) my.cnf 수정

- Master DB -
[mysqld]
rpl_semi_sync_master_enabled=1

- Slave DB -
[mysqld]
rpl_semi_sync_slave_enabled=1

🔨 모니터링 방법

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

- Rpl_semi_sync_master_status : 동작 상태
- Rpl_semi_sync_master_no_tx : Slave에서 확인하지 못한 커밋 수
- Rpl_semi_sync_master_yes_tx : Slave에서 확인한 커밋 수
profile
오픈소스 DB엔지니어

0개의 댓글