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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
无意间看见网易使用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日志并进行多维度分析。
目录
相关文章
|
分布式计算 Hadoop Java
Hadoop配置手册1:hadoop环境搭建与测试
Hadoop配置手册1:hadoop环境搭建与测试
372 0
|
Linux
Linux常用命令(3)——目录和文件都能操作的命令
Linux常用命令(3)——目录和文件都能操作的命令
|
安全 编译器 Linux
别忘了给gcc编译器工具链加上-fno-common选项
别忘了给gcc编译器工具链加上-fno-common选项
Linux常用命令语法(三)压缩解压命令,附命令行操作常用快捷键
Linux常用命令语法(三)压缩解压命令,附命令行操作常用快捷键
Linux常用命令语法(三)压缩解压命令,附命令行操作常用快捷键
|
运维 网络协议 安全
linux使用技巧:使用脚本处理文件
liunx三剑客grep、sed、awk的基本用法和实用技巧,如何在linux运维中使用这三个工具提高效率
461 0
|
网络协议 关系型数据库 MySQL
整理常用Linux命令以及软件安装方式(附mysql安装执行脚本)
进入平台的第一篇文章,试试水,于是决定将常用的Linux命令进行相应的整理,并分享给大家进行参考。
478 0
|
Linux 开发工具 git
VIM 配置及内核代码编译
配置文本编辑器 VIM 来提高在LInux环境下C++的开发体验
5056 0

热门文章

最新文章