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 | [yejr@imysql.com]# cat /etc/my.cnfmax_connections = 2048
max_connect_errors = 100000[yejr@imysql.com]# cat /usr/local/mysql-proxy/conf/13306.cnfevent-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一般也不会有大问题,注意提高程序对数据的容错性即可。
|