ProxySQL 에 추가된 두가지 Replication 지원 방식
Status SHUNNED
- Automatically shunning slaves with replication lag
- replication 지연이 임계값에 도달하면 ProxySQL 은 server 를 OFFLINE 상태로 변경하는 대신 임시로 제외 시키는 SHUNNED 상태로 변경하며, 갑자기 상태 변경과 모든 backend connectin 을 drop 하는 것이 아니라 천천히 제외 시킨다. Replication lag 임계값에 도달하면 ProxySQL이 서버를 'OFFLINE' 호스트 그룹으로 옮기지 않고 Shunned 상태로 변경한다.
# 자동으로 복제 서버를 replication 에서 제외시키려면 max_replication_lag 값을 설정한다. 이 값이 0이면
# replication을 모니터링 하지 않는다.
UPDATE mysql_servers SET max_replication_lag=30 WHERE hostname='172.16.0.3';
SELECT hostgroup_id,hostname,max_replication_lag FROM mysql_servers;
select @@mysql-monitor_groupreplication_max_transactions_behind_count;
# replication lag가 임계값을 넘어가면 SHUNNED 상태로 변경된다.
mysql> select hostgroup_id,hostname, status from runtime_mysql_servers;
+--------------+----------+---------+
| hostgroup_id | hostname | status |
+--------------+----------+---------+
| 2 | gr1 | ONLINE |
| 3 | gr2 | SHUNNED |
| 3 | gr3 | SHUNNED |
+--------------+----------+---------+
status OFFLINE_SOFT
- Gracefully disabling backend server
- ProxySQL에서 replication 해당 서버를 수동으로 점검 모드인 'OFFLINE_SOFT'로 설정 변경하여 운영 가능하며 replication 이 복구되면 ONLINE 상태로 변경된다.
# ProxySQL 에서 서버 상태를 offline_soft 로 변경한다.
mysql> update mysql_servers set status='offline_soft' where hostname='gr3';
load mysql servers to runtime; save mysql servers to disk;
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.04 sec)
mysql> select hostgroup_id,hostname,status from runtime_mySQL_servers;
+--------------+----------+--------------+
| hostgroup_id | hostname | status |
+--------------+----------+--------------+
| 2 | gr1 | ONLINE |
| 3 | gr3 | OFFLINE_SOFT |
| 3 | gr2 | ONLINE |
+--------------+----------+--------------+
3 rows in set (0.00 sec)
# mysql group replication node에서 replication stop 후 start 하면
mysql> start group_replication;
Query OK, 0 rows affected (2.58 sec)
# 이전 버전 이전에서는 자동으로 OFFLINE_SOFT 모드가 ONLINE 으로 변경되었으나
mysql> select hostgroup_id,hostname,status from runtime_mySQL_servers;
+--------------+----------+--------+
| hostgroup_id | hostname | status |
+--------------+----------+--------+
| 2 | gr1 | ONLINE |
| 3 | gr3 | ONLINE |
| 3 | gr2 | ONLINE |
+--------------+----------+--------+
# ProxySQL 2.3 버전 이후부터는 복제 그룹에서 삭제하려면 명시적으로 'ONLINE'으로 변경한 후 작업해야 한다.
mysql> update mysql_servers set status='online' where hostname='gr3'; load mysql servers to runtime; save mysql servers to disk;
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.04 sec)
mysql> select hostgroup_id,hostname,status from runtime_mySQL_servers;
+--------------+----------+--------+
| hostgroup_id | hostname | status |
+--------------+----------+--------+
| 2 | gr1 | ONLINE |
| 3 | gr3 | ONLINE |
| 3 | gr2 | ONLINE |
+--------------+----------+--------+
참조:
https://proxysql.com/documentation/backend-server-configuration/
https://www.percona.com/blog/proxysql-2-3-0-enhanced-support-for-mysql-group-replication/
'Database > MySQL, MariaDB' 카테고리의 다른 글
[MY-000068] [Server] unknown option '---'. (0) | 2022.09.13 |
---|---|
MySQL Group Replication 설정 순서 (0) | 2022.09.04 |
MySQL HA (Orchestrator, ProxySQL, Consul) (0) | 2022.09.03 |
ProxySQL과 Orchestrator의 simple STONITH (0) | 2022.09.03 |
MySQL 백업, 복원 비교 (xtrabackup/mysqldump) (0) | 2019.03.28 |