Linux服务器上安装使用TCPCopy来获取用户访问流量

tcpcopy可以当做一种压力测试工具,也可以获取真实的用户访问流量,从而模拟真实运行环境,tcpcopy的开发者这样介绍它: TCPCopy是一种请求复制(所有基于tcp的packets)工具,其应用领域较广,利用TCPCopy程序,可以把访问memcached的系统流量复制一份到membase系统中去。对于membase来说,这份流量就是访问membase的,跟直接上线

membase效果一样,就可以做各种试验,查看membase的各种特性。

主要有以下功能

1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小,也可以提前发现一些bug

2)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开

发者有信心上线

3)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验

4)流量放大功能,可以利用多种手段构造无限在线压力,满足中小网站压力测试要求

5)利用TCPCopy转发传统压力测试工具发出的请求,可以增加网络延迟,使其压力测试更加真实

6)热备份

7)实战演习(架构师必备)

安装:

代码如下:

tar -zxvf tcpcopy-0.9.0 .tar.gz

cd tcpcopy-0.9.0 ./configure

make

make install

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

现在的代码已经放在github(https://github.com/session-replay-tools/tcpcopy)上了,1.0 以上的版本,tcpcopy 和 intercept 包已经分开了,需要单独下载安装,注意,如果在安装intercept的时候 ./configure报错checking for pcap.h … not found,可以 通过yum install libpcap-devel解决。

TCPCopy分为TCPCopy client和TCPCopy server。其中TCPCopy client运行在在线服务器上面,用来捕获在线请求数据包;TCPCopy server(监听端口为36524)运行在测试机器上面,在测试服务器的响应包丢弃之前截获测试服务器

的响应包,并通过TCPCopy client和TCPCopy server之间的tcp连接传递响应包的tcp和ip头部信息给TCPCopy client,以完成TCP交互。

使用方法如下:

TCPCopy server (root用户执行)

1)启动内核模块ip_queue (modprobe ip_queue)

2)设置要截获的端口,并且设置对output截获

代码如下:

iptables -I OUTPUT -p tcp --sport port -j QUEUE

3)interception

TCPCopy client (root用户执行)

tcpcopy 本地ip地址1[:本地ip地址2:…] 本地port 远程ip地址 远程port

试用:

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

操作Client-VM2

代码如下:

modprobe ip_queue

iptables -I OUTPUT -p tcp --sport 80 -j QUEUE

interception

操作Client-VM1

代码如下:

tcpcopy 10.1.6.205 80 10.1.6.206 80

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

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

2)TCPCopy中的tcpcopy和interception程序运行需要root权限

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

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

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

进而丢失请求

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

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

查看ip queue运行情况,如果Queue dropped的数值不断增大,则需要修改ip_queue_maxlen参数,

比如echo 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)复制同一台机器进程之间的请求,也即Local Requests,请设置lo MTU不超过1500,

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

8)TCP segmentation offloading相关问题(要注意网卡tso和gro要关闭)

如果tcpcopy所抓的数据包大小超过MTU,那么由于raw socket output的原因,需要你

改变在线设置,比如:ethtool -K eth1 tso off ; ethtool -K eth1 gro off

9)TCPCopy server,也即interception程序有可能会成为性能瓶颈,特别是对大数据响应这种情况

10)测试环境最好和在线环境一致,比如连接都保持keepalive

11)TCPCopy只与ip、tcp层的数据有关,如果请求验证与tcp层以上的协议有关,则系统不能正常运行。

例如:mysql连接协议,由于权限认证与tcp层上面的mysql协议有关,所以复制过去的请求会被目

标测试服务器认为非法请求,这个时候需要针对mysql协议作具体针对性的处理,tcpcopy程序才能正常运行

12)多层架构环境下,测试系统一定要独立,与在线系统没有业务关联,否则会影响在线

13)丢失请求率跟网络状况有关,最好在内网内复制请求

14)本系统不支持域名,只支持ip地址

15)针对长请求(比如上传文件),本系统不是很支持,预计0.5版本会支持

