生活资讯
tcpcopy 、tcpcopy原理
2023-04-10 01:25  浏览:43

流量复制 - 工具对比

线下的测试难以模拟真实流量, 尤其难以模拟正常流量混杂着各色异常流量;所以复制线上流量进行测试,能够覆盖很多无法预见的异常流量.

流量复制工具有很多, 例如Gor、tcprepl***、tcpcopy等; 这些工具贴合真实场景,能模拟真实流量, 并支持流量的放大或缩小,更容易测试出程序的瓶颈和潜在问题.

ngx_http_mirror_module 模块可以复制原始请求(镜像)通过内部跳转到另一个location.

配置如下:

流量放大, 配置两个mirror即可.

使用是很方便,但是线上nginx一般都承载了不止一个业务,修改nginx配置后需要nginx -s reload来使之生效,这种操作在线上还是尽量需要避免的.

Gorepl***是用Golang写的一个 HTTP 实时流量复制工具。功能更强大,支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析。

可以将流量复制到文件,然后再对他们进行回放。回放的时候,流量会维持原始的时间间隔。如果你使用了百分比来进行速率限制,那么回放的速率会相应的增加或减少。有了这种速率限制,gor就可以用来进行压力测试.

可以使用时间戳命名录制文件,默认情况下,文件是按“块”存储的, 即文件大小到达上限后, 添加后缀并新建另一个文件, 示例如下:

默认是按"块"存储文件的方式,但是可以参数配置 –output-file-append ,效果如下

时间格式化文件名的配置说明:

默认格式是 %Y%m%d%H

目前这种方式只支持"input-file", 而且只能用百分比去控制回放速率; 这个回放的速率比例是相对于input的, 即按照录下来的流量的时间戳去进行回放.

以2倍速率回放

如果"input-flie"是多个文件,可以用正则去匹配

配合如下配置参数,可以更好进行压力测试:

简单的HTTP流量复制

HTTP流量复制频率控制(获取每秒超过10个请求)

HTTP流量复制缩小

HTTP流量记录到本地文件

HTTP流量回放和压测

HTTP流量过滤复制

自定义一些流量复制的参数

将流量复制两份到不同的测试服务

将流量像负载均衡一样分配到不同的服务器

更多参数请查阅官方文档

Tcpcopy是一种请求复制工具。可以将线上流量拷贝到测试机器,实时的模拟线上环境。在不影响线上用户的情况下,使用线上流量进行测试,以尽早发现bug。也可以通过放大流量,进行压力测试,评估系统承载能力.

Linux运维人员必知必会工具汇总

领域 :工具名称

操作系统 :CentOS、Ubuntu、Redhat、suse、Freebsd

网站服务: nginx、apache、lighttpd、php、tomcat、resin

数据库: MySQL、MariaDB、PostgreSQL

DB中间件 :maxscale、MyCat、atlas、cobar、amoeba、MySQL-proxy

代理相关: lvs、keepalived、haproxy、nginx、heartbeat

网站缓存: squid、nginx、varnish

NoSQL库: Redis、CacheCloud、Memcached、MongoDB、Hbase、Cassandra、CouchDB

存储相关 :Nfs、FastDFS、Moosefs(mfs)、Ceph 、Hadoop、glusterfs、lustre

版本管理 :svn、git、gitlab、gogs

监控报警 :nagios、cacti、za***ix、munin、hyperic、mrtg、graphite

域名解析: bind、powerdns、dn***asq

同步软件: scp、rsync、inotify、sersync、drbd

批量管理: SSH、Ansible、Saltstack、expect、puppet

虚拟化: kvm、xen

云计算: openstack、docker、k8s

内网软件: iptables、zebra、iftraf、ntop、tc、iftop

邮件软件: qmail、posfix、sendmail、zimbra

远程拨号: openvpn、pptp、openswan、ipip

统一认证: openldap

队列工具: ActiveMQ、Ra***itMQ、metaq、MemcacheQ、Zeromq、kafka

打包发布: mvn、ants、Jenkins、Walle

测试软件: ab、JMeter、We***ench、LoadRunner、http_load、tcpcopy

带宽测试 :***okeping

性能测试 ;dd、 fio(IOPS测试)、iozone(磁盘测试)

日志相关: rsyslog、Awstats、flume、storm、ELK(Elasticsearch+Logstash+Kibana)

