tcpcopy+mysql壓力測試

1、tcpcopy工具介紹

tcpcopy 是一個分佈式在線壓力測試工具,能夠將線上流量拷貝到測試機器,實時的模擬線上環境,達到在程序不上線的狀況下實時承擔線上流量的效果,儘早發現 bug,增長上線信心。html

tcpcopy 的優點在於其實時性及真實性,除了少許的丟包,徹底拷貝線上流量到測試機器,真實的模擬線上流量的變化規律。mysql

 

2、tcpcopy原理

 

tcpcopy新版架構圖git

tcpcopy包含三部分:online server、assistant server、target servergithub

tcpcopy拷貝一次流量訪問的步驟以下sql

一、一個訪問請求到達線上內核後端機;
二、socket 包在 IP 層被拷貝了一份傳給tcpcopy 進程;
三、tcpcopy 修改包的目的及源地址,發給測試內核後端機;
四、拷貝的包到達測試內核後端機;
五、測試內核後端機的推薦內核處理訪問,並返回結果;
六、返回結果在 IP 層被截獲、丟棄,由 intercept 拷貝返回結果的 IP header 返回;
七、IP header 被髮送給線上內核後端機的 tcpcopy 進程。

 

3、tcpcopy搭建

3.1  服務器規劃

角色 主機名 mysql端口
online server test00 3308(5.6)
assistant server offline01  
target server offline02 3318(5.7)

3.2  tcpcopy安裝及配置

安裝依賴後端

# yum -y install libpcap-devel

intercept安裝安全

# git clone git://github.com/session-replay-tools/intercept.git
# cd intercept
# ./configure
# make && make install

tcpcopy安裝服務器

# git clone git://github.com/session-replay-tools/tcpcopy.git
# cd tcpcopy
# ./configure
# make && make install

 

4、開啓tcpcopy流量複製

4.1  target server上操做:

# route add -net 10.0.0.8 netmask 255.255.252.0 gw 10.0.0.0

 

成功後能夠看到微信

# ss -an |head
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      0                 127.0.0.1:199                      *:*    
LISTEN     512    0                         *:80                       *:*    
ESTAB   0      0              192.168.0.230:80           10.10.10.1:62602
ESTAB   0      0              192.168.0.230:80           10.10.10.4:54595
ESTAB   0      0              192.168.0.230:80           10.10.10.3:53566
ESTAB   0      0              192.168.0.230:80           10.10.10.6:49260
ESTAB   0      0              192.168.0.230:80           10.10.10.8:57598
ESTAB   0      0              192.168.0.230:80           10.10.10.7:64454

4.2  assistant server上操做(root privilege):

# cd /usr/local/intercept/sbin/
# ./intercept -i bond1 -F 'tcp and src port 3318' -d

成功後能夠看到session

# ss -an |grep 36524
LISTEN     0      5                         *:36524                    *:*     
ESTAB      0      66             192.168.0.219:36524           192.168.0.8:49034 
ESTAB      0      0              192.168.0.219:36524           192.168.0.8:49035 
ESTAB      0      66             192.168.0.219:36524           192.168.0.8:49032 
ESTAB      0      0              192.168.0.219:36524           192.168.0.8:49033

4.3  online source server 上操做(root privilege):

# cd /usr/local/tcpcopy/sbin/
# ./tcpcopy -x 3308-10.0.0.1:3318 -s 10.0.0.2 -c 10.0.0.8 -d

成功後能夠看到

#ss -an|grep 192.168.0.219
ESTAB      0      0                192.168.0.8:49034         192.168.0.219:36524 
ESTAB      0      0                192.168.0.8:49035         192.168.0.219:36524 
ESTAB      0      0                192.168.0.8:49032         192.168.0.219:36524 
ESTAB      0      0                192.168.0.8:49033         192.168.0.219:36524

 

5、tcpcopy遇到的坑

一、tcpcopy log日誌提示many connections cant established

把tcpcopy指定的-c 假裝客戶端ip換成和線上一致的,能夠ping通的網段就能夠

二、大多數雲環境設置了安全限制,一個網卡沒法綁定2個IP,因此online server則會拒絕發送複製包,在線上抓包就會顯示

# tcpdump -i eth0 -nn port 3306 and host 1.1.1.4

11:53:58.573735 IP 10.0.0.1.https > 10.0.0.2.37121: Flags [R.], seq 0, ack 2906947315, win 0, length 0
11:53:58.573774 IP 10.0.0.2.37121 > 10.0.0.1.http: Flags [.], ack 2906947314, win 1024, length 0
11:53:58.573812 IP 10.0.0.1.http > 10.0.0.2.37121: Flags [R], seq 2906947314, win 0, length 0

 

參考:

https://mfcheer.github.io/20170228-index.html

http://ju.outofmemory.cn/entry/106907

http://www.itts-union.com/2814.html

http://www.361way.com/tcpcopy-online-offline/3510.html

https://github.com/session-replay-tools/tcpcopy

爲了方便你們交流,本人開通了微信公衆號和QQ羣,QQ羣:291519319,喜歡技術的一塊兒來交流吧

相關文章
相關標籤/搜索