简介tcpcopy是一种请求复制(所有基于tcp的packets)工具,其应用领域较广,我们曾经应用于
网易的广告投放系统,urs系统,nginx hmux协议等系统,避免了上线带来的很多问题。我们即将应用tcpcopy于membase替换现有mecached系统的任务中。由于membase还不够
成熟,不适合直接上线,利用tcpcopy程序,可以把访问memcached的系统流量复制一份到
membase系统中去。对于membase来说,这份流量就是访问membase的,跟直接上线
membase效果一样,就可以做各种试验,查看membase的各种特性。tcpcopy四大功能:1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测
试工具真实地多),也可以提前发现一些bug
2)对于后端的短连接,请求丢失率非常低(1/10万),可以应用于热备份
3)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开
发者有信心上线
4)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验特点:1)实时
2)效果真实
3)低负载,不影响在线
4)操作简单
5)分布式
6)意义非凡使用方法:TCPCOPY server (root用户执行)
1)启动内核模块ip_queue (modprobe ip_queue)
2)设置要截获的端口,并且设置对output截获
     iptables -I OUTPUT -p tcp --sport port -j QUEUE 
3)./interception 
注意(如果已经启动ip_queue和已经设置iptables,只需要运行第3项;测试完以后要记得iptables -F)TCPCOPY client   (root用户执行)
./tcpcopy 本地ip地址1[:本地ip地址2:…]  本地port  远程ip地址 远程port测试举例:假设13,14是在线应用服务器,148是测试服务器(148配置和13差不多),
本地端口和远程端口都是12321。我们的目的就是为了确认目前在线服务器
能否承受目前两倍的压力。我们利用tcpcopy进行测试:
    目标测试服务器(148)
       # modprobe ip_queue (if not run up)
       # iptables -I OUTPUT -p tcp --sport 12321 -j QUEUE (if not set)
       # ./interception
    在线服务器(13):
       # ./tcpcopy xx.xx.xx.13 12321 xx.xx.xx.148 12321
    在线服务器(14):
       # ./tcpcopy xx.xx.xx.14 12321 xx.xx.xx.148 1232113 cpu:
11124 adrun 15 0 193m 146m 744 S 18.6 7.3 495:31.56 asyn_server
11281 root 15 0 65144 40m 1076 S 12.3 2.0 0:47.89 tcpcopy14 cpu:
16855 adrun 15 0 98.7m 55m 744 S 21.6 2.7 487:49.51 asyn_server
16429 root 15 0 41156 17m 1076 S 14.0 0.9 0:33.63 tcpcopy148 cpu :
25609 root 15 0 76892 59m 764 S 49.6 2.9 63:03.14 asyn_server
20184 root 15 0 5624 4232 292 S 17.0 0.2 0:52.82 interception13记录: grep 'Tue 11:08' access_0913_11.log |wc -l :89316,每秒处理1489次请求14记录: grep 'Tue 11:08' access_0913_11.log |wc -l :89309,每秒处理1488次请求148记录: grep 'Tue 11:08' access_0913_11.log |wc -l :178175,每秒处理2969次请求请求丢失率为:(89316+89309-178175)/(89316+89309)=0.25%从上面可以看出一台在线服务器能够承受目前压力的两倍。
我们来看负载情况:
TCPCOPY client自身负载占到12.3%和14%,TCPCOPY server占到17%,从负载来看,均不高。
内存也占得不多。注意事项:1)Linux平台,内核2.6+
2)TCPCOPY类似于UDP,所以会丢包,进而丢失请求
3)本系统不支持域名,只支持ip地址
4)Local Requests,请设置lo MTU不超过1500,并且在配置文件中不要设置127.0.0.1地址,
     要设置内网或者外网地址
5)TCPCOPY server有可能会成为性能瓶颈
6)丢失请求率跟网络状况有关,最好在内网内复制请求
7)TCPCOPY中的tcpcopy和interception程序运行需要root权限
8)如果有问题,请注意error.log文件提示的错误信息