搜索软件: Sphinx、Xapian、Solr

无人值守: rpm、yum(设计rpm包定制及yum仓库构建)

大数据: HDFS、Hive、Hbase、Zookeeper、Pig、Spark、Mahout、flume、sqoop

项目管理: Jira、Redmine

linux管理: 宝塔Linux面板

渗透测试工具: SQLMap、Webscan

开源邮箱: iRedmail、extmail、Zimbra

软件开发 :Sublime Text、Eclipse、Jetbrains

远程连接: putty、Xshell、SecureCRT、MobaXterm、TeamViewer、向日葵

在此为服务器运维人员推荐使用:宝塔面板

宝塔面板,近200个免费应用提供使用,如:网站管理、系统安全、系统监控、计划任务、文件管理、软件管理、一键部署等为服务器运维人员提供安全高效的完成服务器运维工作。

tcpcopy是怎样的一款性能测试软件

 Tcpcopy 给用户提供了很多命令参数来修改引流的模式和设置,详细可以查阅手册。在这里把几种常见的引流方式做个归纳小结,以Tcpcopy传统架构使用命令举例。

分布式引流

用法:Tcpcopy可以通过-x参数实现将多台服务器的请求复制到同一台测试服务器上面去,-x参数常用于分布式引流的场合,可以从多节点进行引流复制。

#./tcpcopy -x 2080- xxx.xx.x.xxx:9999

#./tcpcopy -x 2080- xxx.xx.x.xxx:9999 -f 1

#./tcpcopy -x 2080- xxx.xx.x.xxx 9999 -f 2

适用场景:将线上一个集群的压力复制到测试服务器,适用于线上集群单节点压力小的情况,可以通过这种方式尽量覆盖线上所有的请求,这种方式常被用于容量规划之线上压测方式中的一种。

分层引流

对于一个复杂的线上系统,提供多种业务如图片、存储等,各种业务压力是不均衡的,如果在系统的最前端入口进行复制引流到测试环境,那么部分功能模块的压力将会很大,而部分功能模块的压力很小压不到上限,这时候分层引流就可以解决这样的问题,在系统架构每一层进行引流复制压测,尽量覆盖多的节点。以下是网易广告系统分层压测架构图。

HTTP 之 HTTPD介绍

1 概述

