› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
flikecn
V2EX  ›  MySQL

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

  •  
  •   flikecn ·
    flike · Jan 2, 2019 · 9494 views
    This topic created in 2866 days ago, the information mentioned may be changed or developed.

    近期开源了一个自己的项目: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 ?

    1. 降低 Master 的负载和网络传输流量。在一主多从的复制拓扑中,Master 需要发送 binlog 到各个 slave,如果 slave 过多的话,网络流量很有可能达到 Master 的网卡上限,同时 Master 上负载也会过高。
    2. 简化主从复制拓扑,不再需要多级复制。
    3. 简化 Master Failover 流程,只需将其中的一个 Slave 提升为 Master,并将 kingbus 指向新的 Master,其他 slave 复制拓扑保持不变。
    4. 减少 Master 上的 binlog 存储空间,将 binlog 都存储到 kingbus 中。
    5. 支持异构复制。其他异构复制组件可以连接在 kingbus 上。
    44 replies  •  2019-01-04 17:00:04 +08:00
    tabris17
    tabris17
    Jan 2, 2019
    1
    谁用到生产环境了记得说一声啊
    xnode
    xnode
    Jan 2, 2019
    2
    mark 有时间看看
    flikecn
    flikecn
    OP
    Jan 2, 2019
    3
    @tabris17 测试环境稳定运行了几天,raft Lead 随意切换也没问题。
    flikecn
    flikecn
    OP
    Jan 2, 2019
    4
    @xnode 欢迎交流
    lincanbin
    lincanbin
    Jan 2, 2019 via Android
    5
    这种项目,把自己的测试方法和测试数据也放上来比较好吧。
    这样感觉才会有人拿到生产用。
    swulling
    swulling
    Jan 2, 2019
    6
    思路很不错,现在基本上做跨地域数据同步的方案都是通过 在主从复制之间加一层管道或者其他的东西
    pythondean
    pythondean
    Jan 2, 2019
    7
    @swulling 老哥 加一层管道或者其他东西 应该怎么理解? 我现在用的主从,但是老是容易断. 想找个解决方案,能给个关键词让我去搜索了解下吗
    swulling
    swulling
    Jan 2, 2019
    8
    @pythondean 就用 lz 的方案就好了啊

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

    把这个 some thing 做的跨地域高可用高性能,就可以了,你可以把这个 some thing 理解为分布式强一致的消息队列
    swulling
    swulling
    Jan 2, 2019❤️1
    9
    架构设计一大方法,实在搞不定就加一层 -_-
    tanszhe
    tanszhe
    Jan 2, 2019
    10
    mysql 的 slave 也应该可以从 slave 同步吧,难道非要 从 master ?
    abmin521
    abmin521
    Jan 2, 2019 via Android
    11
    国内似乎有个 tidb 的东西
    flikecn
    flikecn
    OP
    Jan 2, 2019
    12
    @lincanbin 目前只做了稳定性测试,测试方法就是 Quick start 提到的。不建议直接上生产环境,后续我会进一步做异常测试,待稳定后再推荐上生产环境。
    flikecn
    flikecn
    OP
    Jan 2, 2019
    13
    @swulling 是的。分布式里面有个理念就是:the log is the database
    flikecn
    flikecn
    OP
    Jan 2, 2019
    14
    @tanszhe 可用从任何有个 kingbus 节点同步,只需要在该节点上启动一个 binlog server 服务。你可以理解为 binlog server 就是一个伪 master,它会从本地存储引擎中读取 binlog 发送给 slave
    flikecn
    flikecn
    OP
    Jan 2, 2019
    15
    @abmin521 tidb 是 NewSQL,kingbus 是一个分布式的 MySQL 日志存储系统,支持同构复制,后续有空会支持异构复制( mysql-->es ),不是一类产品。:)
    donyee
    donyee
    Jan 2, 2019
    16
    阿里开源的 canal,和你这个类似,Java 实现的
    flikecn
    flikecn
    OP
    Jan 2, 2019
    17
    @donyee cannal 不支持 MySQL-->MySQL 复制方式,它存储需要依赖于 kafka,kingbus 是通过 raft 协议实现强一致存储的。
    janxin
    janxin
    Jan 2, 2019
    18
    kingshard 还有什么新 Feautre 规划吗?
    flikecn
    flikecn
    OP
    Jan 2, 2019
    19
    @janxin 打算重构一下连接池 :)
    Mirana
    Mirana
    Jan 2, 2019
    20
    个人的产品?
    n329291362
    n329291362
    Jan 2, 2019
    21
    mark 一下 晚上看看
    flikecn
    flikecn
    OP
    Jan 2, 2019 via Android
    22
    @Mirana 是的
    flikecn
    flikecn
    OP
    Jan 2, 2019 via Android
    23
    @n329291362 欢迎关注和交流
    rrfeng
    rrfeng
    Jan 2, 2019
    24
    binlog 存到哪里去了? raft 中?量大了怎么办?跨集群的话 raft 协议交互也要带宽的,怎么就比 master -slave 就好了?
    flikecn
    flikecn
    OP
    Jan 2, 2019 via Android
    25
    @rrfeng binlog 存各个节点的本地磁盘,只是通过 raft 协议保证多节点数据强一致。不是比 ms 复制方式好,而是拓展了复制模式。具体场景参考 github 主页。
    auxox
    auxox
    Jan 2, 2019
    26
    和阿里的 canal 是同一类应用吗?
    flikecn
    flikecn
    OP
    Jan 2, 2019 via Android
    27
    @auxox 不是,canal 主要用于异构复制。kingbus 用于同构复制。
    dezhou9
    dezhou9
    Jan 2, 2019 via Android
    28
    名字建议改成真正的特点或者特性,什么 kingxx 就跟叫自己是 db 大王一样傻。东西是不错
    hackerwin7
    hackerwin7
    Jan 2, 2019 via iPhone
    29
    但你拉起 binlog 的形式应该跟 canal 差不多吧,同样是 slave fetch master
    davidli888
    davidli888
    Jan 2, 2019
    30
    出现异常情况 同步数据会不会有丢失? 数据丢失后有没有机制来恢复数据呢?
    davidli888
    davidli888
    Jan 2, 2019
    31
    原来 kingshared 是楼主写的
    flikecn
    flikecn
    OP
    Jan 2, 2019 via Android
    32
    @davidli888 异常情况,例如 master 挂了,如果 master 与 kingbus 是半同步,则不会丢失数据。其他例如 Lead 切换都考虑到了。
    davidli888
    davidli888
    Jan 2, 2019
    33
    @flikecn 如果 Master 挂了后 重启服务 kingbus 会从 Master 最新的 log 日志位置去同步吧? 那挂了后 kingbus 会把内存中的日志同步出去后再等待 Master 重启?
    flikecn
    flikecn
    OP
    Jan 3, 2019 via Android
    34
    @davidli888 会的。基于 gtid 方式同步,保证数据不对不乱。完全按照 mysql 复制协议实现日志同步。
    zeraba
    zeraba
    Jan 3, 2019 via Android
    35
    需要 5.6 以上 开启 gtid 吧
    flikecn
    flikecn
    OP
    Jan 3, 2019
    36
    @zeraba 是的。只支持 gtid 方式复制。这样能保证数据不丢。file+position 同步方式在切换 Master 时有可能丢失数据。
    LukeChien
    LukeChien
    Jan 3, 2019 via Android
    37
    楼主的 kingshared 不错!
    ghonfir
    ghonfir
    Jan 3, 2019
    38
    不错的东西 本来 19 年打算做这个的 思路也差不多
    davidli888
    davidli888
    Jan 3, 2019
    39
    @flikecn 有机会尝试下 现在数据量比较大 挺头疼
    fuyufjh
    fuyufjh
    Jan 3, 2019
    40
    赞一个
    vinsoncou
    vinsoncou
    Jan 3, 2019
    41
    @flikecn 支持多主同步么?
    flikecn
    flikecn
    OP
    Jan 3, 2019
    42
    @vinsoncou 不支持,单个 kingbus 只能有一个主。
    vinsoncou
    vinsoncou
    Jan 4, 2019
    43
    @flikecn 后期会支持么?
    flikecn
    flikecn
    OP
    Jan 4, 2019
    44
    @vinsoncou 暂时不考虑支持多源复制,建议搭建多套 kingbus 支持。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1628 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 10:47 · PVG 18:47 · LAX 02:47 · JFK 05:47
    ♥ Do have faith in what you're doing.