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關鍵配置
[[email protected]]# cat /etc/my.cnfmax_connections = 2048
max_connect_errors = 100000[[email protected]]# 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自動分配。
測試腳本
測試腳本很簡單:
[[email protected]]# 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
測試完後對結果進行整理彙總即可。
測試結果
測試成功次數
測試成功率
結論及建議
Qihoo360開源的精神值得學習,不過目前來看Atlas還有一定提升空間,不妨等它更加穩定並且能支持更多特性後再上線使用不遲。
但是對那些苦於無法將slave從庫資源利用起來的同學們來說,在前端加一層Atlas倒是很不錯的選擇,畢竟其他可選的產品太少了,只要程序中不用到特殊的SQL一般也不會有大問題,注意提高程序對數據的容錯性即可。
--------------------------------------分割線--------------------------------------
知數堂 (http://zhishuedu.com)培訓是由資深MySQL專家葉金榮、吳炳錫聯合推出的專業優質培訓品牌,主要有MySQL DBA實戰優化和Python運維開發課程,是業內最有良心、最有品質的培訓課程。
本文出自 “老葉茶館” 博客,請務必保留此出處http://imysql.blog.51cto.com/1540006/1879883