httpd是Apache 超文本传输协议 (HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。20世纪90年代初,国家超级计算机应用中心NCSA开发,1995年开源社区发布apache(a patchy server)

2 httpd特性:

.高度模块化:core + modules

.DSO: Dynamic Shared Object动态加/卸载

.MPM:multi-processing

module多路处理模块

3 httpd功能特性

.虚拟主机:基于IP、Port、FQDN来创建虚拟主机,可以在一台物理服务器上搭建多个网站

.CGI:Common

Gatew*** Interface,通用网关接口

网关解决了不同的网络或者不同的协议之间的通信,相当于是翻译的作用,这里是一个通用的概念

正向代理:为客户端访问外部网络提供服务,主要是提供了缓存,同时也可以进行用户行为控制

反向代理:起到了调度的作用,同时也可以做行为控制,nginx可以作为反向代理服务器,haproxy是专业的反向代理服务器

.负载均衡:根据用户的访问量来控制将请求分发到哪一台服务器上

.路径别名

.丰富的用户认证机制:如打开页面后弹出用户名和密码,一般不用web提供的,都是公司自己定制实现

basic

digest

.支持第三方模块

4 Httpd安装

.版本

CentOS6: 2.2

CentOS7: 2.4

.安装方式:

rpm:centos发行版,稳定,建议使用

编译:定制或特殊需求,如软件版本有漏洞,要通过源码编译安装实现,或者定制自己的特定需求功能

.CentOS 6程序环境:httpd-2.2

配置文件:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf

/etc/httpd/conf/httpd.conf配置了Include

conf.d/*.conf这句话,表示模块可以单独写在/etc/httpd/conf.d/这个路径下,写出独立的配置文件,也可以加载出模块这里也可以看出,如果要额外添加配置,增加功能,可以直接写在/etc/httpd/conf.d/这个路径下的模块,这样要删除也比较好删。当主配置文件和子配置文件都有相同的配置是,如果同一字段的配置有冲突,默认是以主配置文件生效的,原因是在主配置文件中include的子配置文件这句配置在配置DocmentRoot"/app/website"之前,默认是后面的配置生效,所以DocmentRoot"/app/website"这行配置比子配置优先,覆盖了前面的配置

检查配置语法:

httpd –t

service httpd  configtest

5 httpd自带的工具程序

.httpd自带的工具程序

htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具

apachectl:httpd自带的服务控制脚本,支持start和stop

这个工具类似dns的rndc这个工具

apachectl这是一个脚本

apxs:httpd-devel包提供,扩展httpd使用第三方模块工具

rotatelogs:日志滚动工具

access.log --access.log,access.1.log --access.log, acccess.1.log, access.2.log依次增加log,最新的log放在文件access.log里,旧的log会依次备份

suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行

6 httpd的压力测试工具

.httpd的压力测试工具.ab来自httpd-tools服务包

.ab, we***ench, http_load, seige

.Jmeter开源

.Loadrunner商业,有相关认证

.tcpcopy:网易,复制生产环境中的真实请求,并将之保存

.ab [OPTIONS] URL

来自httpd-tools包

ab测试的是***性能,所以实际情况下,可能不是***性能在处理http请求

-n:总请求数

-c:模拟的并行数

-k:以持久连接模式测试

ulimit  –n  #调整能打开的并发文件数,例子ulimit -n  2048 调整为2048.ulimit -a可以查看所有参数

7 CentOS 6 httpd程序环境

.服务脚本:/etc/rc.d/init.d/httpd

脚本配置文件:/etc/sysconfig/httpd

.服务控制和启动:

chkconfighttpdon|off

service{start|stop|restart|status|configtest|reload}httpd

端口号默认是80

.站点网页文档根目录:

/var/www/html

.模块文件路径:其中/etc/httpd下的modules是软链接的关系

modules -../../usr/lib/httpd/modules

/etc/httpd/modules

/usr/lib64/httpd/modules

CentOS 6 httpd程序环境

.主程序文件:

/usr/***in/httpd,默认用的是httpd

/usr/***in/httpd.worker

/usr/***in/httpd.event

.主进程文件:

/etc/httpd/run/httpd.pid

这个是服务启动的时候才会生成,服务器停止的时候就删掉,如果已经存在同名文件,启动时候就会覆盖掉这个进程

.日志文件目录:

/var/log/httpd

access_log:访问日志

error_log:错误日志

.帮助文档包:

httpd-额外的文档包,建议要安装,否则要到官网上才能看到

yum install httpd-manual,然后要重启服务或者重新加载配置才能使用

service httpd reload然后在自己搭建的apache就可以直接访问,如

如何使用tcpcopy离线回放TCP流量

网络方面常常有很多奇特的bug,总是上线后才会触发,线下的各种压力工具都没办法模拟出来。如果能把线上的流量复制到线下测试环境里使用,测试时可以覆盖更多潜在问题点,追查问题时又能完全不影响线上服务,该多好……tcpcopy来做这个事情正好,而且新版的tcpcopy使用起来更简单~~

总体来说,是把线上流量或保存的离线pcap包里的报文,变换源/目标地址后发给被测试机,被测试机上的服务回复这些报文,默认路由或者匹配修改后源地址的包的路由,全部指向辅助机,辅助机根据报文类型和TCP协议规范,回复相应的报文给被测试机;这样,从被测试机看,自己收到了网络请求并正常回复,完成了C/S的交互处理。

以下是官网原理图:

使用tcpdump工具,可以很方便的抓取和保存流量到pcap文件,如下:

(1)在回放机上,安装tcpcopy

(2)在辅助机上,安装intercept

(0)环境说明

注意:辅助机和测试机要在同一个网段哦~~以便测试机默认网关指向辅助机

测试机:12.21.219.22

测试机上的服务地址:12.21.219.22:8080

辅助机:12.21.219.24

回放机:12.21.219.23

(1)在辅助机上,启动intercept

(2)在回放机上,启动tcpcopy

(3)在测试机上,配置默认路由为辅助机,以保证所有回复回放流量的报文都打到辅助机上,例如:

(4)如果服务器上带iptables过滤规则,记得打开哦,比如辅助机上,我要允许回放机连接36524端口,可以如下配置

(1)优点

tcpcopy git地址:

intercept git地址:

tcpcopy的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于tcpcopy原理、tcpcopy的信息别忘了在本站进行查找喔。

发表评论
0评