kingbus 是一个基于 raft 强一致协议实现的分布式 MySQL binlog 存储系统。它能够充当一个 MySQL Slave 从真正的 Master 上同步 binglog,并存储在分布式集群中。同时又充当一个 MySQL Master 将集群中的 binlog 同步给其他 Slave。 kingbus 具有如下特性:
kingbus 整体架构如下图所示:
storage 中有两种日志形态,一种是 raft 日志(以下称为 raft log ),由 raft 算法产生和使用,另一种是用户形态的 Log (也就是 mysql binlog event )。Storage 在设计中,将两种 Log 形态组合成一个 Log Entry。只是通过不同的头部信息来区分。Storage 由数据文件和索引文件组成,如下图所示:
Etcd raft library 在处理已经 Apply 的日志、committed entries 等内容时,是单线程处理的。具体函数参考链接,这个函数处理时间要确保尽可能短,如果处理时间超过 raft 选举时间,会造成集群重新选举。这一点需要特别注意。
binlog syncer 主要工作就是:
binlog server 实现了一个 master 的功能,slave 与 binlog server 建立复制连接时,slave 会发送相关命令,binlog server 需要响应这些命令。最终发送 binlog event 给 slave。对于每个 slave,binlog server 会启动一个 goroutine 不断读取 raft log,并去掉相关头部信息,就变成了 binlog event,然后再发送给 slave。
本文简要介绍了 kingbus 整体架构和核心组件及流程,通过这篇文章,希望读者对 kingbus 有个较为全面的认识。
开源地址: https://github.com/flike/kingbus 欢迎感兴趣的 star,谢谢
1
whileFalse 2019-01-27 08:48:09 +08:00
LZ 这头像。。。以前是竞鹿的吗
|
2
chinesestudio 2019-01-27 08:58:14 +08:00 via Android
任何需要用到阿里的 少用为妙 开源界 360
|
3
flikecn OP @whileFalse 不是,只是通过竞鹿系统设计的
|
4
misaka19000 2019-01-27 09:32:41 +08:00 via Android 1
不错,有时间好好研究下,话说这是楼主一个人开发的吗?
|
5
mritd 2019-01-27 09:32:49 +08:00 via iPhone
看了半天头像 果然没记错,kingshard 作者^_^
|
6
flikecn OP @misaka19000 是的。一个人开发。
|
9
scalaer 2019-01-27 12:14:44 +08:00 via Android
好东西,支持一下
|
13
pain400 2019-01-28 10:08:08 +08:00
好像发过一次啊
|