目录
tcpcopy 介绍
环境
tcocopy原理图
tcpcopy 安装
intercept 安装
tcpcopy 性能压测
tcpcopy 测试结果
tcpcopy性能监控图形
tcpcopy 介绍
tcpcopy 是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现 bug,增加上线信心。
tcpcopy 地址
https://github.com/session-replay-tools/tcpcopy
环境
注:
前端服务器,后端服务器可以使用同一台,建议将前端,后端分开,便于监控数据
测试服务器,辅助服务器可以使用同一台,建议将测试,辅助分开,便于监控数据
tcocopy原理图
tcpcopy 拷贝一次流量访问的步骤如下:
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连接
Nginx访问日志
测试服务器
tcp连接
Nginx 访问日志
说明:可以看出TCP连接已经复制到测试服务器。
tcpcopy 3倍压力测试结果
使用浏览器访问discuz首页。
# ./tcpcopy -x 80-192.168.103.12:80 -s 192.168.103.14 –d –n3
后端服务器
tcp连接
Nginx日志
测试服务器
tcp连接
nginx日志
说明:
可以看出TCP连接已经复制到测试服务器。
测试服务器tcp连接是在线服务器tcp连接3倍
测试服务器nginx日志是在线服务器nginx日志3倍
tcpcopy性能监控图形
通过前端服务器,将后端服务器的3倍访问量传输到测试服务器。可以看出前端服务器无压力,后端服务器和测试服务器压力比较大,主要表现在CPU IO,和网络带宽