近期开源了一个自己的项目:kingbus,感兴趣的可以看看。:)
https://github.com/flike/kingbus
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 拉取和推送服务高可用。
为什么需要 kingbus ?
- 降低 Master 的负载和网络传输流量。在一主多从的复制拓扑中,Master 需要发送 binlog 到各个 slave,如果 slave 过多的话,网络流量很有可能达到 Master 的网卡上限,同时 Master 上负载也会过高。
- 简化主从复制拓扑,不再需要多级复制。
- 简化 Master Failover 流程,只需将其中的一个 Slave 提升为 Master,并将 kingbus 指向新的 Master,其他 slave 复制拓扑保持不变。
- 减少 Master 上的 binlog 存储空间,将 binlog 都存储到 kingbus 中。
- 支持异构复制。其他异构复制组件可以连接在 kingbus 上。