200 ? "200px" : this.width)!important;}
-->

介绍

上篇文章介绍了MMM架构的实现方法,但是上篇文章的MMM方案的复制是异步复制,异步复制的主要问题在于当主从存在延时时如果主机出现了故障导致了主从切换时这时将会存在数据丢失;mysql为了解决异步复制数据丢失的问题增加了半同步复制,半同步复制存在5.5以上的版本,半同步复制的原理是客户端在事务提交时必须等待从库接收到binlog的回应之后才能提交事务(当存在多个从库时默认只需要一个从库接受到了bInlog即可,也可以配置必须每一个从库都必须接收到binlog但是这样对性能影响就会很大),如果从库宕机或者故障导致binlog没有及时传送到从库(由参数rpl_semi_sync_master_timeout控制,默认是10S),这时mysql会自动转为异步复制,当从库又重新启动有新的一条binglog从主库发送到从库在规定的时间内得到响应mysql又会自动转换为半同步复制,所以半同步复制对主从之间的网络要求比较高。

mysql版本:5.6

方案:MMM+半同步复制

一、原理

5.6的半同步复制是在客户端执行commit主库写入完binlog然后执行数据刷新到磁盘后才由dump线程将binlog记录发送到从库的io线程。

二、安装配置

首先说明一下,当前的配置是基于MMM方案的配置,由于MMM方案是两主一从,所以我在其中的双主上面配置半同步复制,从库上面还是原先的异步复制。半同步复制是基于插件来实现的,主从上面各自执行不同的插件。

1.查询是否支持动态插件

主从上面都需要查看是否支持动态插件

2.安装动态插件

主备都执行

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

注意:由于我当前的双主模式所以主和备都需要执行主从的插件,如果只是单纯的主从模式那么主执行主的插件从执行从的插件即可。

查看插件是否安装

3.开启半同步复制

SET GLOBAL rpl_semi_sync_master_enabled = ;

SET GLOBAL rpl_semi_sync_slave_enabled = ;

同样主和备上面都同时执行上面两个操作,注意必须是开启全局的变量。

4.重启io线程

1.备库执行

 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

2.主库执行

 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

5.配置参数

show variables like '%rpl_semi%';

rpl_semi_sync_master_enabled、rpl_semi_sync_slave_enabled

分别代表主从的半同步复制是否启用,因为我当前是双主模式所以即担当了主又担当了从,所以这里面存在slave的参数在里面

rpl_semi_sync_master_timeout

该参数是配置半同步复制的延时时间,当主库发生binlog到从库从库在10s内还没有返回则自动转换为异步复制,这个时间可以调整,默认是10S

注意:如果仅仅是作为slave那么只有"rpl_semi_sync_slave_enable","rpl_semi_sync_trace_level"这两个状态,其它的4个是作为master端显示的,由于我这里是配置双主模式,所有主从都存在。

6.状态参数

show status like '%rpl_%';

这些状态参数比较重要,通常用来对半同步复制进行分析。

Rpl_semi_sync_master_clients:有多个个半同步复制的从库,对于当前的主来说只有backup是半同步复制的从库,而slave是异步复制,所以这里是1;

Rpl_semi_sync_master_net_avg_wait_time:master等待从库的平均响应时间,单位微妙

Rpl_semi_sync_master_net_wait_time: master等待从库响应的总时间,单位微妙

Rpl_semi_sync_master_net_waits:master等待从库响应的总次数

Rpl_semi_sync_master_no_times:master关闭半同步复制的次数,也就是当主从延时超过规定的时间转换为异步复制的次数。

Rpl_semi_sync_master_no_tx:master提交没有被slave响应成功的次数,也可以理解为不是同步半同步复制的次数。

Rpl_semi_sync_master_status:仅当当前服务器作为主库,是否开启了半同步复制,如果这里是OFF代表是异步复制,前提是当前查询的服务器是主服务器。

Rpl_semi_sync_master_timefunc_failures:master调用时间函数失败的次数,例如:gettimeofday().

Rpl_semi_sync_master_tx_avg_wait_time:master等待每一个事务的平均时间,单位微妙

Rpl_semi_sync_master_tx_wait_time:master等待事务的总时间,单位微妙

Rpl_semi_sync_master_tx_waits:master等待事务的总次数

Rpl_semi_sync_master_wait_pos_backtraverse:发生master写入的binlog的数量和slave响应返回的binlog数量不一致的次数。

Rpl_semi_sync_master_wait_sessions:当前等待slave响应的回话数量,该状态可以反应当前主从延时包括压力的情况

Rpl_semi_sync_master_yes_tx:master提交被slave成功响应的次数

Rpl_semi_sync_slave_status:仅当当前服务器作为从库,半同步复制是否开启,on代表开启。

注意:如果仅仅是作为slave那么只有"rpl_semi_sync_slave_status"这1个状态,其它的状态是作为master端显示的,由于我这里是配置双主模式,所有主从都存在。

注意:注意关注上面颜色加粗的这些状态

三、测试

模拟从库宕机

stop slave;

在master执行插入操作

主库上面等待响应的时间刚好是10S

从参数值也可以得到刚才有一次半同步复制失败

当从库重新启动复制之后,半同步复制也同样开启,刚才的插入记录也被异步复制应用了过来。

注意:开启半同步复制要加入到my.cnf文件中才能保证重启mysql服务后半同步复制也启用

SET GLOBAL rpl_semi_sync_master_enabled = ;

SET GLOBAL rpl_semi_sync_slave_enabled = ;

参考:

http://dev.mysql.com/doc/refman/5.6/en/replication-semisync-interface.html

前面写的复制相关文章:

