轻量级中间件MySQL Router介绍与性能测试

http://www.innomysql.net/article/25361.html#rd?sukey=014c68f407f2d3e115d27f247b7e04b154f8eb4fdf63c87b62a39443d0ee10267f3e328e59e7f4fac657921683f1fe2a


官方对于MySQL Router的定义是:

MySQL Router is lightweight middleware that provides transparent routing between your application and any backend MySQL Servers. It can be used for a wide variety of use cases, such as providing high availability and scalability by effectively routing database traffic to appropriate backend MySQL Servers. The pluggable architecture also enables developers to extend MySQL Router for custom use cases.

一言以蔽之,MySQL Router就是一个轻量级的中间件用来实现高可用和扩展性的功能。MySQL Fabric不是也有这样的作用吗?的确,但是MySQL Fabric最大的一个缺点是应用需要改造,用Fabric独有的Java或Python驱动,并且目前只支持Java,Python和PHP语言,即MySQL Fabric是在驱动层面实现的高可用和扩展功能。而MySQL Router是一个中间件,该中间的访问协议与MySQL一致,应用不需要做任何的修改。例如下面的MySQL Router配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[DEFAULT]
logging_folder = /var/log/mysqlrouter
 
[logger]
level = INFO
 
[routing:failover]
bind_address = 10.166.224.50
bind_port = 7001
max_connections = 1024
mode = read -write
destinations = 10.166.224.33:3310,10.166.224.34:3310
 
[routing:balancing]
bind_address = 10.166.224.50
bind_port = 7002
connect_timeout = 3
max_connections = 1024
mode = read -only
destinations = 10.166.224.33:3310,10.166.224.34:3310

通过该配置文件启动MySQL Router会监听两个端口10.166.224.50:7001和10.166.224.50:7002。10.166.224.50:7001是一个高可用的端口(mode=read-write),通过7001的端口访问MySQL Router中间件会首先将请求发送到服务器10.166.224.33:3310,如果确定该服务器宕机,则会发送到服务器10.166.224.34:3310。10.166.224.50:7002是一个负载均衡的端口,每个都请求可以将通过roundrobin的方式发送到destiantions对应的MySQL服务器。通过MySQL Router用户可以快速实现一个简单的带有读写分离的高可用集群。MySQL Router甚至可以链接MySQL Fabric的元数据库,具体可查看MySQL Router的相关文档。

MySQL Router之前官方的中间件是MySQL Proxy,这么多年一直是alpha版本,堪称业界奇迹。不过随着MySQL Router的发布,官网其实已经无法直接下载MySQL Proxy了。但Inside君还是决定对MySQL Router和MySQL Proxy做一个简单的性能测试。测试场景是全内存的SELECT操作,测试工具使用sysbench,测试环境是网易云主机。最终的测试结果如下图所示:

router_vs_proxy

测试使用16线程的select.lua脚本的测试,对比远程客户端直连MySQL,远程客户端连接MySQL Router,远程客户端连接到MySQL Proxy,后两者需要再进行一个转发才能连接到目的MySQL数据库,因此性能肯定会比直连MySQL方式要差。从结果看MySQL Router比直连MySQL性能要差15%,QPS平均值接近20000。但是MySQL Proxy的测试结果QPS仅5700,简直惨不忍睹。导致这样结果最重要的原因是MySQL Proxy采用使用lua脚本语言,测试过程中CPU负载高达290%(4核CPU)。MySQL Proxy测试过程中CPU的使用率在50%左右,表现较为平稳。

看来MySQL Router用来做负载均衡是一个不错的选择,特别是用来做高可用架构下的只读VIP,那么对比传统的LVS性能又会是怎样呢?接着Inside君又对比了MySQL Router和LVS的负载均衡性能测试对比,同样是SELECT全内存测试,但是并发数提升至128个线程。测试结果如下所示:

lvs_vs_router

可以发现在128个线程下单实例MySQL直连模式和MySQL Router中间件模式已经没有太大的区别,QPS都在26000左右。当采用两个MySQL实例实现只读操作的负载均衡时,可以发现MySQL Router的QPS在48000左右,而LVS模式在52000左右,性能提升8%,更为重要的是LVS转发服务器上基本没有什么负载。

这就是Inside君MySQL Router的简单介绍与性能测试报告,总结来说MySQL Router的优点:

  • 上手快,很容易配置
  • 较为稳定,性能中没有遇到什么问题
  • 插件式的架构允许用户进行额外功能的扩展

缺点的话:

  • 仅支持简单的负载均衡功能
  • 高可用功能有待进一步测试
  • 虽然支持Fabric元数据,但是不支持分库分表(不得不说是一个遗憾)
  • 白名单,SQL统计功能,防火墙功能缺失
  • 需要gcc 4.8以上版本支持,老系统编译比较麻烦些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值