天天看點

mysql讀寫分離中間件atlas的性能測試

公司最近要對上讀寫分離的中間件,打算對現下比較流行的中間件逐一進行性能測試。首先測試的是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設定成&gt;=8的時候,同時平均響應時間也明顯增長。但是當events-threads設定成與cpu核數相等和cpu的2-6倍時,qps和sql的平均響應時間都差别不大。由此可見,event-threads不能設定成小于cpu的核心數。

版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任

本文轉自 emma_cql 51CTO部落格,原文連結:http://blog.51cto.com/chenql/1836093