16)客户端ip地址为内网ip地址,一般情况下其应用请求是无法复制到外网测试机器上面去的。

17)为了避免不必要的麻烦,关闭的时候先关闭tcpcopy,然后再关闭interception

时间: 2024-12-03 20:39:51

Linux服务器上安装使用TCPCopy来获取用户访问流量的相关文章

在linux虚拟机上安装docker和在linux服务器上安装docker区别,在linux虚拟机上安装docker 如果这个虚拟机没有外网 是不是很难设置网络

问题描述 在linux虚拟机上安装docker和在linux服务器上安装docker区别,在linux虚拟机上安装docker如果这个虚拟机没有外网是不是很难设置网络该问题来自CSDNDocker技术交流群(303806405),由版主xinshubiao整理. 解决方案 解决方案二:看需求了,但差别不大该解答来自CSDNDocker技术交流群(303806405),由版主xinshubiao整理,由于手工编辑,提问者和回答者的QQ号和昵称没有一一注明,只简单用ABCD代替提问或回复,A代表提问

在Linux服务器上安装配置socks5代理的教程

  socks5 SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全.SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了一个前端的行为.在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器. 如果您的机器具有一个合法的 In

在Linux服务器上安装使用Memcache

  服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 . 下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz 另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-1.3.(如果你的系统已经安装了libevent,可以不用安装) 官网:http://www.monkey.org/~pr

在Linux服务器上安装 memcached的基本操作_Linux

一.memcached的安装 1.下载 memcached-1.4.33.tar.gz.libevent-2.0.22-stable.tar.gz 安装 memcached 依赖 libevent 2.安装 libevent a.解压 [root@iZ28b4kreuaZ webserver]# tar zxvf libevent-2.0.22-stable.tar.gz b.安装在 /usr/local/下 进入解压目录下:[root@iZ28b4kreuaZ libevent-2.0.22-

如何在SUSE Linux 10上安装Oracle:创建Oracle用户和组及安装目录

1 创建用户和组: linuxsuse:~ # groupadd oinstalllinuxsuse:~ # groupadd dbalinuxsuse:~ # useradd -g oinstall -G dba oraclelinuxsuse:~ # passwd oracleChanging password for oracle.New Password:Bad password: too simpleReenter New Password:Password changed.linux

如何在SUSE Linux 10上安装Oracle:为Oracle用户设置环境变量

1 用http://www.aliyun.com/zixun/aggregation/18444.html">文本编辑器vi 编辑.profile 参数文件: oracle@linuxsuse:~> pwd/home/oracleoracle@linuxsuse:~> vi .profileORACLE_SID=sdzyORACLE_BASE=/db/oracleORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1export ORACLE_

如何在SUSE Linux 10上安装Oracle:为Oracle用户设置Shell限制

1 在/etc/security/limits.conf 文件中输入以下内容: oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile http://www.aliyun.com/zixun/aggregation/12560.html">1024oracle hard nofile 65536 2 在/etc/pam.d/login 文件中输入以下内容: session required /lib/security/

如何在 Linux 系统上安装 Suricata 入侵检测系统

如何在 Linux 系统上安装 Suricata 入侵检测系统 随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要.然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越困难.其中一种提升入侵检测系统性能的途径是多线程入侵检测系统,它将 CPU 密集型的深度包检测工作并行的分配给多个并发任务来完成.这样的并行检测可以充分利用多核硬件的优势来轻松提升入侵检测系统的吞吐量.在这方面有两个知名的开源项目,分别

Fedora 12服务器上安装Apache2+PHP+MySQL

LAMP是Linux, Apache, MySQL, PHP的缩写.这篇教程将教你如何在一台Fedora 12服务器上安装Apache2web服务器+PHP(mod_php) +MySQL . 我已经测试无误,你可以放心使用. 1. 前言 在这篇教程中,我使用的主机名为server1.example.com,ip地址是192.168.0.100.这些设置可能与你想要的有所不同,所以你必须在适当的地方修改一下. 2 安装MySQL5 用下列命令安装MySQL: yum install mysql