目录

  • tcpcopy 介绍

  • 环境

  • tcocopy原理图

  • tcpcopy 安装

  • intercept 安装

  • tcpcopy 性能压测

  • tcpcopy 测试结果

  • tcpcopy性能监控图形


tcpcopy 介绍

tcpcopy 是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现 bug,增加上线信心。

tcpcopy 地址
https://github.com/session-replay-tools/tcpcopy

环境

TCPCOPY 性能压测安装部署_java

TCPCOPY 性能压测安装部署_java_02


注:

前端服务器,后端服务器可以使用同一台,建议将前端,后端分开,便于监控数据
测试服务器,辅助服务器可以使用同一台,建议将测试,辅助分开,便于监控数据

tcocopy原理图

tcpcopy 拷贝一次流量访问的步骤如下:

TCPCOPY 性能压测安装部署_java_03

  • 1、一个访问到达线上前端机

  • 2、socket 包在 ip 层被拷贝了一份传给 tcpcopy 进程

  • 3、tcpcopy 修改包的目的及源地址,发给测试前端机

  • 4、拷贝的包到达测试前端机;

  • 5、测试前端机的 nginx 处理访问,并返回结果

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

  • 7、ip header 被发送给线上前端机的 tcpcopy 进程

tcpcopy 安装

#yum install libpcap
#wget https://github.com/session-replay-tools/tcpcopy/archive/master.zip
#unzip master.zip
#cd tcpcopy-master
#./configure
#make
#make install

:tcpcopy 依赖libpcap抓包软件,默认安装路径/usr/local/tcpcopy

intercept 安装

#yum install libpcap
#wget https://github.com/session-replay-tools/intercept/archive/master.zip
#unzip master.zip
#cd intercept
#./configure
#make
#make install

:默认安装路径/usr/local/tcpcopy

tcpcopy 性能压测

将后端服务器192.168.103.11的流量导入测试服务器192.168.103.12
辅助服务器执行以下命令:

#./intercept -i eth0 -F ‘tcp and src port 80’ -d  #拦截网卡eth0 tcp 80端口数据包

:更多详细参数请使用./intercept -h 查看

后端服务器执行以下命令:

# ./tcpcopy -x 80-192.168.103.12:80 -s 192.168.103.14 -d

:将后端服务器80端口数据包复制转发到测试服务器192.168.103.12的80端口

如果要将压力测试扩大到3倍,则执行以下命令:

 # ./tcpcopy -x 80-192.168.103.12:80 -s 192.168.103.14 –d –n3

:更多详细参数请使用./tcpcopy -h查看

tcpcopy 测试结果

# ./tcpcopy -x 80-192.168.103.12:80 -s 192.168.103.14 -d

使用浏览器访问discuz首页。

后端服务器

tcp连接

TCPCOPY 性能压测安装部署_java_04

Nginx访问日志

TCPCOPY 性能压测安装部署_java_05

测试服务器

tcp连接

TCPCOPY 性能压测安装部署_java_06

Nginx 访问日志

TCPCOPY 性能压测安装部署_java_07
说明:可以看出TCP连接已经复制到测试服务器。

tcpcopy 3倍压力测试结果

使用浏览器访问discuz首页。

# ./tcpcopy -x 80-192.168.103.12:80 -s 192.168.103.14 –d –n3

后端服务器

tcp连接

TCPCOPY 性能压测安装部署_java_08

Nginx日志

TCPCOPY 性能压测安装部署_java_09

测试服务器

tcp连接

TCPCOPY 性能压测安装部署_java_10

nginx日志

TCPCOPY 性能压测安装部署_java_11

说明:

可以看出TCP连接已经复制到测试服务器。
测试服务器tcp连接是在线服务器tcp连接3倍
测试服务器nginx日志是在线服务器nginx日志3倍

tcpcopy性能监控图形

TCPCOPY 性能压测安装部署_java_12

TCPCOPY 性能压测安装部署_java_13


通过前端服务器,将后端服务器的3倍访问量传输到测试服务器。可以看出前端服务器无压力,后端服务器和测试服务器压力比较大,主要表现在CPU IO,和网络带宽