怎么在Linux服务器中使用TCPCopy获取用户访问流量

介绍

本篇文章给大家分享的是有关怎么在Linux服务器中使用TCPCopy获取用户访问流量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

, TCPCopy可以当做一种压力测试工具,也可以获取真实的用户访问流量,从而模拟真实运行环境,TCPCopy的开发者这样介绍它:TCPCopy是一种请求复制(所有基于tcp的数据包)工具,其应用领域较广,利用TCPCopy程序,可以把访问memcached的系统流量复制一份到membase系统中去。对于membase来说,这份流量就是访问membase的,跟直接上线
membase效果一样,就可以做各种试验,查看membase的各种特性。
,,,,主要有以下功能
,,,,,1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小,也可以提前发现一些错误
,,,,,2)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开
发者有信心上线
,,,,,3)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验
,,,,,4)流量放大功能,可以利用多种手段构造无限在线压力,满足中小网站压力测试要求
,,,,,5)利用TCPCopy转发传统压力测试工具发出的请求,可以增加网络延迟,使其压力测试更加真实
,,,,,6)热备份
,,,,,7)实战演习(架构师必备)
,,,,

安装:

代码如下:


焦油-zxvf tcpcopy-0.9.0 . tar。广州
cd tcpcopy-0.9.0
。/配置

make install


注意:tcpcopy和拦截的版本,配置参数要一致

现在的代码已经放在github (https://github.com/session-replay-tools/tcpcopy)上了,1.0以上的版本,tcpcopy和拦截包已经分开了,需要单独下载安装,注意,如果在安装拦截的时候。/configure报错检查pcap。h,白马王子没有找到,可以通过yum安装libpcap-devel解决。


,,,,,,,,,,,TCPCopy分为TCPCopy客户机和TCPCopy服务器。其中TCPCopy客户运行在在线服务器上面,用来捕获在线请求数据包;TCPCopy服务器(监听端口为36524)运行在测试机器上面,在测试服务器的响应包丢弃之前截获测试服务器
的响应包,并通过TCPCopy客户机和服务器TCPCopy之间的tcp连接传递响应包的tcp和ip头部信息给TCPCopy客户机,以完成tcp交互。

,,,,,使用方法如下:
,,,,,,,,TCPCopy服务器(根用户执行)
,,,,,,,,,,,,1)启动内核模块ip_queue (modprobe ip_queue)
,,,,,,,,,,,,2)设置要截获的端口,并且设置对输出截获
,,,,,,,,,,,,,,,,,

代码如下:

iptables - i - p输出tcp -运动端口- j队列


,,,,,,,,,,,,3)拦截


,,,,,,,,TCPCopy client ,(根用户执行)
,,,,,,,,,,,,,,tcpcopy本地ip地址1[:本地ip地址2:,白马王子),本地port 远程ip地址远程港口

,,,,,试用:
,,,,,,,,,,,模拟抓取apache的访问流量。试用之前清空apache的访问日志。线上机器:10.1.6.205,线下机器:10.1.6.206。
,,,,,,操作Client-VM2

代码如下:


modprobe ip_queue
iptables - i - p输出队列
tcp——运动80 - j拦截


,,,,,操作Client-VM1

代码如下:


tcpcopy 10.1.6.205 80 10.1.6.206 80


作者交待了一些注意事项:

, 1) Linux平台,内核2.6 +,需要支持netlink机制

2) tcpcopy中的tcpcopy和拦截程序运行需要根权限

3)拦截在同一台机器只需要要运行一个实例,多个实例还不支持

4) tcpcopy客户需要连接测试服务器的36524端口,所以要对外开放36524端口

5) tcpcopy由于依赖于抓包函数,压力大的时候,抓包函数本身不可靠,所以会丢包,

进而丢失请求

6)由于拦截程序密切跟队列内ip核模块相关,所以当压力很大的时候请求

丢失率很高,需要优化sysctl系统参数才能达到好的效果(通过猫/proc/net/ip_queue,

查看ip队列运行情况,如果队列的下降数值不断增大,则需要修改ip_queue_maxlen参数,

比如回声4096比;/proc/sys/net/ipv4/ip_queue_maxlen;

如果Netlink droppedde的数值不断增大,修改net.core.rmem_max和net.core。wmem_max参数,

比如sysctl - w net.core。rmem_max=16777216和sysctl - w net.core。wmem_max=16777216)

7)复制同一台机器进程之间的请求,也即本地请求,请设置lo MTU不超过1500,

并且在配置文件中不要设置127.0.0.1地址,要设置内网或者外网地址

8) TCP分割出售相关问题(要注意网卡tso和gro要关闭)

如果tcpcopy所抓的数据包大小超过MTU,那么由于原始套接字的输出的原因,需要你

改变在线设置,比如:ethtool - k eth2 tso;ethtool - k eth2 gro了

怎么在Linux服务器中使用TCPCopy获取用户访问流量