基于流量回放的性能測試

  • TCPCopy使用簡介

一、 TCPCopy使用簡介

1 概述

tcpcopy是一種請求復(fù)制(所有基于tcp的packets)工具,可以把在線流量導(dǎo)入到測試系統(tǒng)中去(也可以在測試系統(tǒng)內(nèi)部放大流量),從而模擬真實(shí)運(yùn)行環(huán)境,以便排查測試系統(tǒng)的性能問題和風(fēng)險(xiǎn)。TCPCopy的優(yōu)勢在于其實(shí)時(shí)性及真實(shí)性,除了少量的丟包,可以完全拷貝線上流量到測試機(jī)器,真實(shí)的模擬線上流量的變化規(guī)律。
在tcpcopy 1.0版本中對整個(gè)架構(gòu)進(jìn)行了改進(jìn),將原本低版本tcpcopy需要運(yùn)行在測試機(jī)上的intercept移除放到一個(gè)獨(dú)立的輔助機(jī)上來,使得測試機(jī)需要做的操作少到僅僅是添加一條路由而已,對整個(gè)測試機(jī)的性能損耗可以忽略,排除了intercept運(yùn)行在測試機(jī)上時(shí)產(chǎn)生的性能影響,使得測試數(shù)據(jù)更加接近真實(shí)水平。


TCPCopy框架圖

2 下載工具

下載tcpcopy及intercept:
https://github.com/wangbin579/tcpcopy
https://github.com/session-replay-tools/intercept

3 在線流量復(fù)制配置方法

說明:
假定我們現(xiàn)在有3臺(tái)機(jī)器:
線上服務(wù)器:172.16.1.23
輔助服務(wù)器:172.16.1.24
測試服務(wù)器:172.16.1.25
若我們現(xiàn)在想將線上服務(wù)器172.16.1.23 80端口的流量導(dǎo)入到測試服務(wù)器172.16.1.25,我們需要按照下述流程進(jìn)行操作。

3.1 線上服務(wù)器(流量源)部署tcpcopy

解壓并安裝:

#tar xf tcpcopy-1.0.0.tar.gz
#cd tcpcopy
#./configure
#make && make install

執(zhí)行下述命令若能顯示版本號(hào)則表示安裝成功:

#/usr/local/tcpcopy/sbin/tcpcopy -v
tcpcopy version:1.0.0

啟動(dòng)腳本范例:

#/usr/local/tcpcopy/sbin/tcpcopy -x 80-172.16.1.25:80 -s 172.16.1.24 -c 172.16.100.x -d -C 4 -l /var/log/tcpcopy.log

說明:
將80端口收到的流量復(fù)制到測試機(jī)ip 172.16.1.25的80端口,并設(shè)置輔助機(jī)的ip地址為172.16.1.24,且將復(fù)制過去的流量中的源地址統(tǒng)一更改為172.16.100.x,這樣做的好處是我們在測試機(jī)上可以直接針對整個(gè)更改后的網(wǎng)段設(shè)置一條路由即可。

3.2 輔助服務(wù)器(截獲返回?cái)?shù)據(jù))部署intercept

解壓并安裝:

> tar xf intercept-1.0.0.tar.gz
> cd intercept
>./configure
> make && make install

執(zhí)行下述命令若能顯示版本號(hào)則表示安裝成功:

> /usr/local/intercept/sbin/intercept -v
> intercept version:1.0.0

啟動(dòng)腳本范例:

> /usr/local/intercept/sbin/intercept -i em2 -l /var/log/intercept.log -F 'tcp and src port 80' -d

說明:
輔助機(jī)的 intercept 通過-F 參數(shù)制定捕獲規(guī)則,捕獲tcp連接中源端口為80的所有數(shù)據(jù),也即是測試機(jī)的回應(yīng)數(shù)據(jù)。其作用是將測試機(jī)路由過來的響應(yīng)數(shù)據(jù)捕獲下來,完成整個(gè)請求回應(yīng)的流程且保證測試機(jī)產(chǎn)生的回應(yīng)數(shù)據(jù)不會(huì)流向線上環(huán)境。
intercept 會(huì)監(jiān)聽 tcp 36524 端口,并和線上機(jī)172.16.1.23的 tcpcopy 之間建立通信,我們通過ss命令可以觀察到。
需要注意的是輔助機(jī)和測試機(jī)一定要是同一網(wǎng)段

