[XCopy]tcpcopy0.6版本的使用方法

简介:
无意间看见网易使用TCPCOPY来测试分布式负载性能测试,并且给出ab测试的结果虚高,是TCPCOPY测试结果的5倍。so,简单试用一下,把结果发下来供大家参考。 

1.下载tcpcopy,地址为 http://code.google.com/p/tcpcopy/ 如果在该地址下载则,直接可以编译安装执行,要求操作系统为linux,如果从github中clone过来:地址为:  git clone http://github.com/wangbin579/tcpcopy,则需要先运行
 git clone http://github.com/wangbin579/tcpcopy
 sh autogen.sh
 ./configure
 make
 make install (需要root权限)



2.安装tcpcopy需要root权限,直接clone的,可以从./configure处开始就可以了。 
复制流量的原理: 
① 一个访问到达线上前端机;

② socket包在ip层被拷贝了一份传给tcpcopy进程;

③ tcpcopy修改包的目的及源地址,发给测试前端机;

④ 拷贝的包到达测试前端机;

⑤ 测试前端机的nginx处理访问,并返回结果;

⑥ 返回结果在ip层被截获、丢弃,由intercpetion拷贝返回结果的ip header返回;

⑦ ip header被发送给线上前端机的tcpcopy进程。


3.介绍如何使用 

TCPCOPY分为2个部分client以及server,将client放到需要转移流量的服务器上,server放在测试机器上,例如如下的配置:
client 机器上:
sudo tcpcopy -x 8401-10.18.105.110:36524 -l tcpsend.log
server 机器上:
sudo modprobe ip_queue
sudo iptables -I OUTPUT -p tcp --sport 36524 -j QUEUE
sudo intercept -l tcpreceive.log


代表的意思为: 
转移141:8401端口的访问流量到110机器的36524端口 
而server端需要指定接收那台机器上来的信息,自己开放那个端口 -l 代表日志放在哪里 

4.日志的例子 
我截取了一部分日志(这部分是未成功的日志) 
[notice] Mon Sep 24 17:40:30 2012 usec=780462 intercept version:0.6.0
[notice] Mon Sep 24 17:40:30 2012 usec=784913 create delay-table,size:65536
[notice] Mon Sep 24 17:40:30 2012 usec=794283 create router-table, size:131072
[notice] Mon Sep 24 17:40:30 2012 usec=794347 socket created successfully
[notice] Mon Sep 24 17:40:30 2012 usec=794360 it binds address successfully
[notice] Mon Sep 24 17:40:30 2012 usec=794372 it listens successfully
[notice] Mon Sep 24 17:40:30 2012 usec=794374 msg listen socket:4
[notice] Mon Sep 24 17:40:30 2012 usec=794412 sendto for ip queue is ok
[notice] Mon Sep 24 17:40:30 2012 usec=794415 firewall socket:5
[warn] Mon Sep 24 17:40:30 2012 usec=794425 nl recv error:60
[warn] Mon Sep 24 17:40:30 2012 usec=794427 privilage problems or not the obj of tcpcopy
[error] Mon Sep 24 17:41:39 2012 usec=638820 set signal handler:2
[notice] Mon Sep 24 17:41:39 2012 usec=638892 release_resources begin
[notice] Mon Sep 24 17:41:39 2012 usec=638920 firewall sock is closed
[notice] Mon Sep 24 17:41:39 2012 usec=638940 msg listen sock is closed
[notice] Mon Sep 24 17:41:39 2012 usec=638946 destroy router table
[notice] Mon Sep 24 17:41:39 2012 usec=643316 total visit hash_find_node:0,compared:0
[notice] Mon Sep 24 17:41:39 2012 usec=643346 destroy items 0 in table name:router-table
[notice] Mon Sep 24 17:41:39 2012 usec=643349 destroy delay table,total:0
[notice] Mon Sep 24 17:41:39 2012 usec=644532 destroy items:0,free:0,total:0
[notice] Mon Sep 24 17:41:39 2012 usec=644539 create msg list:0,free:0,destr:0
[notice] Mon Sep 24 17:41:39 2012 usec=646470 total visit hash_find_node:0,compared:0
[notice] Mon Sep 24 17:41:39 2012 usec=646492 destroy items 0 in table name:delay-table
[notice] Mon Sep 24 17:41:39 2012 usec=646495 release_resources end except log file

5.tcpcopy可以加入参数-m 指定最大使用内存 -l 指定log存放位置 -n 指定复制多少倍的流量 


6.现遗留问题,发现截取一段时间后,自己tcpcopy自动挂掉,正在研究中…… 

7.发现问题在不同网段之间的clientserver会出现如下问题:
2012/09/24 18:32:37 +164 [error] Can not connect to remote server(48:36524) (Connection timed out)



此处问题的解决方案:使用代理进行转发一下 

8.模拟请求的脚本
#!/bin/sh
i=0
while true
do
        if [ $i -ne 100000 ]; then
                curl "http://10.18.102.141:8401/login" > /dev/null
                sleep 1
                $i=$i+1
        else
                break
        fi
done


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5月前
|
Java Shell Linux
Linux【脚本 01】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
Linux【脚本 01】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
122 0
|
10月前
|
网络协议 Java 关系型数据库
Linux常用命令大全(极简速查版本)(包含操作nginx、mysql)
Linux常用命令大全(极简速查版本)(包含操作nginx、mysql)
95 0
|
Python
Cypress系列(70)- server() 命令详解
Cypress系列(70)- server() 命令详解
157 0
Cypress系列(70)- server() 命令详解
|
Ubuntu Shell Linux
OpenWRT中运行脚本报错
OpenWRT中运行脚本报错
805 0
|
Java Linux Windows
制作Linux启动jar文件脚本
在windows上的命令行可以使用java -jar的方式来启动jar程序,在Linux上该如何方便启动呢?
386 0
制作Linux启动jar文件脚本
|
Linux PHP
winscp Window自动上传文件到LINUX批处理脚本
转载:http://www.jb51.net/article/59075.htm 1.下载winscp 大家可以去网上自己找,我把winscp安装在c:下的 2.
2658 0
|
Java 关系型数据库 测试技术