环境
类型 |
IP |
软件 |
应用 |
前端服务器 |
192.168.103.13 |
Nginx |
Nginx反向代理 |
后端服务器 |
192.168.103.11 |
Nginx,PHP,MySQL tcpcopy 1.0.0 |
Discuz |
测试服务器 |
192.168.103.12 |
Nginx,PHP,MySQL |
Discuz |
辅助服务器 |
192.168.103.14 |
intercept 1.0.0 |
|
注:
前端服务器,后端服务器可以使用同一台,建议将前端,后端分开,便于监控数据
测试服务器,辅助服务器可以使用同一台,建议将测试,辅助分开,便于监控数据.
tcocopy原理图
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
将后端服务器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倍
性能监控图形
注:通过前端服务器,将后端服务器的3倍访问量传输到测试服务器。可以看出前端服务器无压力,后端服务器和测试服务器压力比较大,主要表现在CPU IO,和网络带宽