3.3 測試服務(wù)器(需要導(dǎo)流的目標(biāo)機(jī)器)配置路由

添加路由配置范例:

> route add -net 172.16.100.0 netmask 255.255.255.0 gw 172.16.1.24

說明:
線上機(jī)tcpcopy復(fù)制流量時(shí)將源地址改寫為172.16.100網(wǎng)段的地址,那么在測試機(jī)上看到的流量中源地址全部是來源于這個(gè)網(wǎng)段,
我們僅僅需要將返回給這個(gè)網(wǎng)段的所有客戶端的請求全部通過輔助機(jī) 172.16.1.24 路由出去,這樣在輔助機(jī)上就可以對全部的回應(yīng)包進(jìn)行截獲處理了。

4 離線回放部署及配置方法

說明
整體操作流程也是與在線流量copy一樣的,唯一的區(qū)別是不再是復(fù)制在線的即時(shí)流量,而是事先將在線流量錄制為pcap離線文件然后進(jìn)行回放。
注:因?yàn)榫€上不同時(shí)間段的用戶量不一樣,用戶行為也是隨時(shí)變化的,多次復(fù)制的線上流量肯定是會(huì)有所差異的,這樣對服務(wù)器產(chǎn)生的壓力也不一樣。所以在做對比性的測試時(shí)推薦使用離線回放的方式,以確保每次測試時(shí)的請求及對服務(wù)器產(chǎn)生的壓力是一致的。

4.1 安裝并配置支持離線模式的tcpcopy

網(wǎng)上介紹0.98版本以上的tcpcopy才支持離線回放模式,保險(xiǎn)起見推薦下載1.0.0最新版的tcpcopytcpcopy。
需要在configure時(shí)加上--offline參數(shù)才能支持離線回放(可執(zhí)行configure --help查看幫助信息)
依次執(zhí)行:

> ./configure --offline
> make&make install
4.2 使用tcpdump錄制pcap離線文件
> tcpdump -i eth0 -w online.pcap tcp and port 54322    #錄制54322端口的tcp請求,保存到online.pcap文件

參數(shù)說明:
-i eth0:eth0為網(wǎng)卡,獲取方式可在liunx系統(tǒng)下執(zhí)行ifconfig查看所有的網(wǎng)卡,選取需要的那個(gè)。
-w online.pcap:保存所錄制請求的pcap文件,以便后續(xù)進(jìn)行回放。可設(shè)置路徑,e.g.-w /home/user/test.pcaptcp and port 80:截獲端口為80的tcp請求,也可添加udp請求,和更改服務(wù)端口80,e.g. tcp and port 16001
-s 0:默認(rèn)的話,tcpdump只顯示部分?jǐn)?shù)據(jù)包,-s snaplen是控制包長度的,默認(rèn)是68字節(jié),-s 0 則為全部字節(jié),在使用過程中,如果添加-s則回放時(shí)會(huì)出現(xiàn)錯(cuò)誤。可不使用該參數(shù)

4.3tcpcopy、intercept、路由配置

假設(shè)有3臺(tái)機(jī)器:
測試機(jī)(被測應(yīng)用所部署的服務(wù)器):10.1.2.196 172.16.1.25
輔助機(jī)(三次握手回包):10.1.2.203 172.16.1.24
流量回放機(jī)(回放pcap離線文件):10.1.2.195 172.16.1.23
輔助機(jī)執(zhí)行intercept(捕獲tcp連接中源端口為54322的所有數(shù)據(jù))

> /usr/local/intercept/sbin/intercept -i em2 -l /var/log/intercept.log -F 'tcp and src port 54322' -d

流量回放機(jī)執(zhí)行tcpcopy(將流量復(fù)制到測試機(jī)的54322端口,指定事先錄制好的online.pcap文件):

> /usr/local/tcpcopy/sbin/tcpcopy -l /var/log/tcpcopy.log -x 54322-172.16.1.25:54322 -s 172.16.1.24 -c 172.16.1.x -i ./online.pcap

