轻量级中间件MYSQL ROUTER介绍与性能测试

mysql_router

话说去年11月去参加OOW大会,听了一场关于MySQL Router的分享。由于我觉得这货没这么快会GA,可是没想到的是在OOW大会前MySQL Router就同MySQL 5.7一块儿GA了。回来以后一直想去测试,可是一直由于各类缘由耽搁了。好在过年时抽出点时间研究了下,今天在服务器上完成了性能测试。mysql

官方对于MySQL Router的定义是:sql

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配置文件:服务器

[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,测试环境是网易云主机。最终的测试结果以下图所示:app

测试使用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个线程。测试结果以下所示:ide

能够发如今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以上版本支持,老系统编译比较麻烦些
相关文章
相关标签/搜索