tcpcopy壓測配置筆記

做者博客:http://blog.csdn.net/wangbin579/article/details/8950282php

配置參考:node

http://quentinxxz.iteye.com/blog/2249799nginx

http://blog.csdn.net/zhang_yanan/article/details/25708349git

 

軟件安裝

下面演示的tcpcopyintercepter都是1.0.0版本,直接從github下載便可。github

https://github.com/session-replay-tools/tcpcopy服務器

 

tcpcopy運行須要intercept的支持,tcpcopy負責抓包和發包工做,而intercept負責截獲應答包網絡


wKioL1hFjE7DSsj5AAB78X6DTnY315.png


node1  192.168.2.11      online server    安裝tcpcopylibpcap-develsession

node2  192.168.2.12      target server 添加路由socket

node3  192.168.2.130    assistant server 安裝intercepterlibpcap-develtcp

另外找一個當前網段沒有主機在用的IP,例如192.168.2.110

 

實驗中的node1node2上都跑了nginx,監聽在80端口。node1爲線上服務器,node2爲測試服務器。

 

node2上:

route add -host 192.168.2.110 gw 192.168.2.130

 

# 說明:

# 192.168.2.110 是經複製後測試數據包上填入的源地址。

# 192.168.2.130 assistant server,上面將會運行intercept服務。

# 這條命令做用是 target server對於複製而來的請求(根據源地址判斷)的響應,不會返回給請求客戶端,而是發往assistant server, assistant server最終丟棄這個數據包(由於assisant server上並無相關的路由)。

 

 

node3上:

echo 0 > /proc/sys/net/ipv4/ip_forward    # 關閉內核轉發功能

 

tar xf intercept-1.0.0.tar.gz

cd intercept-1.0.0

./configure

make -j 4 && make install

cd /usr/local/intercept/sbin

 

./intercept -i eth0 -F 'tcp and src port 80' -d

 

# 其中80target server的端口號。intercept捕獲基於TCP應用的響應

# 關閉內核轉發,這樣的話,target server的那個route過來的數據包就過來了會匹配不到路由,直接被丟棄了。

 

ps aux|grep intercept     能夠看到進程啓動了

 

 

node1上:

tar xf tcpcopy-1.0.0.tar.gz && cd tcpcopy-1.0.0

./configure

tcpcopy的安裝,有以下2種方式:

./configure (默認raw socket方式抓包)

或者./configure --pcap-capture  pcap方式抓包,在某些場景下,丟包率會高於raw socket方式抓包,這時候須要相似pf_ring的支持)

 

make -j 4 && make install

cd /usr/local/tcpcopy/sbin

 

./tcpcopy -x 80-192.168.2.12:80 -s 192.168.2.130  -c 192.168.2.110 -n 10

# 格式:tcpcopy -x localServerPort-targetServerIP:targetServerPort -s <intercept server,> [-c <ip range,>]

# 這樣把本機80端口的10倍的數據流量就發到了192.168.2.1280端口去,而且把發過去的數據包假裝成源地址是192.168.2.110這個虛假的IP。而且鏈接192.168.2.130,告訴intercept將響應數據包發給online server本機

# 若是有多臺online server,只要在每臺online server上都執行上面的這個tcpcopy命令便可。

 

其中80target server的端口號。

-x 80-192.168.2.12:80 是將從80端口的請求發往 target server

-s 192.168.2.130 爲指定assistant server

-c 192.168.2.110 是指將全部複製請求的數據包的源地址全改成 192.168.2.110

-n參數指定複流量的倍數。

 

驗證效果:

另找一臺主機node4,執行ab -c 100 -n 100000 http://192.168.2.11/index.php

 

而後觀察node1node2上面的鏈接數ss -tan,及系統負載uptime、網絡流量dstat

ss -tan|awk 'NR>1 {++s[$1]} END {for (k in s) print k,s[k]}'

 

另外,能夠在node1或者node2上抓包:

tcpdump -i eth0 -nn port 80 and host 192.168.2.110

 

node3上抓包:

tcpdump -i eth0 -nn host 192.168.2.130

這些方式均可以很直觀的看到數據包的流向。

 

 

中止流量複製

assistant server kill intercept進程,在online server kill tcpcopy進程,在target server上刪除相應的route

 

其餘注意點:參照做者的CSDN博客便可。

相關文章
相關標籤/搜索