qihoo360将他们改造后的mysql proxy项目开源了,至于为什么起名atlas就不清楚了,项目地址:https://github.com/qihoo360/atlas。我2008年曾测试过官方版本的mysql proxy,主要是看中其连接池以及读写分离功能,不过当时的版本效率实在太差,后面就没再关注
qihoo360将他们改造后的mysql proxy项目开源了,至于为什么起名atlas就不清楚了,项目地址:https://github.com/qihoo360/atlas。我2008年曾测试过官方版本的mysql proxy,主要是看中其连接池以及读写分离功能,不过当时的版本效率实在太差,后面就没再关注了。这几天对qihoo360 atlas做了下测试,下面是测试结果。
环境准备 服务器端:
测试机 dell pe r710
cpu e5620 @ 2.40ghz(4 core, 8 threads) * 2
内存 24g
raid卡 perc h700 integrated, 512mb, bbu, 12.10.1-0001
系统 red hat enterprise linux server release 6.4 (santiago)
内核 2.6.32-358.el6.x86_64 #1 smp
raid级别 raid 5(10k rpm sas 300g * 6)
文件系统 xfs
硬盘 10k rpm sas 300g * 6
proxy代理层端:
测试机 hp dl360 g5
cpu e5405@ 2.00ghz(4 core, 4 threads) * 2
内存 16g
raid卡 p400i 256mb, bbu,4.12
系统 red hat enterprise linux server release 6.1 (santiago)
内核 2.6.32-131.0.15.el6.x86_64#1 smp
raid级别 raid 0(10k rpm sas 146g * 2)
文件系统 ext4
硬盘 10k rpm sas 146g* 2
mysql及atlas关键配置 [yejr@imysql.com]# cat /etc/my.cnf max_connections = 2048 max_connect_errors = 100000 [yejr@imysql.com]# cat /usr/local/mysql-proxy/conf/13306.cnf event-threads = 16 min-idle-connections = 768 测试方案 1. 采用tpcc-mysql进行压测,但由于atlas不支持prepare,未遂;
2. 采用sysbench进行压测,但由于atlas当前版本对长连接支持不佳,出现大量的connection lost告警,测试结果几乎无效,忽略;
3. 采用开发者提供的一个简易c程序,进行并发多线程短连接测试,虽然有部分connection lost告警,但比用sysbench时少多了,结果有效;
开发者提供的c程序,若有需要可向开发者提出,由于未得到授权,我不方便将其放上来供下载。
测试模式:
测试程序并发数:32、64、128、192、256、320、384、448、512、576、640,每线程完成10000次请求,每次请求都是随机的select、insert、update,,每次update都是基于主键条件,insert就不用说了,select有4种随机模式:
a)/*master*/select * from mysqlslap.t1 where /*waht*/id in (n1, n2, n3)
b)select * from mysqlslap.t1 where id = n
c)select * from mysqlslap.t1 where id in (n1, n2) limit 1
d)/*master*/select * from /*test*/ mysqlslap.t1 where id = %d
也就是select请求会模拟强制读master,或者让atlas自动分配。
测试脚本 测试脚本很简单:
[yejr@imysql.com]# cat atlas_benchmark.sh #!/bin/bash myserver=10.0.0.1 port=13306 export ld_library_path=/usr/local/mysql/lib/mysql for thread in 32 64 128 192 256 320 384 448 512 576 640 do #记录日志 exec 3>&1 4>&2 1>> check_1m3s_1server_1proxy_${thread}_${random}.log 2>&1 count=1 max=5 #每种并发模式都进行5轮测试,最后取结果平均值 while [ $count -le ${max} ] do echo ./check -t short -c ${thread} -h ${myserver} -p ${port} -u proxy -p proxy -n 10000 ./check -t short -c ${thread} -h ${myserver} -p ${port}-u proxy -p proxy -n 10000 count=`expr ${count} + 1` #每次测试完,都会暂停60秒,让数据库歇歇 :) if [ ${count} -lt ${max} ] ; then sleep 60 fi done done 测试完后对结果进行整理汇总即可。
测试结果 测试成功次数
atlas proxy并发测试成功次数 – 20130911
测试成功率
atlas proxy并发测试成功率 – 20130911
结论及建议 qihoo360开源的精神值得学习,不过目前来看atlas还有一定提升空间,不妨等它更加稳定并且能支持更多特性后再上线使用不迟。
但是对那些苦于无法将slave从库资源利用起来的同学们来说,在前端加一层atlas倒是很不错的选择,毕竟其他可选的产品太少了,只要程序中不用到特殊的sql一般也不会有大问题,注意提高程序对数据的容错性即可。