mysql高可用半同步配置(二)
一、配置半同步
1.1、部署半同步:
#首先判断MySQL服务器是否支持动态增加插件
mysql> select @@have_dynamic_loading
#确认支持动态增加插件后,检查MySQL的安装目录下是否存在插件semisync_master.so和semisync_slave.so
mysql> show variables like 'plugin_dir'; #查看插件存入地址
master端:
#安装半同步复制插件
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
#打开半同步复制功能
mysql> set global rpl_semi_sync_master_enabled=ON;
#检查半同步复制相关参数设置
mysql> show 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 | | rpl_semi_sync_slave_enabled | ON | | rpl_semi_sync_slave_trace_level | 32 | +-------------------------------------------+------------+ 8 rows in set (0.00 sec) mysql>
slave端:
#安装半同步复制插件
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
#打开slave端的半同步复制功能
mysql> set global rpl_semi_sync_slave_enabled=on; Query OK, 0 rows affected (0.00 sec)
#检查半同步复制相关参数
mysql> show variables like '%semi%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | rpl_semi_sync_slave_enabled | ON | | rpl_semi_sync_slave_trace_level | 32 | +---------------------------------+-------+ 2 rows in set (0.01 sec) mysql>
#开启slave复制线程并检查复制状态
mysql> start slave; mysql> show slave status\G
二、半同步相关参数
rpl_semi_sync_master_enabled: # 控制master端是否打开半同步插件,默认OFF rpl_semi_sync_master_timeout: #控制半同步复制退化为异步复制的时间限制。若该时间限制下master还未接收到slave的ack,半同步复制退化为异步复制。默认10000(10s),该参数一般会设置比较大,保证数据无损。 rpl_semi_sync_master_trace_level: #master半同步复制调试跟踪等级,默认为32。 1 = general level (for example, time function failures) 16 = detail level (more verbose information) 32 = net wait level (more information about network waits) 64 = function level (information about function entry and exit rpl_semi_sync_master_wait_for_slave_count #master提交事务并返回客户端commit时,需要获取slave的ack的个数,默认为1。该参数同样依赖rpl_semi_sync_master_wait_no_slave的设置 rpl_semi_sync_master_wait_no_slave: #控制当slave个数小于rpl_semi_sync_master_wait_for_slave_count参数设置时,复制模式的行为,默认为ON。 ON:当MySQL发现slave个数小于rpl_semi_sync_master_wait_for_slave_count时,MySQL复制模式不做任何变更,只要数据同步时,master接收到大于等于rpl_semi_sync_master_wait_for_slave_count个数的ack,MySQL就继续保持半同步复制模式; 若master等待ack超过rpl_semi_sync_master_timeout时间限制后仍然未接收到大于等于rpl_semi_sync_master_wait_for_slave_count个数的ack,MySQL就将半同步复制退化为异步复制。 OFF:当MySQL发现slave个数小于rpl_semi_sync_master_wait_for_slave_count时,主动将半同步复制退化为异步复制 rpl_semi_sync_master_wait_point: #控制半同步复制下,master提交事务并返回客户端commit的时机,MySQL5.7版本下默认为after_sync。