基于流量回放的性能測(cè)試

  • TCPCopy使用簡介

一域那、 TCPCopy使用簡介

1 概述

tcpcopy是一種請(qǐng)求復(fù)制(所有基于tcp的packets)工具,可以把在線流量導(dǎo)入到測(cè)試系統(tǒng)中去(也可以在測(cè)試系統(tǒng)內(nèi)部放大流量),從而模擬真實(shí)運(yùn)行環(huán)境魁巩,以便排查測(cè)試系統(tǒng)的性能問題和風(fēng)險(xiǎn)卷仑。TCPCopy的優(yōu)勢(shì)在于其實(shí)時(shí)性及真實(shí)性于游,除了少量的丟包,可以完全拷貝線上流量到測(cè)試機(jī)器忧勿,真實(shí)的模擬線上流量的變化規(guī)律杉女。
在tcpcopy 1.0版本中對(duì)整個(gè)架構(gòu)進(jìn)行了改進(jìn),將原本低版本tcpcopy需要運(yùn)行在測(cè)試機(jī)上的intercept移除放到一個(gè)獨(dú)立的輔助機(jī)上來鸳吸,使得測(cè)試機(jī)需要做的操作少到僅僅是添加一條路由而已熏挎,對(duì)整個(gè)測(cè)試機(jī)的性能損耗可以忽略,排除了intercept運(yùn)行在測(cè)試機(jī)上時(shí)產(chǎn)生的性能影響层释,使得測(cè)試數(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
測(cè)試服務(wù)器:172.16.1.25
若我們現(xiàn)在想將線上服務(wù)器172.16.1.23 80端口的流量導(dǎo)入到測(cè)試服務(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ù)制到測(cè)試機(jī)ip 172.16.1.25的80端口廉白,并設(shè)置輔助機(jī)的ip地址為172.16.1.24,且將復(fù)制過去的流量中的源地址統(tǒng)一更改為172.16.100.x乖寒,這樣做的好處是我們?cè)跍y(cè)試機(jī)上可以直接針對(duì)整個(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ù)切端,也即是測(cè)試機(jī)的回應(yīng)數(shù)據(jù)。其作用是將測(cè)試機(jī)路由過來的響應(yīng)數(shù)據(jù)捕獲下來吵取,完成整個(gè)請(qǐng)求回應(yīng)的流程且保證測(cè)試機(jī)產(chǎn)生的回應(yīng)數(shù)據(jù)不會(huì)流向線上環(huán)境逐虚。
intercept 會(huì)監(jiān)聽 tcp 36524 端口聋溜,并和線上機(jī)172.16.1.23的 tcpcopy 之間建立通信,我們通過ss命令可以觀察到叭爱。
需要注意的是輔助機(jī)和測(cè)試機(jī)一定要是同一網(wǎng)段

3.3 測(cè)試服務(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)段的地址撮躁,那么在測(cè)試機(jī)上看到的流量中源地址全部是來源于這個(gè)網(wǎng)段,
我們僅僅需要將返回給這個(gè)網(wǎng)段的所有客戶端的請(qǐng)求全部通過輔助機(jī) 172.16.1.24 路由出去买雾,這樣在輔助機(jī)上就可以對(duì)全部的回應(yīng)包進(jìn)行截獲處理了把曼。

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

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

參數(shù)說明:
-i eth0:eth0為網(wǎng)卡,獲取方式可在liunx系統(tǒng)下執(zhí)行ifconfig查看所有的網(wǎng)卡权纤,選取需要的那個(gè)钓简。
-w online.pcap:保存所錄制請(qǐng)求的pcap文件,以便后續(xù)進(jìn)行回放汹想⊥獾耍可設(shè)置路徑,e.g.-w /home/user/test.pcaptcp and port 80:截獲端口為80的tcp請(qǐng)求古掏,也可添加udp請(qǐng)求损话,和更改服務(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ī)器:
測(cè)試機(jī)(被測(cè)應(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ù)制到測(cè)試機(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

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

> route add -net 172.16.1.0 netmask 255.255.255.0 gw 172.16.1.24

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

4.4簡化配置及操作方法

以上操作使用的是傳統(tǒng)的部署模式永高,需要占用3臺(tái)機(jī)器隧土。若測(cè)試機(jī)不足時(shí),也可以簡化部署命爬,將intercept直接部署在測(cè)試機(jī)上(可以省去配置route的操作)曹傀,如:
測(cè)試機(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ù)將訪問測(cè)試機(jī)的客戶端ip地址改寫為不存在或無法訪問的地址,總之不能讓響應(yīng)包回到真正的客戶端饲宛,否則會(huì)干擾測(cè)試的進(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中加上對(duì)這個(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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末督怜,一起剝皮案震驚了整個(gè)濱河市殴瘦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌号杠,老刑警劉巖蚪腋,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姨蟋,居然都是意外死亡屉凯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門芬探,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神得,“玉大人,你說我怎么就攤上這事偷仿×ú荆” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵酝静,是天一觀的道長节榜。 經(jīng)常有香客問我,道長别智,這世上最難降的妖魔是什么宗苍? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮薄榛,結(jié)果婚禮上讳窟,老公的妹妹穿的比我還像新娘。我一直安慰自己敞恋,他們只是感情好丽啡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硬猫,像睡著了一般补箍。 火紅的嫁衣襯著肌膚如雪改执。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天坑雅,我揣著相機(jī)與錄音辈挂,去河邊找鬼。 笑死裹粤,一個(gè)胖子當(dāng)著我的面吹牛终蒂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遥诉,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼后豫,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了突那?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤构眯,失蹤者是張志新(化名)和其女友劉穎愕难,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惫霸,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猫缭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壹店。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猜丹。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖硅卢,靈堂內(nèi)的尸體忽然破棺而出射窒,到底是詐尸還是另有隱情,我是刑警寧澤将塑,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布脉顿,位于F島的核電站,受9級(jí)特大地震影響点寥,放射性物質(zhì)發(fā)生泄漏艾疟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一敢辩、第九天 我趴在偏房一處隱蔽的房頂上張望蔽莱。 院中可真熱鬧,春花似錦戚长、人聲如沸盗冷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽正塌。三九已至嘀略,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乓诽,已是汗流浹背帜羊。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸠天,地道東北人讼育。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像稠集,于是被迫代替她去往敵國和親奶段。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

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