内容简介:kingbus是一个基于raft强一致协议实现的分布式MySQL binlog 存储系统。它能够充当一个MySQL Slave从真正的Master上同步binglog,并存储在分布式集群中;同时又充当一个MySQL Master将集群中的binlog 同步给其他Slave。这就需要kingbus具备伪装成MySQL Master角色,给其他Slave发送binlog的能力。网络上有很多文章,介绍如何伪装成MySQL Slave角色,从Master上同步binlog,并解析同步到其他存储系统中,例如ES。以此
kingbus架构设计之如何伪装成MySQL Master角色
1.背景
kingbus是一个基于raft强一致协议实现的分布式MySQL binlog 存储系统。它能够充当一个MySQL Slave从真正的Master上同步binglog,并存储在分布式集群中;同时又充当一个MySQL Master将集群中的binlog 同步给其他Slave。这就需要kingbus具备伪装成MySQL Master角色,给其他Slave发送binlog的能力。
网络上有很多文章,介绍如何伪装成MySQL Slave角色,从Master上同步binlog,并解析同步到其他存储系统中,例如ES。以此来支持异构复制。本文着重介绍一下,kingbus如何实现一个伪Master的功能。
2. 实现原理
2.1 启动 MySQL 主从复制的命令
在基于Gtid模式的主从复制下,设置好了MySQL的相关配置,我们会在Slave上执行如下命令来启动主从复制:
STOP SLAVE; RESET SLAVE; RESET MASTER; SET @@GLOBAL.GTID_PURGED ='214eb71f-96ec-11e8-ab4f-fa163e72d4ae:1-11756, 6098d558-96ec-11e8-a2d7-fa163ef40021:1-41, b93fc470-a1fc-11e8-9b46-fa163e8d0f56:1-29987' CHANGE MASTER TO MASTER_HOST = '192.168.1.10', MASTER_USER = 'kb', MASTER_PASSWORD = 'kb', MASTER_PORT = 3415, MASTER_AUTO_POSITION = 1, MASTER_RETRY_COUNT = 0, MASTER_HEARTBEAT_PERIOD = 10; START SLAVE;
2. MySQL内部实现
上述命令,对应到Slave内部,Slave会发生如下命令到Master节点:
SELECT UNIX_TIMESTAMP() (rpl_slave.cc:get_master_version_and_clock) SHOW VARIABLES LIKE ‘SERVER_ID’ (rpl_slave.cc:get_master_version_and_clock) SET @master_heartbeat_period=? (rpl_slave.cc:get_master_version_and_clock) SET @master_binlog_checksum= @@global.binlog_checksum (rpl_slave.cc:get_master_version_and_clock) SELECT @master_binlog_checksum (rpl_slave.cc:get_master_version_and_clock) SELECT @@GLOBAL.GTID_MODE (rpl_slave.cc:get_master_version_and_clock) SHOW VARIABLES LIKE ‘SERVER_UUID’ (rpl_slave.cc:get_master_uuid) SET @slave_uuid= ‘%s’(rpl_slave.cc:io_thread_init_commands) COM_REGISTER_SLAVE(rpl_slave.cc:register_slave_on_master) COM_BINLOG_DUMP(rpl_slave.cc:request_dump)
3. kingbus的伪Master实现
kingbus需要实现上述所有命令,这些命令的请求包格式和响应格式,在MySQL协议文档中都有具体的定义。感兴趣的同学可以参考kingbus相关代码文件:
这个文件实现了上面全部命令。这样kingbus就可以成功地伪装成一个master了。然后源源不断地发送binlog event给slave。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Shadow DOM 内部构造及如何构建独立组件
- 基于Vue构造器创建Form组件的通用解决方案
- 【golang-GUI开发】struct tags系统(二)qt的自定义组件和构造函数
- Java类 静态代码块、构造代码块、构造函数初始化顺序
- TS 的构造签名和构造函数类型是啥?傻傻分不清楚
- 只有你能 new 出来!.NET 隐藏构造函数的 n 种方法(Builder Pattern / 构造器模式)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rails 5敏捷开发
[美] Sam Ruby、[美] Dave Thomas、[美] David Heinemeier Hansson / 安道、叶炜、大疆Ruby技术团队 / 华中科技大学出版社 / 2017-12-30 / 115.00
本书以讲解“购书网站”案例为主线,逐步介绍Rails的内置功能。全书分为3部分,第一部分介绍Rails的安装、应用程序验证、Rails框架的体系结构,以及Ruby语言知识;第二部分用迭代方式构建应用程序,然后依据敏捷开发模式开展测试,最后用Capistrano完成部署;第三部分补充日常实用的开发知识。本书既有直观的示例,又有深入的分析,同时涵盖了Web开发各方面的知识,堪称一部内容全面而又深入浅出......一起来看看 《Rails 5敏捷开发》 这本书的介绍吧!