主从复制:http://www.cnblogs.com/chenmh/p/5089919.html

主主复制:http://www.cnblogs.com/chenmh/p/5153184.html

MMM:http://www.cnblogs.com/chenmh/p/5563778.html

总结

半同步复制虽然主从的binlog是同步的,但是主只是等待binlog写入到从库并不等待从库应用这部分binlog,而从库应用这部分binlog的操作则是异步的,所以主从的数据并不是实时同步的,所以只能叫做半同步复制。在5.7版本之前作为主从的业务都会遇到主从延时比较大的情况,特别是当主是密集写的情况这种延时就更加大,那是因为主是并发写也从库应用主的binlog是顺序执行导致从跟不上主,在5.7引入了并行复制,所谓的并行也就是将不相关的操作放在一个组里面这样从库就可以做到理论上的并行了从而提高主库应用binlog的速率,并且在5.7的半同步复制引入了一个新的参数“rpl_semi_sync_master_wait_point=AFTER_SYNC”该参数是控制主库响应从库的binlog发生在flush disk之前,在5.6版本当主库flush disk之后才发送binlog如果这时主库由于某种原因宕机了,这时如果客户端没有收到从库的响应那么客户端可能从新执行操作而这时主从已经做了切换客户端连接主库(之前是从库)再次执行之前的操作,这样当之前的主库(现在变成从库)启动之后变成从库后又重新应用了一次操作造成了数据写了两次,所以在5.7就把binlog的响应放在flush disk之前这样就不会存在数据重复写的情况了,默认该参数是开启的所以搭建方法和5.6是完全一致的不需要做什么改变。如果将该参数的值改成“rpl_semi_sync_master_wait_point=AFTER_COMMIT”则又变成5.6一样的方案。在后面会单独写一篇关于5.7复制有关的新改进的文章,欢迎关注。

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

MySQL 半同步复制+MMM架构的更多相关文章

  1. MySQL半同步复制

    从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...

  2. Mysql半同步复制模式说明及配置示例 - 运维小结

    MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二 ...

  3. 安装MySQL半同步复制

    一.简介 从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认 ...

  4. MySQL半同步复制(5.5之后引入)

    半同步复制架构在主库提交一个事务后,commit完成即反馈客户端,无需等待推送binlog完成,如图: 半同步复制在主库完成一个事务后,需等待事务信息写入binlog日志并且至少有一个从库写入rela ...

  5. mysql半同步复制实现

    mysql半同步复制和异步复制的区别如上述架构图所看到的:在mysql异步复制的情况下.Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Mast ...

  6. MySQL半同步复制搭建

    默认情况下,MySQL 5.5/5.6/5.7和MariaDB 10.0/10.1的复制是异步的,异步复制可以提供最佳性能,主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收完 ...

  7. (5.5)mysql高可用系列——MySQL半同步复制(实践)

    关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...

  8. MySQL半同步复制的数据一致性探讨微信后台团队实践【转】

    MySQL是一个RDBMS(关系型数据库管理系统),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.由于其体积小.速度快.拥有成本低,尤其是开放源码这一特点,广受各大企业欢迎,包括 ...

  9. mysql半同步复制跟无损半同步区别

    mysql半同步复制跟无损半同步复制的区别: 无损复制其实就是对semi sync增加了rpl_semi_sync_master_wait_point参数,来控制半同步模式下主库在返回给会话事务成功之 ...

随机推荐

  1. 【leetcode】Add Binary

    题目简述: Given two binary strings, return their sum (also a binary string). For example, a = "11&q ...

  2. UWP学习记录1-开端

    UWP学习记录1-开端 1.背景 针对不同基础的人,学习的路线自然是不同的.这篇文章记录的是我个人的学习路线,或者说笔记.我对自己的技术状态的定义是: A.有很好的windows平台编程基础: B.有 ...

  3. FMDB 排它锁

    -------------------------------------基本操作------------------------------------- #import "ViewCon ...

  4. strip_tags、htmlspeciachars

    strip_tags:过滤html.xml标签: htmlspecialchars:把预定义自负转化为html实体:包括<.>.'.".& sql注入:将'." ...

  5. Esri的开源JS项目杂谈

    一提到Esri大家首先想到的是庞大的ArcGIS产品大家族,其产品包含从桌面端,到服务器/云端,再到web/移动端.作为一名极客,不聊开源逼格似乎上不去啊.其实,Esri作为一个开放的平台,不仅有稳定 ...

  6. 循环遍历checkbox按钮,和点击后提示。

    今天做了一个有关checkbox点击的项目,点击checkbox获取这行的数值,然后相加.运用的是jquery和PHP传值. $('input[type=checkbox]').click(funct ...

  7. 寒冬之下,浩瀚智能开单收银打印扫描POS为何能在批发零售门店商场 车销行业 风靡!:进销存+打印扫描POS机

    是一款适用于商超.餐饮.服装鞋帽.家电专营等等具有零售行业特点的企业,供企业管理人员用于管理.监控本品牌的市场占有率.门店覆盖区域.网点分布合理性等经济地理信息的工具平台. 1,功能一:业务抄单文章来 ...

  8. 服务升级中的zookeeper

    服务升级中zookeeper可以管理服务中的配置以及作为leader选举以及分布式事务等, 在这次主要用于配置管理,关于配置管理主要设计如下,通过zookeeper管理配置项,通过 管理界面来管理数据 ...

  9. Gridview中几个Button的应用

    gridview中有三种方式添加button的应用,CommandField.ButtonField.TemplateField中加Button这三种方式.三种方式都可以实现同样的功能,但在实现某些功 ...

  10. Ubuntu 树莓派2b交叉编译环境

    在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征:有时是因为目的平台 ...