mysql 3中同步模式介绍
-
异步复制( asynchronous replication)
默认的同步模式,主设备将events写入binary log,但是不保证从节点是否接收日志,应用日志,直接向客户端返回结果。相当与网络协议的udp协议,只管杀不管埋。如果主备发生切换,可能会造成数据丢失。
全同步复制( fully synchronous replication)
全同步复制,当主库提交事务之后,所有的从库节点必须收到、APPLY并且提交这些事务,然后主库线程才能继续做后续操作。虽然能够保证主备切换能够保证数据不丢失,但是完成一个事物的时间会被拉长。-
半同步复制(semisynchronous replication)
介于异步复制和全同步之间的复制方式。在AFTER_SYNC(默认)模式下,主库只需要保证最少一个从节点接受到日志即可,不需要等待从库应用日志,相较于全同步复制而言,缩短了事物提交的时间。这部分延迟基本只取决于网络延迟。这个半最好不要理解成是一半,理解成是介于异步很全同步之间的意思比较好。
参数
- rpl_semi_sync_master_enabled
控制半同步复制在master节点上是否开启 默认是0(关闭) - rpl_semi_sync_master_timeout
控制超时时间,master节点在多长时间没有收到从节点的反馈之后转换为异步复制模式。单位为ms,默认值是10000ms。 - rpl_semi_sync_slave_enabled
控制半同步复制在从节点上是否开启。必须主从节点同时都开始半同步复制,否则只能使用异步复制模式。
安装配置
- 主库安装插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
- 备库安装配置
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
- 查看插件是否安装
show plugins
- 开启参数
主库
SET GLOBAL rpl_semi_sync_master_enabled = 1;
备库
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
- 持久化参数
主库
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second
备库
[mysqld]
rpl_semi_sync_slave_enabled=1
- 如果已经开启了异步复制,需要重启复制线程(备库上执行)
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
监控
- 查看参数设置
SHOW VARIABLES LIKE 'rpl_semi_sync%';
- 查看状态
SHOW STATUS LIKE 'Rpl_semi_sync%';