小试支持分库分表的mysql proxy服务kingshard

这两天在调研评测Mysql Proxy服务,有360的atlas,阿里的cobar,tddl .  最让我感兴趣的还是陈非的kingshard,只因为他的分库分表最合理,有range和bash的方式。 kingshard代码比较的清晰,文档也相应的清晰,我们可以根据自己的需求扩展分库分表.  


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/2016/02/22/%E5%B0%8F%E8%AF%95%E6%94%AF%E6%8C%81%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8%E7%9A%84mysql-proxy%E6%9C%8D%E5%8A%A1kingshard/

kingshard我在centos,ubuntu都测试了一遍,最后在docker里面也搞了一下,正在测试dockerfile,等调试完毕会推送到github。 kingshard给我的感觉就是速度不错,配置文件简练。 

#blog: xiaorui.cc

apt-get install golang
git clone https://github.com/flike/kingshard.git src/github.com/flike/kingshard
cd src/github.com/flike/kingshard
source ./dev.sh
make

然后我们开始编辑kingshard的配置文件.

vim /etc/multi.yaml

# 服务端的地址
addr : 0.0.0.0:9696

# 账号密码
user : root
password : 123123

#log_path : /Users/flike/log

# log level[debug|info|warn|error],default error
log_level : debug
#if set log_sql(on|off) off,the sql log will not output
#log_sql: off

#sql语句黑名单
#blacklist_sql_file: /Users/flike/blacklist

#允许的ip地址
#allow_ips: 127.0.0.1
# the default charset of kingshard is utf8.
#proxy_charset: utf8mb4

# node is an agenda for real remote mysql server.
nodes :
-
    name : node1

    # default max conns for mysql server
    max_conns_limit : 8

    # all mysql in a node must have the same user and password
    user :  root
    password : 123123

最后启动kingshard, 之后我们就可以mysql -uroot -p -h -P9696通过kingshard连接mysql server了。 

./bin/kingshard -config=/etc/multi.yaml

启动正常无ERROR,kingshard对于启动失败的原因描述的很清晰.

[root@ubuntu:~/src/github.com/flike/kingshard][master]#./bin/kingshard -config=/etc/multi.yaml

    __   _                  __                   __
   / /__(_)___  ____ ______/ /_  ____ __________/ /
  / //_/ / __ \/ __ \/ ___/ __ \ / __\/ ___/ __  /
 / ,< / / / / / /_/ (__  ) / / / /_/ / /  / /_/ /
/_/|_/_/_/ /_/\__, /____/_/ /_/\__,_/_/   \__,_/
             /____/
2016/02/20 22:08:27 - INFO - server.go:[240] - [server] "NewServer" "Server running" "netProto=tcp|address=0.0.0.0:9696" conn_id=0

kingshard的性能我没有具体去测试,打算下周一步步的替换线上的mysql proxy.    看kingshard github的描述,性能在1w+ qps左右. 

我们再来描述下kingshard的分表实现,题外化,360的altas刚出来那会,我就一直提交关于分表的issue,只是atlas一直没怎么关注过,或者他们内部早已经实现了分表的功能,只是没有对外开源而已。  这是人家自己的权力我没资格说啥。  后来atlas也出了分表的功能,但不是分布式的调度,只能是单库里面的分库分表。  还是那句话,对于真有相当需求的业务公司来说,花点时间扩展atlas的分表功能不是难问题。   淘宝的cobar是支持分布式的分表,但问题是他的性能是个问题,很是让我等屁民着急。tddl的依赖有些奇特,社区也不热,不推荐。

    shard:
    -   
        table: test_shard_hash
        key: id
        nodes: [node1, node2]
        type: hash
        locations: [4,4]

    -   
        table: test_shard_range
        key: id
        type: range
        nodes: [node1, node2]
        locations: [4,4]
        table_row_limit: 10000

第一个分表模式是hash,可以指定hash的字段,上面是指定id为hash字段。 

第二个分表模式是range区间,他是根据row行数来分表的,kingshard模式还不能按照时间区分。 


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注