近期开源了一个自己的项目: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 1
架构设计一大方法,实在搞不定就加一层 -_-
|
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
赞一个
|