从mysql5.5开始,支持半同步模式复制(semisynchronous replication),比之前的异步模式复制增强了安全性。
半同步复制模式可以确保至少有一个备节点服务器在接受完主服务器发送的binlog日志文件并写入到中继日志后,返回给主节点一个ack信号,告诉主节点已经接收完日志,这时主节点线程才返回给当前session提交信息。
当主节点因为超时未接收到任一个备节点的ack信号时会切换会异步复制模式,从而防止堵塞应用。
当至少有一个备节点返回给主节点ack信号时,主节点切换回半同步复制模式。
主备节点必须全部配置成半同步复制模式,否则不支持该模式。
mysql 的半同步复制是通过安装插件来实现的,主备节点安装相应的插件,否则无法实现半同步复制。
已安装二进制包的默认插件目录在/usr/lib/mysql/plugin中。开启半同步复制模式如下:
1.在主节点中运行
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
2.在每个备节点中运行
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
3.在主节点中运行
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 10000;
4.在备节点中运行
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
5.在主节点中配置文件/etc/my.cnf添加
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout =10000 (默认为10000毫秒,可不更改)
6.在备节点中配置文件/etc/my.cnf添加
rpl_semi_sync_slave_enabled=1
备注(单位微秒):
Rpl_semi_sync_master_clients
半同步连接的slave数目
Rpl_semi_sync_master_net_avg_wait_time
主节点等待备节点同步的平均时间
Rpl_semi_sync_master_net_wait_time
主节点等待备节点同步的总时间
Rpl_semi_sync_master_net_waits
主节点等待次数
Rpl_semi_sync_master_no_times
主节点关闭半同步的次数
Rpl_semi_sync_master_no_tx
主节点未收到ack返回信号的次数
Rpl_semi_sync_master_status
半同步主节点状态(当为主节点的时候为ON)
Rpl_semi_sync_master_timefunc_failures
半同步由于调用时间函数错误的次数
Rpl_semi_sync_master_tx_avg_wait_time
半同步主节点等待一个事务的平均等待时间
Rpl_semi_sync_master_tx_wait_time
主节点等待事务完成的总等待时间
Rpl_semi_sync_master_tx_waits
主节点等待事务完成的总次数
Rpl_semi_sync_master_wait_pos_backtraverse
等待备节点事务应用的顺序同主节点日志写入顺序不一致
Rpl_semi_sync_master_wait_sessions
主节点等待的回话次数
Rpl_semi_sync_master_yes_tx
成功完成半同步的事务总次数
Rpl_semi_sync_slave_status
半同步备节点状态(当为备节点的时候为ON)
半同步复制模式可以确保至少有一个备节点服务器在接受完主服务器发送的binlog日志文件并写入到中继日志后,返回给主节点一个ack信号,告诉主节点已经接收完日志,这时主节点线程才返回给当前session提交信息。
当主节点因为超时未接收到任一个备节点的ack信号时会切换会异步复制模式,从而防止堵塞应用。
当至少有一个备节点返回给主节点ack信号时,主节点切换回半同步复制模式。
主备节点必须全部配置成半同步复制模式,否则不支持该模式。
mysql 的半同步复制是通过安装插件来实现的,主备节点安装相应的插件,否则无法实现半同步复制。
已安装二进制包的默认插件目录在/usr/lib/mysql/plugin中。开启半同步复制模式如下:
1.在主节点中运行
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
2.在每个备节点中运行
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
3.在主节点中运行
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 10000;
4.在备节点中运行
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
5.在主节点中配置文件/etc/my.cnf添加
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout =10000 (默认为10000毫秒,可不更改)
6.在备节点中配置文件/etc/my.cnf添加
rpl_semi_sync_slave_enabled=1
7.查看主节点状态确认半同步复制模式打开
备注(单位微秒):
Rpl_semi_sync_master_clients
半同步连接的slave数目
Rpl_semi_sync_master_net_avg_wait_time
主节点等待备节点同步的平均时间
Rpl_semi_sync_master_net_wait_time
主节点等待备节点同步的总时间
Rpl_semi_sync_master_net_waits
主节点等待次数
Rpl_semi_sync_master_no_times
主节点关闭半同步的次数
Rpl_semi_sync_master_no_tx
主节点未收到ack返回信号的次数
Rpl_semi_sync_master_status
半同步主节点状态(当为主节点的时候为ON)
Rpl_semi_sync_master_timefunc_failures
半同步由于调用时间函数错误的次数
Rpl_semi_sync_master_tx_avg_wait_time
半同步主节点等待一个事务的平均等待时间
Rpl_semi_sync_master_tx_wait_time
主节点等待事务完成的总等待时间
Rpl_semi_sync_master_tx_waits
主节点等待事务完成的总次数
Rpl_semi_sync_master_wait_pos_backtraverse
等待备节点事务应用的顺序同主节点日志写入顺序不一致
Rpl_semi_sync_master_wait_sessions
主节点等待的回话次数
Rpl_semi_sync_master_yes_tx
成功完成半同步的事务总次数
Rpl_semi_sync_slave_status
半同步备节点状态(当为备节点的时候为ON)