流量复制 - 工具对比
线下的测试难以模拟真实流量, 尤其难以模拟正常流量混杂着各色异常流量;所以复制线上流量进行测试,能够覆盖很多无法预见的异常流量.
流量复制工具有很多, 例如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的信息别忘了在本站进行查找喔。