mysql主从(半同步及增强半同步区别) (简单明了,好文章!)

半同步复制特点

MySQL5.5开始推出半同步复制

半同步复制:至少有一个Slave节点收到binlog后再返回(IO线程接收到即可)

特点:

1.减少数据丢失风险

2.不能完全避免数据丢失

3.超时后,切换回异步复制(配置半同步复制需要先配置异步复制)

 主从原理解析:

5.6与5.7主从区别主要是主库的事务提交的时机不同,从而对主库性能影响不同。

1.mysql5.6主从原理解析:

参数:AFTER_COMMIT(5.6默认值)

master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log),同时主库提交事务。master等待slave 反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端。

即主库commit时,先保证了binlog日志写入了从库中继日志后主库才提交binlog落盘OK给客户端.此方法影响了主库性能.

2.mysql5.7主从原理解析:

 参数AFTER_SYNC(5.7默认值,但5.6中无此模式)

master 将每个事务写入binlog , 传递到slave 刷新到磁盘(relay log)。master等待slave 反馈接收到relay log的ack之后,再提交事务并且返回commit OK结果给客户端。 即使主库crash,所有在主库上已经提交的事务都能保证已经同步到slave的relay log中。此方法中存储引擎可以批量提交,降低了对主库性能的影响.

设置半同步模式: SET rpl_semi_sync_master_wait_point= AFTER_SYNC;

半同步复制过程:

启动半同步之前需配好异步主从.异步主从配好后再通过安装插件,设置参数,重启IO线程启动半同步复制.

1.主库和从库都需要安装插件

主库:  mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

从库:  mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

主库从库分别查看插件是否加载成功: mysql> show plugins;

在安装完插件后,半同步复制默认是关闭的,这时需设置参数来开启半同步.

2.启动半同步复制

设置参数启动:

主库:  mysql>  SET GLOBAL rpl_semi_sync_master_enabled = 1;

从库:  mysql>  SET GLOBAL rpl_semi_sync_slave_enabled = 1;

以上的启动方式是在命令行操作,也可写在配置文件中。

在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制

[mysqld]

plugin_dir=/usr/local/mysql/lib/plugin

plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl_semi_sync_master_enabled=1

rpl_semi_sync_slave_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_master_wait_for_slave_count=1

重启从库的IO线程:

STOP SLAVE IO_THREAD;

START SLAVE IO_THREAD;

如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。这时候,主的error.log中会打印如下信息:

2017-04-19 11:09:26 28300 [Note] Semi-sync replication switched ON with slave (server_id: 28703307) at (mysql-bin.000002, 510)

2017-04-19 11:09:26 28300 [Note] Start semi-sync binlog_dump to slave (server_id: 28703307), pos(mysql-bin.000002, 510)

2017-04-19 11:09:26 28300 [Note] Stop asynchronous binlog_dump to slave (server_id: 28703307)

3.查看半同步复制

查看半同步是否在运行:

主库执行:

mysql> show status like 'Rpl_semi_sync_master_status';

从库执行:

mysql> show status like 'Rpl_semi_sync_slave_status';

这两个变量常用来监控主从是否运行在半同步复制模式下。

主库执行:mysql>  show status like '%semi%';

Rpl_semi_sync_master_status:指示主服务器使用的是异步复制模式,还是半同步复制模式。

Rpl_semi_sync_master_clients:显示有多少个从服务器配置成了半同步复制模式。

Rpl_semi_sync_master_yes_tx:显示从服务器确认的成功提交数量。

Rpl_semi_sync_master_no_tx:显示从服务器确认的不成功提交数量。

mysql 5.7增强半同步(无损复制)配置文件

同步复制:必须等从库回放了中继日志里对应的信息,主库才返回commit ok信号.

plugin_dir=/usr/local/mysql/lib/plugin

plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

loose_rpl_semi_sync_master_enabled = 1 --loose表示若上面参数失效,则下面参数失效.

loose_rpl_semi_sync_slave_enabled = 1

loose_rpl_semi_sync_master_timeout = 5000  --超过5s不返回信息就降为半同步复制

rpl_semi_sync_master_wait_point = AFTER_SYNC

rpl_semi_sync_master_wait_for_slave_count = 1 --有1台返回确认结果主库就commit ok

1. 就等待ACK回包问题上,其实两种复制的开销是一样的,没有区别,都是网络的等待开销。

2. 无损复制由于在write binlog(commit的第二步)后,需要等待ACK,后续的事物无法提交,这样就堆积了很多需要落盘的事物(半同步复制由于已经提交了事物,没有堆积事物的效果),通过组提交机制,一次fsync的事物变多了(半同步复制也有组提交,只是一次fsync的事物数没那么多),相当于提高了I/O性能。所以线程(事物)越多,效果越明显。

转载自:http://blog.sina.com.cn/s/blog_14b4573160102yp4q.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值