一个分布式 MySQL Binlog 存储系统的架构设计

2019-01-27 08:00:18 +08:00
 flikecn

1. kingbus 简介

1.1 kingbus 是什么?

kingbus 是一个基于 raft 强一致协议实现的分布式 MySQL binlog 存储系统。它能够充当一个 MySQL Slave 从真正的 Master 上同步 binglog,并存储在分布式集群中。同时又充当一个 MySQL Master 将集群中的 binlog 同步给其他 Slave。 kingbus 具有如下特性:

1.2 kingbus 能解决什么问题?

2.kingbus 总体架构

kingbus 整体架构如下图所示:

3.kingbus 核心实现

3.1 storage 的核心实现

storage 中有两种日志形态,一种是 raft 日志(以下称为 raft log ),由 raft 算法产生和使用,另一种是用户形态的 Log (也就是 mysql binlog event )。Storage 在设计中,将两种 Log 形态组合成一个 Log Entry。只是通过不同的头部信息来区分。Storage 由数据文件和索引文件组成,如下图所示:

3.2 etcd raft 库的使用

Etcd raft library 在处理已经 Apply 的日志、committed entries 等内容时,是单线程处理的。具体函数参考链接,这个函数处理时间要确保尽可能短,如果处理时间超过 raft 选举时间,会造成集群重新选举。这一点需要特别注意。

3.3 binlog syncer 的核心实现

binlog syncer 主要工作就是:

3.4 binlog server 的核心实现

binlog server 实现了一个 master 的功能,slave 与 binlog server 建立复制连接时,slave 会发送相关命令,binlog server 需要响应这些命令。最终发送 binlog event 给 slave。对于每个 slave,binlog server 会启动一个 goroutine 不断读取 raft log,并去掉相关头部信息,就变成了 binlog event,然后再发送给 slave。

4. 总结

本文简要介绍了 kingbus 整体架构和核心组件及流程,通过这篇文章,希望读者对 kingbus 有个较为全面的认识。

开源地址: https://github.com/flike/kingbus 欢迎感兴趣的 star,谢谢

3400 次点击
所在节点    数据库
13 条回复
whileFalse
2019-01-27 08:48:09 +08:00
LZ 这头像。。。以前是竞鹿的吗
chinesestudio
2019-01-27 08:58:14 +08:00
任何需要用到阿里的 少用为妙 开源界 360
flikecn
2019-01-27 09:06:36 +08:00
@whileFalse 不是,只是通过竞鹿系统设计的
misaka19000
2019-01-27 09:32:41 +08:00
不错,有时间好好研究下,话说这是楼主一个人开发的吗?
mritd
2019-01-27 09:32:49 +08:00
看了半天头像 果然没记错,kingshard 作者^_^
flikecn
2019-01-27 11:11:11 +08:00
@misaka19000 是的。一个人开发。
flikecn
2019-01-27 11:11:44 +08:00
@mritd ,是的。kingshard 也是我的一个开源项目,多谢支持。
mritd
2019-01-27 11:16:57 +08:00
@flikecn #7 以前调研过,不过后来由于我们数据库还有些存储过程啥的,所以 读写分离 还没搞
scalaer
2019-01-27 12:14:44 +08:00
好东西,支持一下
flikecn
2019-01-27 15:00:40 +08:00
@mggis0or1 谢谢
zetaoyang
2019-01-27 20:14:00 +08:00
@flikecn 看头像
flikecn
2019-01-28 08:56:41 +08:00
@zetaoyang 兄 dei
pain400
2019-01-28 10:08:08 +08:00
好像发过一次啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/530943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX