首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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
宝塔
V2EX  ›  MySQL

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

  •  
  •   flikecn · 319 天前 · 4304 次点击
    这是一个创建于 319 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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