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博客便可。

相关文章
相关标签/搜索