一个用 Go 语言开发的分布式 MySQL Binlog 存储系统

2019-01-02 09:56:58 +08:00
 flikecn

近期开源了一个自己的项目:kingbus,感兴趣的可以看看。:)

https://github.com/flike/kingbus

kingbus 简介

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

为什么需要 kingbus ?

  1. 降低 Master 的负载和网络传输流量。在一主多从的复制拓扑中,Master 需要发送 binlog 到各个 slave,如果 slave 过多的话,网络流量很有可能达到 Master 的网卡上限,同时 Master 上负载也会过高。
  2. 简化主从复制拓扑,不再需要多级复制。
  3. 简化 Master Failover 流程,只需将其中的一个 Slave 提升为 Master,并将 kingbus 指向新的 Master,其他 slave 复制拓扑保持不变。
  4. 减少 Master 上的 binlog 存储空间,将 binlog 都存储到 kingbus 中。
  5. 支持异构复制。其他异构复制组件可以连接在 kingbus 上。
8099 次点击
所在节点    MySQL
44 条回复
n329291362
2019-01-02 15:19:07 +08:00
mark 一下 晚上看看
flikecn
2019-01-02 15:37:04 +08:00
@Mirana 是的
flikecn
2019-01-02 15:37:22 +08:00
@n329291362 欢迎关注和交流
rrfeng
2019-01-02 15:42:40 +08:00
binlog 存到哪里去了? raft 中?量大了怎么办?跨集群的话 raft 协议交互也要带宽的,怎么就比 master -slave 就好了?
flikecn
2019-01-02 17:55:47 +08:00
@rrfeng binlog 存各个节点的本地磁盘,只是通过 raft 协议保证多节点数据强一致。不是比 ms 复制方式好,而是拓展了复制模式。具体场景参考 github 主页。
auxox
2019-01-02 18:34:07 +08:00
和阿里的 canal 是同一类应用吗?
flikecn
2019-01-02 18:46:11 +08:00
@auxox 不是,canal 主要用于异构复制。kingbus 用于同构复制。
dezhou9
2019-01-02 19:10:52 +08:00
名字建议改成真正的特点或者特性,什么 kingxx 就跟叫自己是 db 大王一样傻。东西是不错
hackerwin7
2019-01-02 19:25:38 +08:00
但你拉起 binlog 的形式应该跟 canal 差不多吧,同样是 slave fetch master
davidli888
2019-01-02 19:32:59 +08:00
出现异常情况 同步数据会不会有丢失? 数据丢失后有没有机制来恢复数据呢?
davidli888
2019-01-02 19:35:34 +08:00
原来 kingshared 是楼主写的
flikecn
2019-01-02 20:53:09 +08:00
@davidli888 异常情况,例如 master 挂了,如果 master 与 kingbus 是半同步,则不会丢失数据。其他例如 Lead 切换都考虑到了。
davidli888
2019-01-02 21:16:30 +08:00
@flikecn 如果 Master 挂了后 重启服务 kingbus 会从 Master 最新的 log 日志位置去同步吧? 那挂了后 kingbus 会把内存中的日志同步出去后再等待 Master 重启?
flikecn
2019-01-03 07:39:07 +08:00
@davidli888 会的。基于 gtid 方式同步,保证数据不对不乱。完全按照 mysql 复制协议实现日志同步。
zeraba
2019-01-03 08:33:03 +08:00
需要 5.6 以上 开启 gtid 吧
flikecn
2019-01-03 09:50:30 +08:00
@zeraba 是的。只支持 gtid 方式复制。这样能保证数据不丢。file+position 同步方式在切换 Master 时有可能丢失数据。
LukeChien
2019-01-03 10:10:27 +08:00
楼主的 kingshared 不错!
sryanyuan
2019-01-03 10:16:02 +08:00
不错的东西 本来 19 年打算做这个的 思路也差不多
davidli888
2019-01-03 10:29:17 +08:00
@flikecn 有机会尝试下 现在数据量比较大 挺头疼
fuyufjh
2019-01-03 12:37:29 +08:00
赞一个

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

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

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

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

© 2021 V2EX