内容简介: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 / 构造器模式)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTTP Essentials
Stephen A. Thomas、Stephen Thomas / Wiley / 2001-03-08 / USD 34.99
The first complete reference guide to the essential Web protocol As applications and services converge and Web technologies not only assume HTTP but require developers to manipulate it, it is be......一起来看看 《HTTP Essentials》 这本书的介绍吧!