Qihoo360 Atlas MySQL Proxy測試小結

Qihoo360將他們改造後的MySQL Proxy項目開源了,至於爲什麼起名Atlas就不清楚了,項目地址:https://github.com/Qihoo360/Atlas。我2008年曾測試過官方版本的MySQL Proxy,主要是看中其連接池以及讀寫分離功能,不過當時的版本效率實在太差,後面就沒再關注了。這幾天對Qihoo360 Atlas做了下測試,下面是測試結果。

  • 環境準備

服務器端:

測試機DELL PE R710
CPUE5620  @ 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
CPUE5405 @ 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

測試完後對結果進行整理彙總即可。

  • 測試結果

測試成功次數

Atlas Proxy併發測試成功次數 - 20130911

Atlas Proxy併發測試成功次數 – 20130911

測試成功率

Atlas Proxy併發測試成功率 - 20130911

Atlas Proxy併發測試成功率 – 20130911

  • 結論及建議

Qihoo360開源的精神值得學習,不過目前來看Atlas還有一定提升空間,不妨等它更加穩定並且能支持更多特性後再上線使用不遲。

但是對那些苦於無法將slave從庫資源利用起來的同學們來說,在前端加一層Atlas倒是很不錯的選擇,畢竟其他可選的產品太少了,只要程序中不用到特殊的SQL一般也不會有大問題,注意提高程序對數據的容錯性即可。


--------------------------------------分割線--------------------------------------

知數堂 (http://zhishuedu.com)培訓是由資深MySQL專家葉金榮、吳炳錫聯合推出的專業優質培訓品牌,主要有MySQL DBA實戰優化和Python運維開發課程,是業內最有良心、最有品質的培訓課程。

本文出自 “老葉茶館” 博客,請務必保留此出處http://imysql.blog.51cto.com/1540006/1879883

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章