一个用 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 条回复
tabris17
2019-01-02 10:10:06 +08:00
谁用到生产环境了记得说一声啊
xnode
2019-01-02 10:10:40 +08:00
mark 有时间看看
flikecn
2019-01-02 10:44:53 +08:00
@tabris17 测试环境稳定运行了几天,raft Lead 随意切换也没问题。
flikecn
2019-01-02 10:45:08 +08:00
@xnode 欢迎交流
lincanbin
2019-01-02 11:03:41 +08:00
这种项目,把自己的测试方法和测试数据也放上来比较好吧。
这样感觉才会有人拿到生产用。
swulling
2019-01-02 11:16:16 +08:00
思路很不错,现在基本上做跨地域数据同步的方案都是通过 在主从复制之间加一层管道或者其他的东西
pythondean
2019-01-02 11:19:51 +08:00
@swulling 老哥 加一层管道或者其他东西 应该怎么理解? 我现在用的主从,但是老是容易断. 想找个解决方案,能给个关键词让我去搜索了解下吗
swulling
2019-01-02 11:42:59 +08:00
@pythondean 就用 lz 的方案就好了啊

就是原来 MySQL 的主从是 主->从,现在大家的解决方案基本是 主-> some thing -> 从

把这个 some thing 做的跨地域高可用高性能,就可以了,你可以把这个 some thing 理解为分布式强一致的消息队列
swulling
2019-01-02 11:43:49 +08:00
架构设计一大方法,实在搞不定就加一层 -_-
tanszhe
2019-01-02 11:45:39 +08:00
mysql 的 slave 也应该可以从 slave 同步吧,难道非要 从 master ?
abmin521
2019-01-02 11:52:57 +08:00
国内似乎有个 tidb 的东西
flikecn
2019-01-02 12:33:13 +08:00
@lincanbin 目前只做了稳定性测试,测试方法就是 Quick start 提到的。不建议直接上生产环境,后续我会进一步做异常测试,待稳定后再推荐上生产环境。
flikecn
2019-01-02 12:33:44 +08:00
@swulling 是的。分布式里面有个理念就是:the log is the database
flikecn
2019-01-02 12:35:11 +08:00
@tanszhe 可用从任何有个 kingbus 节点同步,只需要在该节点上启动一个 binlog server 服务。你可以理解为 binlog server 就是一个伪 master,它会从本地存储引擎中读取 binlog 发送给 slave
flikecn
2019-01-02 12:36:20 +08:00
@abmin521 tidb 是 NewSQL,kingbus 是一个分布式的 MySQL 日志存储系统,支持同构复制,后续有空会支持异构复制( mysql-->es ),不是一类产品。:)
donyee
2019-01-02 12:43:26 +08:00
阿里开源的 canal,和你这个类似,Java 实现的
flikecn
2019-01-02 14:04:48 +08:00
@donyee cannal 不支持 MySQL-->MySQL 复制方式,它存储需要依赖于 kafka,kingbus 是通过 raft 协议实现强一致存储的。
janxin
2019-01-02 14:37:10 +08:00
kingshard 还有什么新 Feautre 规划吗?
flikecn
2019-01-02 15:07:45 +08:00
@janxin 打算重构一下连接池 :)
Mirana
2019-01-02 15:10:32 +08:00
个人的产品?

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

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

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

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

© 2021 V2EX