近期开源了一个自己的项目:kingbus,感兴趣的可以看看。:)
https://github.com/flike/kingbus
kingbus 是一个基于 raft 强一致协议实现的分布式 MySQL binlog 存储系统。它能够充当一个 MySQL Slave 从真正的 Master 上同步 binglog,并存储在分布式集群中;同时又充当一个 MySQL Master 将集群中的 binlog 同步给其他 Slave。kingbus 具有如下特性:
兼容 MySQL 复制协议,通过 Gtid 方式同步Master 上的 binlog,同时支持 slave 通过 Gtid 方式从 kingbus 拉取 binlog。
跨地域数据复制,kingbus 通过 raft 协议支出跨地域间的数据复制。写入到集群的 binlog 数据在多个节点间保证强一致,并保证 binlog 顺序与 master 上完全一致。
高可用,由于 kingbus 是构建在 Raft 强一致协议之上,能够实现集群中过半数节点存活的情况下,整个 binlog 拉取和推送服务高可用。
![]() | 1 tabris17 2019-01-02 10:10:06 +08:00 谁用到生产环境了记得说一声啊 |
![]() | 2 xnode 2019-01-02 10:10:40 +08:00 mark 有时间看看 |
![]() | 5 lincanbin 2019-01-02 11:03:41 +08:00 via Android 这种项目,把自己的测试方法和测试数据也放上来比较好吧。 这样感觉才会有人拿到生产用。 |
![]() | 6 swulling 2019-01-02 11:16:16 +08:00 思路很不错,现在基本上做跨地域数据同步的方案都是通过 在主从复制之间加一层管道或者其他的东西 |
7 pythondean 2019-01-02 11:19:51 +08:00 @swulling 老哥 加一层管道或者其他东西 应该怎么理解? 我现在用的主从,但是老是容易断. 想找个解决方案,能给个关键词让我去搜索了解下吗 |
![]() | 8 swulling 2019-01-02 11:42:59 +08:00 @pythondean 就用 lz 的方案就好了啊 就是原来 MySQL 的主从是 主->从,现在大家的解决方案基本是 主-> some thing -> 从 把这个 some thing 做的跨地域高可用高性能,就可以了,你可以把这个 some thing 理解为分布式强一致的消息队列 |
![]() | 9 swulling 2019-01-02 11:43:49 +08:00 ![]() 架构设计一大方法,实在搞不定就加一层 -_- |
![]() | 10 tanszhe 2019-01-02 11:45:39 +08:00 mysql 的 slave 也应该可以从 slave 同步吧,难道非要 从 master ? |
![]() | 11 abmin521 2019-01-02 11:52:57 +08:00 via Android 国内似乎有个 tidb 的东西 |
![]() | 12 flikecn OP @lincanbin 目前只做了稳定性测试,测试方法就是 Quick start 提到的。不建议直接上生产环境,后续我会进一步做异常测试,待稳定后再推荐上生产环境。 |
![]() | 14 flikecn OP @tanszhe 可用从任何有个 kingbus 节点同步,只需要在该节点上启动一个 binlog server 服务。你可以理解为 binlog server 就是一个伪 master,它会从本地存储引擎中读取 binlog 发送给 slave |
![]() | 15 flikecn OP @abmin521 tidb 是 NewSQL,kingbus 是一个分布式的 MySQL 日志存储系统,支持同构复制,后续有空会支持异构复制( mysql-->es ),不是一类产品。:) |
16 donyee 2019-01-02 12:43:26 +08:00 阿里开源的 canal,和你这个类似,Java 实现的 |
![]() | 17 flikecn OP @donyee cannal 不支持 MySQL-->MySQL 复制方式,它存储需要依赖于 kafka,kingbus 是通过 raft 协议实现强一致存储的。 |
![]() | 18 janxin 2019-01-02 14:37:10 +08:00 kingshard 还有什么新 Feautre 规划吗? |
20 Mirana 2019-01-02 15:10:32 +08:00 个人的产品? |
![]() | 21 n329291362 2019-01-02 15:19:07 +08:00 mark 一下 晚上看看 |
![]() | 23 flikecn OP @n329291362 欢迎关注和交流 |
![]() | 24 rrfeng 2019-01-02 15:42:40 +08:00 binlog 存到哪里去了? raft 中?量大了怎么办?跨集群的话 raft 协议交互也要带宽的,怎么就比 master -slave 就好了? |
![]() | 25 flikecn OP @rrfeng binlog 存各个节点的本地磁盘,只是通过 raft 协议保证多节点数据强一致。不是比 ms 复制方式好,而是拓展了复制模式。具体场景参考 github 主页。 |
26 auxox 2019-01-02 18:34:07 +08:00 和阿里的 canal 是同一类应用吗? |
28 dezhou9 2019-01-02 19:10:52 +08:00 via Android 名字建议改成真正的特点或者特性,什么 kingxx 就跟叫自己是 db 大王一样傻。东西是不错 |
![]() | 29 hackerwin7 2019-01-02 19:25:38 +08:00 via iPhone 但你拉起 binlog 的形式应该跟 canal 差不多吧,同样是 slave fetch master |
30 davidli888 2019-01-02 19:32:59 +08:00 出现异常情况 同步数据会不会有丢失? 数据丢失后有没有机制来恢复数据呢? |
31 davidli888 2019-01-02 19:35:34 +08:00 原来 kingshared 是楼主写的 |
![]() | 32 flikecn OP @davidli888 异常情况,例如 master 挂了,如果 master 与 kingbus 是半同步,则不会丢失数据。其他例如 Lead 切换都考虑到了。 |
33 davidli888 2019-01-02 21:16:30 +08:00 @flikecn 如果 Master 挂了后 重启服务 kingbus 会从 Master 最新的 log 日志位置去同步吧? 那挂了后 kingbus 会把内存中的日志同步出去后再等待 Master 重启? |
![]() | 34 flikecn OP @davidli888 会的。基于 gtid 方式同步,保证数据不对不乱。完全按照 mysql 复制协议实现日志同步。 |
35 zeraba 2019-01-03 08:33:03 +08:00 via Android 需要 5.6 以上 开启 gtid 吧 |
![]() | 36 flikecn OP @zeraba 是的。只支持 gtid 方式复制。这样能保证数据不丢。file+position 同步方式在切换 Master 时有可能丢失数据。 |
37 LukeChien 2019-01-03 10:10:27 +08:00 via Android 楼主的 kingshared 不错! |
![]() | 38 sryanyuan 2019-01-03 10:16:02 +08:00 不错的东西 本来 19 年打算做这个的 思路也差不多 |
39 davidli888 2019-01-03 10:29:17 +08:00 @flikecn 有机会尝试下 现在数据量比较大 挺头疼 |
![]() | 40 fuyufjh 2019-01-03 12:37:29 +08:00 赞一个 |