环境

类型

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 将后端流量导入测试服务器-无倍数

# ./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,和网络带宽