兼容MySQL事务
MySQL事务治理基于连接,同一个事务的所有请求经由过程同一个连接通信。在事务处理中连接损掉,事务将被rollback( http://dev.mysql.com/doc/refman/5.6/en/innodb-autocommit-commit-rollback.html )。
Proxy应用1:1连接模型完全兼容MySQL事务。每当MySQL Client提议一个连接到Proxy,Proxy都邑响应地提议一个连接到MySQL。两条连接中,随便率性一?中断,别的一钢页响应断开,对应的事务会被rollback,如图13所示。

图13 Proxy的1对1事务连接模型
PhxSync的功能和MySQL的semisync插件类似。经由调研,对semisync插件的接口做少量的调剂,就可以应用这些插件接口来实现PhxSync。
MySQL的权限治理基于(用户,源IP)对,源IP是经由过程socket句柄反查获取。当请求经由过程Proxy连接到MySQL时,源IP为Proxy本地IP,权限治理会出现异常。
Proxy应用MySQL协定HEAD保存字段透传真实袈浯IP到MySQ,MySQL再大年夜HEAD保存字段获取精确的源IP进行权限治理,如图14所示。
MySQL版本:Percona 5.6.31-77.0
图14 Proxy经由过程修改MySQL协定兼容MySQL权限
https://mariadb.atlassian.net/browse/MDEV-162
PhxSync功能主如果:
- 正常运行时提交Binlog:MySQL在正常写入或者更新数据时,会调用after_flush接口。PhxSync插件经由过程实现after_flush接口将MySQL新写入的Binlog提交到本机的BinlogSvr,由本机BinlogSvr经由过程Paxos协定同步到BinlogSvr集群。
- 重启时校准本地Binlog:MySQL在重启时经由过程萌芽BinlogSvr集群断定本地Pending Binlog的状况。如不雅Pending Binlog未复制到BinlogSvr集群则大年夜本地删除,保持本地的Binlog数据和BinlogSvr集群的Binlog数据一致。
上述对after_flush接口的调剂,和新增的before_binlog_init接口已经提交补丁给MySQL官方( http://bugs.mysql.com/bug.php?id=83158 )。
【PhxBinlogSvr】
PhxBinlogSvr重要负粜ユ储Binlog和Master信息的保护。在数据复制阶段,经由过程Paxos协定包管PhxBinlogSvr各节点的数据一致性(下文称PhxBinlogSvr为BinlogSvr)。
- PhxPaxos库:BinlogSvr应用PhxPaxos库进行数据的复制。PhxPaxos库是微信团队开源的Paxos类库,具有以下特点:1. 包管各节点的数据一致。
- 包管集群机械跨越一半存活还能办事。
- 高机能。
- 功能完美。
- 稳定性经由大年夜范围验证。
- 接口便利易用。
- 项目地址 https://github.com/tencent-wechat/phxpaxos
BinlogSvr异常情况处理 防止Slave的节点提交数据
当旧Master在提交数据时因为收集问题数据包被卡在收集,且新Mater已经成功切换时,或者工资缺点直接往Slave节点的MySQL写入数据时,则会出现Slave节点提交数据的情况。多节点同时提交数据会出现BinlogSvr的Binlog数据和MySQL存储的Binlog数据不一致的情况。
BinlogSvr存储了集群内的Master信息。当其收到MySQL提交的数据时,可根据Master信息拒绝非Master节点的提交,如图15所示。

图15 BinlogSvr经由过程Master信息拒绝非Master节点的提交
防止Master提交缺点数据

在某些情况下,Master可能会从新发送数据或者发送缺点数据。譬如在收集不好的情况下Master因为提交数据超时而重发数据。磁盘产生故障或者数据被缺点回滚或者修改的时刻,Master会提交缺点的数据。
BinlogSvr应用乐不雅锁机制来防止Master的异常提交。在MySQL提交数据给BinlogSvr时,以本机MySQL已经履行的GTID为乐不雅锁,提交的内容为(本机MySQL已经履行的最新GTID,本次要提交的Binlog)。BinlogSvr经由过程检查请求中(本机MySQL已经履行的最新GTID)和自身保存的最新GTID是否匹配来拒绝从新发送或者异常发送的数据,如图16所示。

图16 BinlogSvr应用乐不雅锁拒绝Master在数据异常的情况下提交数据
- 支撑MySQL原生复制协定:为了让Slave能大年夜BinlogSvr获取Binlog,最好的方法就是BinlogSvr支撑MySQL原生的复制协定,如许不消对Slave做任何修改,如图17所示。

图17 BinlogSvr支撑MySQL应用原生复制协定获取Binlog数据
- Master治理:BinlogSvr除了存储MySQL的Binlog数据,还存储了Master信息。同时还承担了Agent的角色,负责监控MySQL的状况,须要时提议选举本身为Master的投票。
绝大年夜多半情况下,半同步复制能包管MySQL主备间的数据一致性,如图2所示。
BinlogSvr经由过程Paxos协定进行Master选举,选举成功后成为Master并拥有租约。经由过程Paxos协定选举包管了最终只产生一个Master且每个节点记录了一致的Master信息。
PhxSQL效不雅 【PhxSQL数据一致性】
经由过程比较PhxSQL集群中各节点的数据(MySQL Binlog,PhxPaxos,BinlogSvr) 断定各节点数据是否一致,如图18所示。
推荐阅读
【51CTO.com原创稿件】跟着云计算的快速成长,收集问题争议赓续,为懂得决云上租户收集隔离问题,VPC(专有收集)应运而生,VPC也被认为是将来的趋势。那么,阿里云的VPC是若何赞助用户解>>>详细阅读
地址:http://www.17bianji.com/lsqh/34798.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示