本篇文章給大家分享的是有關(guān)怎么在Linux服務(wù)器中使用TCPCopy獲取用戶訪問流量,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都創(chuàng)新互聯(lián)公司是專業(yè)的梨林網(wǎng)站建設(shè)公司,梨林接單;提供網(wǎng)站設(shè)計、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行梨林網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
tcpcopy可以當(dāng)做一種壓力測試工具,也可以獲取真實的用戶訪問流量,從而模擬真實運行環(huán)境,tcpcopy的開發(fā)者這樣介紹它: TCPCopy是一種請求復(fù)制(所有基于tcp的packets)工具,其應(yīng)用領(lǐng)域較廣,利用TCPCopy程序,可以把訪問memcached的系統(tǒng)流量復(fù)制一份到membase系統(tǒng)中去。對于membase來說,這份流量就是訪問membase的,跟直接上線
membase效果一樣,就可以做各種試驗,查看membase的各種特性。
主要有以下功能
1)分布式壓力測試工具,利用在線數(shù)據(jù),可以測試系統(tǒng)能夠承受的壓力大小,也可以提前發(fā)現(xiàn)一些bug
2)普通上線測試,可以發(fā)現(xiàn)新系統(tǒng)是否穩(wěn)定,提前發(fā)現(xiàn)上線過程中會出現(xiàn)的諸多問題,讓開
發(fā)者有信心上線
3)對比試驗,同樣請求,針對不同或不同版本程序,可以做性能對比等試驗
4)流量放大功能,可以利用多種手段構(gòu)造無限在線壓力,滿足中小網(wǎng)站壓力測試要求
5)利用TCPCopy轉(zhuǎn)發(fā)傳統(tǒng)壓力測試工具發(fā)出的請求,可以增加網(wǎng)絡(luò)延遲,使其壓力測試更加真實
6)熱備份
7)實戰(zhàn)演習(xí)(架構(gòu)師必備)
安裝:
代碼如下:
tar -zxvf tcpcopy-0.9.0 .tar.gz
cd tcpcopy-0.9.0
./configure
make
make install
注意:tcpcopy 和 intercept的版本,配置參數(shù)要一致
現(xiàn)在的代碼已經(jīng)放在github(https://github.com/session-replay-tools/tcpcopy)上了,1.0 以上的版本,tcpcopy 和 intercept 包已經(jīng)分開了,需要單獨下載安裝,注意,如果在安裝intercept的時候 ./configure報錯checking for pcap.h … not found,可以 通過yum install libpcap-devel解決。
TCPCopy分為TCPCopy client和TCPCopy server。其中TCPCopy client運行在在線服務(wù)器上面,用來捕獲在線請求數(shù)據(jù)包;TCPCopy server(監(jiān)聽端口為36524)運行在測試機器上面,在測試服務(wù)器的響應(yīng)包丟棄之前截獲測試服務(wù)器
的響應(yīng)包,并通過TCPCopy client和TCPCopy server之間的tcp連接傳遞響應(yīng)包的tcp和ip頭部信息給TCPCopy client,以完成TCP交互。
使用方法如下:
TCPCopy server (root用戶執(zhí)行)
1)啟動內(nèi)核模塊ip_queue (modprobe ip_queue)
2)設(shè)置要截獲的端口,并且設(shè)置對output截獲
代碼如下:
iptables -I OUTPUT -p tcp --sport port -j QUEUE
3)interception
TCPCopy client (root用戶執(zhí)行)
tcpcopy 本地ip地址1[:本地ip地址2:…] 本地port 遠程ip地址 遠程port
試用:
模擬抓取apache的訪問流量。試用之前清空apache的訪問日志。線上機器:10.1.6.205,線下機器:10.1.6.206。
操作Client-VM2
代碼如下:
modprobe ip_queue
iptables -I OUTPUT -p tcp --sport 80 -j QUEUE
interception
操作Client-VM1
代碼如下:
tcpcopy 10.1.6.205 80 10.1.6.206 80
作者交待了一些注意事項:
1)Linux平臺,內(nèi)核2.6+,需要支持netlink機制
2)TCPCopy中的tcpcopy和interception程序運行需要root權(quán)限
3)interception在同一臺機器只需要要運行一個實例,多個實例還不支持
4)TCPCopy client需要連接測試服務(wù)器的36524端口,所以要對外開放36524端口
5)TCPCopy由于依賴于抓包函數(shù),壓力大的時候,抓包函數(shù)本身不可靠,所以會丟包,
進而丟失請求
6)由于interception程序密切跟ip queue內(nèi)核模塊相關(guān),所以當(dāng)壓力很大的時候請求
丟失率很高,需要優(yōu)化sysctl系統(tǒng)參數(shù)才能達到好的效果(通過cat /proc/net/ip_queue,
查看ip queue運行情況,如果Queue dropped的數(shù)值不斷增大,則需要修改ip_queue_maxlen參數(shù),
比如echo 4096 > /proc/sys/net/ipv4/ip_queue_maxlen;
如果Netlink droppedde的數(shù)值不斷增大,修改net.core.rmem_max和net.core.wmem_max參數(shù),
比如sysctl -w net.core.rmem_max=16777216和sysctl -w net.core.wmem_max=16777216)
7)復(fù)制同一臺機器進程之間的請求,也即Local Requests,請設(shè)置lo MTU不超過1500,
并且在配置文件中不要設(shè)置127.0.0.1地址,要設(shè)置內(nèi)網(wǎng)或者外網(wǎng)地址
8)TCP segmentation offloading相關(guān)問題(要注意網(wǎng)卡tso和gro要關(guān)閉)
如果tcpcopy所抓的數(shù)據(jù)包大小超過MTU,那么由于raw socket output的原因,需要你
改變在線設(shè)置,比如:ethtool -K eth2 tso off ; ethtool -K eth2 gro off
9)TCPCopy server,也即interception程序有可能會成為性能瓶頸,特別是對大數(shù)據(jù)響應(yīng)這種情況
10)測試環(huán)境最好和在線環(huán)境一致,比如連接都保持keepalive
11)TCPCopy只與ip、tcp層的數(shù)據(jù)有關(guān),如果請求驗證與tcp層以上的協(xié)議有關(guān),則系統(tǒng)不能正常運行。
例如:MySQL連接協(xié)議,由于權(quán)限認證與tcp層上面的mysql協(xié)議有關(guān),所以復(fù)制過去的請求會被目
標(biāo)測試服務(wù)器認為非法請求,這個時候需要針對mysql協(xié)議作具體針對性的處理,tcpcopy程序才能正常運行
12)多層架構(gòu)環(huán)境下,測試系統(tǒng)一定要獨立,與在線系統(tǒng)沒有業(yè)務(wù)關(guān)聯(lián),否則會影響在線
13)丟失請求率跟網(wǎng)絡(luò)狀況有關(guān),最好在內(nèi)網(wǎng)內(nèi)復(fù)制請求
14)本系統(tǒng)不支持域名,只支持ip地址
15)針對長請求(比如上傳文件),本系統(tǒng)不是很支持,預(yù)計0.5版本會支持
16)客戶端ip地址為內(nèi)網(wǎng)ip地址,一般情況下其應(yīng)用請求是無法復(fù)制到外網(wǎng)測試機器上面去的。
17)為了避免不必要的麻煩,關(guān)閉的時候先關(guān)閉tcpcopy,然后再關(guān)閉interception
以上就是怎么在Linux服務(wù)器中使用TCPCopy獲取用戶訪問流量,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。