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
flikecn
V2EX  ›  MySQL

kingshard 架构设计和功能实现

  •  
  •   flikecn ·
    flike · 2015-08-18 08:47:15 +08:00 · 4734 次点击
    这是一个创建于 3387 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    21 条回复    2015-08-19 10:18:54 +08:00
    flikecn
        1
    flikecn  
    OP
       2015-08-18 08:58:02 +08:00
    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  
       2015-08-18 09:06:01 +08:00
    @flikecn 请问对于某一张子表的 failover 是如何实现的?
    flikecn
        3
    flikecn  
    OP
       2015-08-18 09:19:19 +08:00
    @hhkbp2 是不是子表对应的 node fail 了?那样的话, sql 语句不会再发送到该节点。
    hhkbp2
        4
    hhkbp2  
       2015-08-18 09:27:10 +08:00
    @flikecn 那样对应分表的数据如何设置备份 node 以提供高可用服务?
    flikecn
        5
    flikecn  
    OP
       2015-08-18 09:39:59 +08:00
    @hhkbp2 目前后端 DB 的 failover 还没涉及到,只提供了接口。
    wudikua
        6
    wudikua  
       2015-08-18 11:53:13 +08:00
    开个专题给讲讲词法解析这部分吧
    flikecn
        7
    flikecn  
    OP
       2015-08-18 14:09:11 +08:00
    @wudikua 将有关 kingshard 的词法解析倒是可以的。
    starlion
        8
    starlion  
       2015-08-18 17:06:50 +08:00
    跨节点查询怎么实现的?
    wudikua
        9
    wudikua  
       2015-08-18 17:51:32 +08:00
    @flikecn 可以啊,我觉得这种东西最麻烦的就是处理各种复杂的 SQL ,比如什么子查询, join 乱七八杂的。
    sujin190
        10
    sujin190  
       2015-08-18 17:55:47 +08:00
    mysql workbench 连不上去, set 指令解析有问题啊
    aszxqw
        11
    aszxqw  
       2015-08-18 17:57:08 +08:00
    @flikecn 恩,讲讲词法解析吧。
    invite
        12
    invite  
       2015-08-19 08:24:41 +08:00
    Proxy 本身的 HA 如何实现?备份还是双活?切换后,状态是否保存?
    flikecn
        13
    flikecn  
    OP
       2015-08-19 08:56:03 +08:00
    @starlion 每个节点单独启一个 goroutine 发一个 SQL ,然后收结果。
    flikecn
        14
    flikecn  
    OP
       2015-08-19 08:56:13 +08:00
    @sujin190 我确认一下。
    flikecn
        15
    flikecn  
    OP
       2015-08-19 08:56:47 +08:00
    @invite 提供了 HA 的接口。切换还需要自己切。
    flikecn
        16
    flikecn  
    OP
       2015-08-19 09:24:47 +08:00
    @sujin190 这个问题确认了,确实有问题。是 mysql workbench 发了一条:“ SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ”。我现在在考虑要不要支持这么多客户端,因为这些客户端会发一些稀奇古怪的 SQL 语句。
    invite
        17
    invite  
       2015-08-19 09:45:22 +08:00
    @flikecn 举个例子看看。

    PS :如果需要自己切换,没有自动接管机制,对用户来说肯定是一个问题。个人觉得不应该把切换交给开发人员去做。
    sujin190
        18
    sujin190  
       2015-08-19 10:04:52 +08:00
    @flikecn 其实可以写条通用规则,语法解析都能过,但没效果,这样客户端也能连上
    sujin190
        19
    sujin190  
       2015-08-19 10:06:54 +08:00
    @flikecn 发现 sort 虽然能用但不是全局排序啊,而且似乎不能在 where 语句中不带分表的 key 做全部表查询啊
    flikecn
        20
    flikecn  
    OP
       2015-08-19 10:18:31 +08:00
    @sujin190 是的。为了效率考虑,必须带 key 查询。 order by group by 后续会加上。
    flikecn
        21
    flikecn  
    OP
       2015-08-19 10:18:54 +08:00
    @sujin190 这样会误导客户端。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:38 · PVG 22:38 · LAX 06:38 · JFK 09:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.