实验实现:
master:192.168.1.117
slave1:192.168.1.228
slave2:192.168.1.229
1、MySQL5.5 版本或更高
2、主、备库的 have_dynamic_loading 系统变量值为 yes
3、主、备异步复制已部署
1.mster(192.168.1.117)
mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
Query OK, 0 rows affected (0.03 sec)
mysql> show variables like ‘%rpl%’;
+——————————————-+————+
| Variable_name | Value |
+——————————————-+————+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
| rpl_stop_slave_timeout | 31536000 |
+——————————————-+————+
7 rows in set (0.03 sec)
master接收到N个slave的应答后,才commit事物,等待1s用户可以设置应道slave的数量。
rpl_semi_sync_master_wait_for_slave_count=1 默认是1
set global rpl_semi_sync_master_wait_for_slave_count=2;
mysql> set global rpl_semi_sync_master_enabled=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like ‘%rpl%’;
+——————————————-+————+
| Variable_name | Value |
+——————————————-+————+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
| rpl_stop_slave_timeout | 31536000 |
+——————————————-+————+
7 rows in set (0.00 sec)
slave节点(192.168.1.228/229)
mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
Query OK, 0 rows affected (0.02 sec)
mysql> set global rpl_semi_sync_slave_enabled=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like ‘%rpl%’;
+———————————+———-+
| Variable_name | Value |
+———————————+———-+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
| rpl_stop_slave_timeout | 31536000 |
+———————————+———-+
3 rows in set (0.01 sec)
–主节点配置增加以下
[mysqld]
rpl_semi_sync_master_enabled=on
rpl_semi_sync_master_timeout=10000 # 10 second
备注: rpl_semi_sync_master_enabled 参数控制主节点是否开启半同步复制;rpl_semi_sync_master_timeout 参数控制主节点等待备节点返回确认信息的超时时间,单位为毫秒,超过这个时间后半同步复制转变成异步复制,这里设置成 10 秒。
Slave节点配置
[mysqld]
rpl_semi_sync_slave_enabled=on
备注:rpl_semi_sync_slave_enabled 参数控制备节点是否开启半同步复制; 之后重启主、备库。
3.做同步(GTID,发现半同步例子都是gtid)
change master to master_host=’192.168.1.117′,master_user=’test1′,master_password=’MyPass1!’,MASTER_AUTO_POSITION=1;
start slave;
4.测试
117插入一条数据
master:
mysql> show status like “%semi%”;
+——————————————–+——-+
| Variable_name | Value |
+——————————————–+——-+
| Rpl_semi_sync_master_clients | 2 |有多少个Semi-sync的备库
| Rpl_semi_sync_master_net_avg_wait_time | 0 |事务提交后,等待备库响应的平均时间
| Rpl_semi_sync_master_net_wait_time | 0 |等待网络响应的总次数
| Rpl_semi_sync_master_net_waits | 2 | 总的网络等待时间
| Rpl_semi_sync_master_no_times | 0 |一共有几次从Semi-sync跌回普通状态
| Rpl_semi_sync_master_no_tx | 0 |库未及时响应的事务数,如果这个值很大就有问题不是用半同步复制的
| Rpl_semi_sync_master_status | ON |主库上Semi-sync是否正常开启
| Rpl_semi_sync_master_timefunc_failures | 0 |时间函数未正常工作的次数
| Rpl_semi_sync_master_tx_avg_wait_time | 4847 |开启Semi-sync,事务返回需要等待的平均时间
| Rpl_semi_sync_master_tx_wait_time | 4847 |事务等待备库响应的总时间
| Rpl_semi_sync_master_tx_waits | 1 |事务等待备库响应的总次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |改变当前等待最小二进制日志的次数
| Rpl_semi_sync_master_wait_sessions | 0 |当前有几个线程在等备库响应
| Rpl_semi_sync_master_yes_tx | 1 |Semi-sync模式下,成功的事务数
+——————————————–+——-+
14 rows in set (0.01 sec)
Rpl_semi_sync_master_clients 用于显示有多少个从服务器配置成了半同步模式
Rpl_semi_sync_master_status 用于指示主服务器是使用异步还是半同步模式,ON->半同步
Rpl_semi_sync_master_yes_tx 用于显示从服务器确认的成功提交数量
mysql> show global variables like ‘%semi%’;
+——————————————-+————+
| Variable_name | Value |
+——————————————-+————+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+——————————————-+————+
6 rows in set (0.00 sec)
Slave1(228)
mysql> show status like “%semi%”;
+—————————-+——-+
| Variable_name | Value |
+—————————-+——-+
| Rpl_semi_sync_slave_status | ON |
+—————————-+——-+
1 row in set (0.00 sec)
Rpl_semi_sync_slave_status 表示从服务器的半同步复制模式已经开始工作。