公司最近要對上讀寫分離的中間件,打算對現下比較流行的中間件逐一進行性能測試。首先測試的是atlas.
此次測試分為兩個部分,(1)atlas與直連db的性能比對,(2)event-threads參數對atlas性能的影響
主要功能:
1.讀寫分離
2.從庫負載均衡
3.IP過濾
4.自動分表
5.DBA可平滑上下線DB
6.自動摘除當機的DB
Atlas相對于官方MySQL-Proxy的優勢
1.将主流程中所有Lua代碼用C重寫,Lua僅用于管理接口
2.重寫網絡模型、線程模型
3.實作了真正意義上的連接配接池
4.優化了鎖機制,性能提高數十倍
二:實驗環境說明
服務
IP
CPU
記憶體
系統
Atlas
172.31.38.151
8
32G
CentOS 6.7
master
172.31.18.104
Slave1
172.31.18.105
Sysbench/salve2
172.31.38.150
三:atlas的安裝與配置
1,在172.31.38.151這個伺服器上部署atlas,下載下傳atlas2.2.1
2,安裝
sudorpm -ivh Atlas-2.2.1.el5.x86_64.rpm
3,改配置檔案
cd /usr/local/mysql-proxy/conf
cat test.cnf
[mysql-proxy]
admin-username = admin
admin-password = 123456
proxy-backend-addresses = 172.31.18.104:3306
proxy-read-only-backend-addresses = 172.31.18.105:3306@1, 172.31.38.150:3306@1
pwds = user1:/iZxz+0GRoA=
daemon = true
log-level =debug
log-path = /usr/local/mysql-proxy/log
sql-log = ON
keepalive = true
event-threads =16
log-level = message
instance = test
proxy-address = 0.0.0.0:1234
admin-address = 0.0.0.0:2345
charset = utf8
4,啟動atlas
cd/usr/local/mysql-proxy/bin
# sudo ./mysql-proxyd test start
OK: MySQL-Proxy of test is started
檢視服務程序是否在:
ps -ef | grep mysql-proxy
root 6874 1 0 01:16 ? 00:00:00/usr/local/mysql-proxy/bin/mysql-proxy--defaults-file=/usr/local/mysql-proxy/conf/test.cnf
root 6875 6874 0 01:16 ? 00:00:00/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf
root 6886 2714 0 01:16 pts/0 00:00:00 grep mysql-proxy
5,進入管理界面:
在主從伺服器分别給atlas授權管理使用者:
grant all privileges on *.* to [email protected] identified by '123456';
mysql -h127.0.0.1 -P2345 -uadmin -p123456
四:atlas與直連db的性能比對測試
此次測試設定了三組對照組:
1,atlas轉發sql到mater
2, atlas轉發sql到一主兩從的mysql叢集
3,直連db
測試工具為sysbench,使用oltp的測試腳本。
執行下面的指令測試sysbench連接配接Atlas:
./bin/sysbench --test=/usr/sysbench/tests/db/oltp.lua \
--oltp-skip-trx=on \
--num-threads=1 \
--max-requests=80000 \
--oltp-test-mode=nontrx \
--db-driver=mysql \
--mysql-db=sbtest \
--mysql-host=172.31.38.151 \
--mysql-port=1234 \
--mysql-user=user1 \
--mysql-password=123456 \
--oltp-nontrx-mode=select \
--db-ps-mode=disable \
--mysql-ignore-errors=1062 prepare ( run cleanup )
上述指令是sysbench執行80000次随機select操作,這80000次操作都是非事務的。 通過修改 --oltp-nontrx-mode 選項,可以執行update和insert操作。 通過修改 --num-threads 參數,可以調整并發測試線程的個數。
執行下面的指令測試直連DB:
--mysql-host=172.31.18.104\
--mysql-port=3306 \
利用sysbench測試了并發線程個數不同的情況下,分别執行80000次 select,update 和 insert 三種操作。每組測試重複三次取平均值。
以下是三個場景下的qps對比:
<a href="http://s3.51cto.com/wyfs02/M02/85/97/wKiom1epgpCgErq3AAA-N73VXK4009.png-wh_500x0-wm_3-wmp_4-s_1653540083.png" target="_blank"></a>
以上資料對應的折線圖如下:
<a href="http://s4.51cto.com/wyfs02/M02/85/96/wKiom1epexSxza__AADY9NqsGVA787.png-wh_500x0-wm_3-wmp_4-s_2008015126.png" target="_blank"></a>
同時測試了sysbench不同并發線程下,完成每個SQL操作平均時間(機關:ms,時間越短,系統性能越好)。具體資料對比如下所示:
<a href="http://s4.51cto.com/wyfs02/M01/85/97/wKiom1epgqfh3x_fAABBlYmv2VA886.png-wh_500x0-wm_3-wmp_4-s_2171402102.png" target="_blank"></a>
<a href="http://s4.51cto.com/wyfs02/M02/85/96/wKioL1epeyzz3-yfAACOebBECH0390.png-wh_500x0-wm_3-wmp_4-s_3963373376.png" target="_blank"></a>
由以上統計結果可知:
(1)在隻能主庫的情況下,通過atlas轉發sql要比直連db性能下降了大約40%-50%
(2)通過atlas引入從庫的負載均衡後,并發小的時候atlas并無優勢,但是随着并發量的增大,atlas優勢明顯.
(3)從每條sql的平均響應時間來看,引入從庫的負載均衡後,在并發小時atlas的響應時間大概是直連db的1-1.5倍,但是當高并發時,atlas的響應時間明顯比直連db的時候少。
由以上測試結果可知atlas适用于一主多從的高并發場景。
五:event-threads參數對atlas性能的影響
event-threads 是 Atlas 工作時建立的工作線程個數,這個值設定的不同對 Atlas 性能也有比較明顯的影響。 将event-threads 分别設定為1,4,8,16,24,32,40,48進行測試,Atlas轉發select請求時的 QPS 和完成每條SQL操作時間對比。具體對比結果如下所述:
qps資料:
<a href="http://s4.51cto.com/wyfs02/M02/85/97/wKiom1epgrzhqL2lAAArVmrJsPU755.png-wh_500x0-wm_3-wmp_4-s_4281270112.png" target="_blank"></a>
以上資料對應的拆線圖為:
平均響應時間:
<a href="http://s3.51cto.com/wyfs02/M02/85/97/wKioL1epgtTDT3LaAAAq7CFaRDE480.png-wh_500x0-wm_3-wmp_4-s_3392499178.png" target="_blank"></a>
測試的結果可知,并發量小的時候event-threads參數的影響不大,但是随着并發的增大,event-threads參數設定1,4時,atlas的qps明顯低于event-threads設定成>=8的時候,同時平均響應時間也明顯增長。但是當events-threads設定成與cpu核數相等和cpu的2-6倍時,qps和sql的平均響應時間都差别不大。由此可見,event-threads不能設定成小于cpu的核心數。
版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任
本文轉自 emma_cql 51CTO部落格,原文連結:http://blog.51cto.com/chenql/1836093