› 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

kingshard 架构设计和功能实现

  •  
  •   flikecn ·
    flike · Aug 18, 2015 · 5910 views
    This topic created in 4091 days ago, the information mentioned may be changed or developed.

    kingshard 开源有一段时间了,有些热心的用户发邮件来咨询 kingshard 的设计和实现问题。于是周末抽空写了一篇介绍 kingshard 架构和功能实现的文章。由于文章有点长,感兴趣的请移步:
    https://github.com/flike/kingshard/blob/master/doc/KingDoc/architecture_of_kingshard_CN.md

    21 replies  •  2015-08-19 10:18:54 +08:00
    flikecn
        1
    flikecn  
    OP
       Aug 18, 2015
    kingshard 是一个由 Go 开发高性能 MySQL Proxy 项目, kingshard 在满足基本的读写分离的功能上,致力于简化 MySQL 分库分表操作;能够让 DBA 通过 kingshard 轻松平滑地实现 MySQL 数据库扩容。

    主要功能:

    1. 读写分离。
    2. 跨节点分表。
    3. 客户端 IP 访问控制。
    4. 平滑上线 DB 或下线 DB ,前端应用无感知。
    5. 支持多个 slave , slave 之间通过权值进行负载均衡。
    6. 支持强制读主库。
    7. 支持将 sql 发送到特定的 node 。
    8. 支持在单个 node 上执行事务,不支持跨多个 node 执行事务。
    hhkbp2
        2
    hhkbp2  
       Aug 18, 2015
    @flikecn 请问对于某一张子表的 failover 是如何实现的?
    flikecn
        3
    flikecn  
    OP
       Aug 18, 2015
    @hhkbp2 是不是子表对应的 node fail 了?那样的话, sql 语句不会再发送到该节点。
    hhkbp2
        4
    hhkbp2  
       Aug 18, 2015
    @flikecn 那样对应分表的数据如何设置备份 node 以提供高可用服务?
    flikecn
        5
    flikecn  
    OP
       Aug 18, 2015
    @hhkbp2 目前后端 DB 的 failover 还没涉及到,只提供了接口。
    wudikua
        6
    wudikua  
       Aug 18, 2015
    开个专题给讲讲词法解析这部分吧
    flikecn
        7
    flikecn  
    OP
       Aug 18, 2015
    @wudikua 将有关 kingshard 的词法解析倒是可以的。
    starlion
        8
    starlion  
       Aug 18, 2015
    跨节点查询怎么实现的?
    wudikua
        9
    wudikua  
       Aug 18, 2015
    @flikecn 可以啊,我觉得这种东西最麻烦的就是处理各种复杂的 SQL ,比如什么子查询, join 乱七八杂的。
    sujin190
        10
    sujin190  
       Aug 18, 2015
    mysql workbench 连不上去, set 指令解析有问题啊
    aszxqw
        11
    aszxqw  
       Aug 18, 2015
    @flikecn 恩,讲讲词法解析吧。
    invite
        12
    invite  
       Aug 19, 2015
    Proxy 本身的 HA 如何实现?备份还是双活?切换后,状态是否保存?
    flikecn
        13
    flikecn  
    OP
       Aug 19, 2015
    @starlion 每个节点单独启一个 goroutine 发一个 SQL ,然后收结果。
    flikecn
        14
    flikecn  
    OP
       Aug 19, 2015
    @sujin190 我确认一下。
    flikecn
        15
    flikecn  
    OP
       Aug 19, 2015
    @invite 提供了 HA 的接口。切换还需要自己切。
    flikecn
        16
    flikecn  
    OP
       Aug 19, 2015
    @sujin190 这个问题确认了,确实有问题。是 mysql workbench 发了一条:“ SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ”。我现在在考虑要不要支持这么多客户端,因为这些客户端会发一些稀奇古怪的 SQL 语句。
    invite
        17
    invite  
       Aug 19, 2015
    @flikecn 举个例子看看。

    PS :如果需要自己切换,没有自动接管机制,对用户来说肯定是一个问题。个人觉得不应该把切换交给开发人员去做。
    sujin190
        18
    sujin190  
       Aug 19, 2015
    @flikecn 其实可以写条通用规则,语法解析都能过,但没效果,这样客户端也能连上
    sujin190
        19
    sujin190  
       Aug 19, 2015
    @flikecn 发现 sort 虽然能用但不是全局排序啊,而且似乎不能在 where 语句中不带分表的 key 做全部表查询啊
    flikecn
        20
    flikecn  
    OP
       Aug 19, 2015
    @sujin190 是的。为了效率考虑,必须带 key 查询。 order by group by 后续会加上。
    flikecn
        21
    flikecn  
    OP
       Aug 19, 2015
    @sujin190 这样会误导客户端。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2476 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 13:10 · PVG 21:10 · LAX 06:10 · JFK 09:10
    ♥ Do have faith in what you're doing.