測試機(jī)配置路由(將返回給172.16.1網(wǎng)段的所有客戶端的請求通過輔助機(jī)路由出去,以便輔助機(jī)對回包截獲處理):

> route add -net 172.16.1.0 netmask 255.255.255.0 gw 172.16.1.24

回放流量時(shí)可以通過 tcpdump -n port 54322的方式抓包測試,亦可觀察測試服務(wù)的日志確認(rèn)是否有請求進(jìn)來,至此流量回放完成。

4.4簡化配置及操作方法

以上操作使用的是傳統(tǒng)的部署模式,需要占用3臺(tái)機(jī)器。若測試機(jī)不足時(shí),也可以簡化部署,將intercept直接部署在測試機(jī)上(可以省去配置route的操作),如:
測試機(jī)執(zhí)行intercept

> /usr/local/intercept/sbin/intercept -i eth1 -l /var/log/intercept.log -F 'tcp and src port 54322' -d

流量回放機(jī)執(zhí)行tcpcopy(需要通過-c參數(shù)將訪問測試機(jī)的客戶端ip地址改寫為不存在或無法訪問的地址,總之不能讓響應(yīng)包回到真正的客戶端,否則會(huì)干擾測試的進(jìn)行):

> /usr/local/tcpcopy/sbin/tcpcopy -l /var/log/tcpcopy.log -x 54322-172.16.1.25:54322 -s 172.16.1.25 -c 172.16.88.88 -i ./online.pcap

補(bǔ)充說明
開啟tcpcopy或intercept后最好ps一下相關(guān)進(jìn)程,以便確認(rèn)啟動(dòng)成功。若未啟動(dòng)成功可以查看/var/log/tcpcopy.log(通過啟動(dòng)參數(shù)l自行指定)中的報(bào)錯(cuò)詳情。
若要關(guān)閉服務(wù),則直接kill掉tcpcopy或intercept中的一個(gè)進(jìn)程即可,kill掉其中一個(gè)進(jìn)程另一個(gè)進(jìn)程會(huì)自動(dòng)終止。
常見錯(cuò)誤解決
1.執(zhí)行./configure時(shí)報(bào)錯(cuò):checking for pcap.h … not found
解決辦法:yum install libpcap libpcap-devel(需要用到pcap庫頭文件)
2.運(yùn)行TCPCopy命令時(shí)日志報(bào)錯(cuò):[error] Can not connect to remote server(10.16.6.62:36524) (Connection refused)
解決辦法:首先看看intercept是否已啟動(dòng)。如果已啟動(dòng)成功,看看是否輔助服務(wù)器的36524端口不能訪問到,沒有開通這個(gè)端口的權(quán)限。在iptable中加上對這個(gè)端口的訪問(在運(yùn)行TCPCOPY程序時(shí),會(huì)去連輔助機(jī)的這個(gè)端口,這個(gè)端口是由intercept程序監(jiān)聽)
參考資料
https://github.com/wangbin579/tcpcopy
https://mfcheer.github.io/2017/02/28/tcpcopy工具分享/
http://ju.outofmemory.cn/entry/106907

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1概述 tcpcopy是一種請求復(fù)制(所有基于tcp的packets)工具,可以把在線流量導(dǎo)入到測試系統(tǒng)中去...
    shine_在路上閱讀 22,479評論 2 11
  • 一、工具介紹 Tcpcopy是一個(gè)分布式在線壓力測試工具,可以將線上流量拷貝到測試機(jī)器,實(shí)時(shí)的模擬線上環(huán)境,達(dá)到在...
    燁楓_邱閱讀 1,105評論 0 1
  • 點(diǎn)擊鏈接加入QQ群 522720170(免費(fèi)公開課、視頻應(yīng)有盡有):https://jq.qq.com/?_wv=...
    測試幫日記閱讀 1,284評論 0 0
  • 此刻的我側(cè)身仰在床上,看著窗外那么好的陽光,心里都癢癢,好想出門玩耍呀~ 劉花生已經(jīng)29周2天了,我的小心心既高興...
    白大花閱讀 274評論 1 0
  • 拉了十天的keep,今天開始補(bǔ)上課程,加油,像110奮斗~~~
    阿茹wang閱讀 268評論 0 0

友情鏈接更多精彩內(nèi)容