转载自https://blog.zymlinux.net/index.php/archives/374
Apache Traffic Server的程序文件,与传统的服务器系统有大不同,这里我们将会对这些文件进行详细的解读,并尽可能的对程序的功能和基本用法、参数等进一步说明,以利于新入门的同学们快速上手。
本文中,我们以Fedora系统的安装结构进行解释,其他系统请参考《ATS安装大全》中介绍的路径做(闹补)变换。
ATS程序综述
ATS是一个服务器系统,相比多数服务器设计的单一程序设计,ATS设计的较为复杂,主要服务器程序可以分为:
· 代理服务器 > 代理服务器是ATS业务服务器,负载http代理和缓存职能
· 管理服务器 > 管理服务器包括两部分,分别是server系统管理和服务器控制
· 独立日志服务器 > 专用的日志收集、中转服务器
另外ATS还附带了其他工具程序:
· 日志查看、分析工具
· 系统配置管理工具
· 模块开发配套工具
· 性能测试工具
典型的ATS安装会包括如下程序,我们将会按照上述的分类对他们进行介绍:
traffic_cop
traffic_line
traffic_logcat
traffic_logstats
traffic_manager
traffic_sac
traffic_server
traffic_shell
trafficserver
tstop
tsxs
ATS主要服务器程序
traffic_server traffic_manager traffic_cop traffic_sac是ATS的主要服务器程序,是我们日常最常用到的服务器,我们将对他们的功能和使用进行详解的讲解
代理服务器 traffic_server
traffic_server是ATS的业务处理服务器,也是最ATS中最复杂的主程序,这个程序可以单独运行,也可以在traffic_manager管理下运行,主要包括服务器、回归测试、初始化cache系统三大功能块,默认功能是服务器。下面是traffic_server可以接受的命令行参数:
Usage: ./traffic_server [--SWITCH [ARG]]
switch__________________type__default___description
-l, --lock_memory int 0 Lock process in memory (must be root)
-n, --net_threads int 8 Number of Net Threads
-Z, --cluster_threads int 1 Number of Cluster Threads
-U, --udp_threads int 0 Number of UDP Threads
-a, --accept_thread tog false Use an Accept Thread
-b, --accept_till_done tog true Accept Till Done
-p, --httpport str (null) Port descriptor for HTTP Accept
-P, --cluster_port int 0 Cluster Port Number
-o, --dprintf_level int 0 Debug output level
-V, --version tog false Print Version String
-R, --regression int 0 Regression Level (quick:1..long:3)
-r, --regression_test str (null) Run Specific Regression Test
-T, --debug_tags str (null) Vertical-bar-separated Debug Tags
-B, --action_tags str (null) Vertical-bar-separated Behavior Tags
-i, --interval int 0 Statistics Interval
-M, --remote_management tog false Remote Management
-d, --management_dir str /opt/at.. Management Directory
-C, --command str (null) Maintenance Command to Execute
-k, --clear_hostdb on false Clear HostDB on Startup
-K, --clear_cache on false Clear Cache on Startup
-v, --vingid str (null) Vingid Flag
- , --accept_mss int 0 MSS for client connections
-t, --poll_timeout int 10 poll timeout in milliseconds
-h, --help HELP!
服务器功能:
服务器功能是 traffic_server 默认的功能,即不用任何参数运行 traffic_server 即启动代理/缓存服务器功能。当然,默认的服务器模式有诸多限制,这也是为什么ATS设计了管理服务器的专用程序的原因。我们先介绍ATS的服务器功能,后续的配合在管理服务器阶段介绍。
下面所有这些参数都是 traffic_server 的服务器功能参数:
-l, --lock_memory int 0 Lock process in memory (must be root)
-n, --net_threads int 8 Number of Net Threads
-Z, --cluster_threads int 1 Number of Cluster Threads
-U, --udp_threads int 0 Number of UDP Threads
-a, --accept_thread tog false Use an Accept Thread
-b, --accept_till_done tog true Accept Till Done
-p, --httpport str (null) Port descriptor for HTTP Accept
-P, --cluster_port int 0 Cluster Port Number
-o, --dprintf_level int 0 Debug output level
-V, --version tog false Print Version String
-T, --debug_tags str (null) Vertical-bar-separated Debug Tags
-B, --action_tags str (null) Vertical-bar-separated Behavior Tags
-i, --interval int 0 Statistics Interval
-M, --remote_management tog false Remote Management
-d, --management_dir str /opt/at.. Management Directory
-v, --vingid str (null) Vingid Flag
- , --accept_mss int 0 MSS for client connections
-t, --poll_timeout int 10 poll timeout in milliseconds
其中 -M -d 参数是与manager配合用的,-v是用来做内存检查工具Vingid配合用的,而其他所有的参数,都是可以在标准的records.config中找到对应的配置项目的。这里提供的参数主要用来覆盖records.config中的参数来的。
traffic_server的默认服务器模式,主要是用来做一些临时测试等工作,由于服务器设计端口绑定,文件打开等,会需要特别权限,这个在 traffic_cop traffic_server的管理下,会有许多特殊设计,因此不建议在生产服务器上手动执行这个默认服务器模式,这会造成很多文件权限等方面的困扰。
回归测试:
回归测试是面向业务的server功能测试,是目前ATS默认编译进二进制代码中的功能,下面这2个参数是跟测试相关的:
-R, --regression int 0 Regression Level (quick:1..long:3)
-r, --regression_test str (null) Run Specific Regression Test
回归测试的执行方法:
traffic_server -R 1
REGRESSION_TEST initialization begun
REGRESSION TEST SSLReverseHostname started
REGRESSION_RESULT SSLReverseHostname: PASSED
REGRESSION TEST SSLWildcardMatch started
REGRESSION_RESULT SSLWildcardMatch: PASSED
REGRESSION TEST DNS started
REGRESSION TEST RegressionSM started
REGRESSION_RESULT RegressionSM: PASSED
REGRESSION TEST SDK_API_ENCODING started
[SDK_API_ENCODING] TSStringPercentEncode : [TestCase1] <
[SDK_API_ENCODING] TSStringPercentEncode : [TestCase2] <
[SDK_API_ENCODING] TSStringPercentDecode : [TestCase1] <
[SDK_API_ENCODING] TSStringPercentDecode : [TestCase1] <
[SDK_API_ENCODING] TSBase64Encode : [TestCase1] <
[SDK_API_ENCODING] TSBase64Decode : [TestCase1] <
REGRESSION_RESULT SDK_API_ENCODING: PASSED
REGRESSION TEST SDK_API_OVERRIDABLE_CONFIGS started
。。。
*** TEST 172 *** STARTING ***
*** TEST 172 *** PASSED ***
Tests Passed: 172
Tests Failed: 0
REGRESSION_RESULT PARENTSELECTION: PASSED
REGRESSION_TEST DONE: PASSED
这是执行一遍快速回归测试的最简单的用法,建议用作开发测试的最基础步骤。现在官网的代码提交,都会直接触发一个build然后跑一遍快速回归,以确保代码不会break基础的功能。这个测试的结果会比较基础,不一定能够涵盖的很周全。如有业务方面的需求,不能作为业务测试的替代。
同时 -r 提供了一个快速执行某一个特定回归测试的选项,如你希望快速运行 Cache_vol 这个测试,只需要用 traffic_server -R 1 -r Cache_vol 就可以了,详细的测试功能列表可以从标准测试里摘取。
回归测试需要注意的事情:
o 多数情况下,-R 这个回归测试,需要server以root权限运行
o 某些版本在回归测试的时候,会过不去,主要是因为目录结构的原因,回归测试推荐的使用默认的目录结构,改变prefix的configure参数是安全的
cache系统初始化:
Cache的初始化是在 traffic_server 第一次运行的时候自动后台完成的。随着系统的运行,我们的cache系统可能需要从新清理等,如需要测试以及大型配置变化。下面的几个命令参数是可以达成这个任务的:
-C, --command str (null) Maintenance Command to Execute
-k, --clear_hostdb on false Clear HostDB on Startup
-K, --clear_cache on false Clear Cache on Startup
-C 参数是一个子命令:
traffic_server -Chelp
HELP
list List cache configuration
check Check the cache (do not make any changes)
clear Clear the entire cache
clear_cache Clear the document cache
clear_hostdb Clear the hostdb cache
help Obtain a short description of a command (e.g. 'help clear')
其中 -Cclear 的功能等于clear_cache和clear_hostdb的和,即 -k 与 -K 的和
-k 或 -Cclear_hostdb 是清理掉dns的缓存数据。
-K 或 -Cclear_cache 是清理掉http缓存的数据。
通常,-Cclear 是作为还原系统cache状态用,常作为测试中的一个必要步骤。要执行这些参数,需要将正在运行的server进程关闭。
管理服务器 traffic_manager 和traffic_cop
管理服务器包括两部分,分别是traffic_manager和traffic_cop。独立于主业务服务器traffic_server之外。
管理程序traffic_manager:
traffic_manager 是负责traffic_server的启动、更新管理等工作的程序,其主要功能包括:
以安全的方式启动traffic_server
ATS是一个服务器,服务器进程的安全性是需要严肃关注的,而traffic_server是一个复杂的http业务服务器,如果以root权限执行是有很大的安全隐患的。在系统上,traffic_manager是以root权限运行的,它会负责打开traffic_server监听的端口,并以普通用户启动traffic_server,这样即使是需要监听80端口等,也能够让traffic_server执行在安全的权限内。
提供管理界面,包括管理API的socket接口
ATS是一个复杂的服务器,有如traffic_line traffic_shell等管理工具,也有基于unix socket的管理API界面。如’traffic_line -s’ 设置参数,就是通过unix socket与配置系统进行通信的。traffic_manager同时也会与traffic_server建立通信机制,确保配置的变化可以对traffic_server生效。
监控配置文件变化、同步集群配置文件
ATS的配置文件更新机制很复杂,在集群中做配置同步的操作更复杂,如何让配置管理做得用户感受很好而且高效?ATS设置了一些复杂的协作机制,traffic_manager是所有这些配置管理的核心。
负责服务器信息统计与汇总展示
ATS的traffic_server进程有很多统计数据会在线程内进行统计,如何进行线程间统计汇总?如何让traffic_line等客户端可以查询这些数据?这也是traffic_manager解决的问题。
traffic_manager 包含如下参数,这些参数都是用来调整配置文件参数的。所有参数都有对应的records.config项目。
zymMBPr:bin zym$ sudo /opt/ats/bin/traffic_manager -h
[E. Mgmt] log ==> [TrafficManager] using root directory '/opt/ats'
----------------------------------------------------------------------------
Traffic Manager Usage: (all args are optional)
traffic_manager [options]
-proxyPort
-tsArgs [...] Args to proxy, everything till eol is passed.
-webPort
-clusterPort
-groupAddr
-clusterRSPort
-path
-recordsConf
-debug
-action
-version or -V Print version id and exit.
-vingid
[...] can be one+ of: [config process node cluster local all]
----------------------------------------------------------------------------
traffic_manager的主要使用方式是由traffic_cop调用,但是也可以单独运行traffic_manager,它也会安全的启动traffic_server。上述所有参数都不是必需的。下面是单独以root权限运行traffic_manager后的结果:
nobody 14335 2.6 1.3 2627116 112380 s001 S+ 10:14下午 0:00.78 /opt/ats/bin/traffic_server -M --httpport 8080:fd=8
zym 14339 0.0 0.0 2423572 24 s000 S+ 10:15下午 0:00.00 grep traffic
nobody 14333 0.0 0.1 2482036 7320 s001 S+ 10:14下午 0:00.10 /opt/ats/bin/traffic_manager
root 14332 0.0 0.0 2432908 828 s001 S+ 10:14下午 0:00.00 sudo /opt/ats/bin/traffic_manager
例子中我们可以看到,traffic_server附带了 -M --httpport 8080:fd=8 的参数,traffic_server和traffic_manager就是通过这样的方式传送监听端口信息的。
值班警察traffic_cop
在ATS系统中,traffic_cop占有绝对权威的控制力,traffic_cop是启动traffic_manager的,同时又是负责监控traffic_server和traffic_manager工作情况的。traffic_cop具有如下职能:
负责启动traffic_manager
trafficserver是一个可以用于普通init环境的unix shell脚本,这个脚本就是调用traffic_cop用来启动整个ATS服务。
负责监控traffic_manager的健康心跳
cop进程会通过查询manager接口的方式来判断manager是否健康
负责监控traffic_serfver的健康心跳
如果你去debug ATS的http流程,就会注意到其中有个一个定时的请求在刷,请求的是一个叫synthetic.txt的文件,我们通常叫做synthetic健康检测。这就是traffic_cop检测traffic_server进程心跳情况的请求。这个请求是通过特殊内部端口8083进入,使用的请求是:GET http://127.0.0.1:%d/synthetic.txt HTTP/1.0
o 负责在traffic_manager挂掉的情况下重启
负责在需要的情况下,安全重启traffic_manager
traffic_line -L 最终会重启traffic_server 和traffic_manager,这其中就是一个典型的主动重启例子。
traffic_cop没有任何参数,所有参数的传递都需要通过ENV环境变量的方式传递给traffic_cop,其中主要的环境变量估计就是TS_ROOT,这个环境变量参数当初设计用作定制配置,目前因为代码都已经开源并且各个目录都可以通过config.layout以及configure命令定制,因此已经基本没有价值。
traffic_cop仍是可以做详细调试的,用的是打trace日志的方式,你需要做一些特殊编译:
--enable-cop-debug Enable Traffic Cop debugging (for developers)
启动traffic_server进程最安全的方式就是直接运行traffic_cop啦。在你需要手工kill整个ATS服务的时候,先kill traffic_cop是必需的,否则它会一直不断重启traffic_manager来确保服务不会中断。
独立日志服务器 traffic_sac
SAC=Stand Alone Collation,是独立日志收集服务器的意思。为啥叫独立日志收集服务器呢?那是因为traffic_server本身既可以配置为日志发送客户端,也可以配置为日志收集服务器,而此时traffic_server是可以作为多重功能服务的。而独立日志服务器的目标是只提供单一日志收集功能,原先商业产品中,这是作为单独的模块可以卖的,现在开源后,这个独立日志服务器仍可以起到简化部署复杂度等,用作日志中转服务器等。 关于这个服务器,我用的也比较少,欢迎补充。
ATS工具程序
ATS为了配置管理以及开发测试等,均配备了良好的工具程序,这些工具程序的设计,将ATS的产品特性提高到了很高的层面。
日志查看、分析工具
ATS默认的access日志是以二进制的squid日志格式存储的,这个文件默认为squid.blog,因为这个日志是二进制的,因此没法直接用cat tail等文本工具直接看,而需要专用的工具traffic_logcat traffic_logstats。
blog查看工具 traffic_logcat
traffic_logcat的工具类似于标准的cat程序,只是这个工具作用于squid.blog文件。使用方法通常是traffic_logcat squid.blog 的cat模式,或 traffic_logcat -f squid.blog 的tail模式。
traffic_logcat有如下参数可以使用:
Usage: traffic_logcat [-o output-file | -a] [-CEhSTVw2] [input-file ...]
switch__________________type__default___description
-o, --output_file str (null) Specify output file
-a, --auto_filenames tog false Automatically generate output names
-f, --follow tog false Follow the log file as it grows
-C, --clf tog false Convert to Common Logging Format
-E, --elf tog false Convert to Extended Logging Format
-h, --help tog true Give this help
-S, --squid tog false Convert to Squid Logging Format
-T, --debug_tags str (null) Colon-Separated Debug Tags
-V, --version tog false Print Version Id
-w, --overwrite_output tog false Overwrite existing output file(s)
-2, --elf2 tog false Convert to Extended2 Logging Format
blog分析工具 traffic_logstats
traffic_logstats是用来分析squid.blog的,具有高效高速的特性,分析数据包括汇总以及各个域名分拆报告,是快速了解服务器访问情况的一个好工具。
(to be continued)
系统配置管理工具
ATS是一个在产品运维上具有极好的设计的产品,系统的可运维性在它提供的工具上具有非常好的体现。默认的ATS系统提供三个工具可用:
命令行工具 traffic_line traffic_line应该是日常使用的最多的一个ATS命令,是ATS命令行界面的核心,这个命令的主要参数包括:
Usage: traffic_line [--SWITCH [ARG]]
switch__________________type__default___description
-q, --query_deadhosts on false Query congested sites
-r, --read_var str (null) Read Variable
-s, --set_var str (null) Set Variable (requires -v option)
-v, --value str (null) Set Value (used with -s option)
-h, --help Help
-x, --reread_config on false Reread Config Files
-M, --restart_cluster on false Restart traffic_manager (cluster wide)
-L, --restart_local on false Restart traffic_manager (local node)
-S, --shutdown on false Shutdown traffic_server (local node)
-U, --startup on false Start traffic_server (local node)
-B, --bounce_cluster on false Bounce traffic_server (cluster wide)
-b, --bounce_local on false Bounce local traffic_server
-C, --clear_cluster on false Clear Statistics (cluster wide)
-c, --clear_node on false Clear Statistics (local node)
-Z, --zero_cluster str (null) Zero Specific Statistic (cluster wide)
-z, --zero_node str (null) Zero Specific Statistic (local node)
-V, --version tog false Print Version Id
这个命令包括:
读写配置选项 -r -s XXX -v YYY
读写配置选项是一个常见的日常任务,ATS的配置方式中,traffic_line可以方便的阅读和调整records.config 中的配置项目,并且如果配置项是动态生效的会即时生效。 如查询配置选项:
zymtest1 trafficserver # traffic_line -r proxy.config.http.negative_caching_enabled
0
如修改配置选项,静悄悄的成功了:
zymtest1 trafficserver # traffic_line -s proxy.config.http.negative_caching_enabled -v 1
zymtest1 trafficserver #
查询系统统计数据 -r
ATS的所有stats统计数据,都是通过标准的接口提供给API的,采用的与records.config一样的接口,因此也可以用 traffic_line -r 来读取:
reload配置文件 -x
ATS的配置文件,包括records.config都是可以直接修改的,多数配置文件是可以在线reload的,修改完成以后,可以运行:traffic_line -x 来reload相关配置文件。
启动、重启单机以及整个集群 -M -L -S -U
ATS独特的3个程序的服务器设计,使得ATS可以在服务器的起停方面有一些特别的效果,我们可以用traffic_line控制本机的server的启动、停止,重启,甚至整个集群的重启。 -U -S -L分别是用来控制本机server的启动、关闭、重启。 -M 是用来控制集群的所有机器对server重启,非常高效的集群命令。
清零单机及整个集群的统计数据 -C -c -Z -z
-C -c分别用来清理集群和本机的统计系统,所有统计数据清零。 -Z -z分别用来清零集群和本机的特定的统计项目。
ATS的records.config配置项大约在500个左右,再加上内部的统计数据,以及可以扩展的stats.config.xml中配置的汇总的数据,可以 -r 查询的数据是特别多的,如果希望列出全部的项目,可以参考 http_ui 界面中的 {stat} 列出的数据。
shell界面工具 traffic_shell
******* (to be continued)
服务器状态现实工具 tstop
******* (to be continued)
模块开发配套工具
ATS有很强的扩展API体系,具有非常方便的扩展能力,插件开发也是ATS获得大家认可的关键点,如果提供一个方便易用的业务插件开发环境?ATS学习了Apache Httpd项目的axs命令,提供了一个tsxs脚本,可以帮助大家建立一致的开发环境,并提高开发测试效率。
/opt/ats/bin/tsxs : a tool to compile, link and install trafficserver plugins.
compiling/linking:
-o modulename.so ## the name of the module
-I include ## add -Iinclude to CFLAGS
-L library path ## add -Lpath to LDFLAGS
-l library ## add -llib to the LDFLAGS
installing:
-o modulename.so ## the name of the module
-i ## install the object
Example:
/opt/ats/bin/tsxs -I /foo/include -L /foo/lib -l somelib -o tsmodule.so src1.c src2.c ...
tsxs有两个主要功能:
编译
上面的例子中就是一个编译的典型例子,其中 -I -L -l都是可以根据需要放上多个的。
安装
安装就是将编译生成的so文件,安装到系统的ATS插件目录中去。
tsxs命令将会使用与ATS主程序编译一样的cflags等来编译你的模块,在使用tsxs命令中,还需要注意:参数后面尽量跟空格,如 -I /foo/include,不要写成 -I/foo/include
性能测试工具
默认安装中,会有两个proxy性能测试工具安装,为什么要打包进去这两个工具呢,是因为ATS是个高性能的proxy+cache系统,普通的性能测试工具很难压测这个系统,只有使用ATS系统提供的测试工具,才能压的住。
http_load
我们附带的这个http_load程序,是在原http_load的基础上,对性能做了优化以提供更高的压测性能,它会将所有的URL预先加载到内存里,并预先生成相应的http请求,以快速发送请求。当然,副作用就是消耗的内存多了。
jtest
这是ATS系统专用的测试工具,在普通情况下,甚至能达到1:10的CPU利用率,即1个CPU跑jtest,可以压测ATS达到10个CPU利用率的效果,jtest的用法,请参考专门的jtest手册。
con new ops 1byte lat bytes/per svrs new ops total time err
100 68 278.0 7 7 3882974/38829 195 195 195 6467784 0.6 0
100 110 502.4 18 19 7653748/76537 339 339 339 12934100 1.6 0
这些参数aaa,能说一下具体的参数详解吗?
con=并发连接数
new=新建连接数
ops=请求数
都是每秒统计平均数
1byte=首字节响应时间
lat=最终请求完成时间
srvs后面是源服务器方面的统计。
性能测试工具并不是默认就一定有的,如http_load是只能在Linux平台上编译的,因此在BSD平台上http_load是不会安装的。
由于ATS 5.3是社区刚推出的LTS最新版本,比以前的版本改动幅度相当大,所以我决定抛弃以前的经验,从零开始探索该版本。下面是我的摸索实录。 1.下载源码 cd /usr/local/src wget -d "http://mirror.bit.edu.cn/apache/trafficserver/trafficserv...
滑块式验证码用户通过拖动滑块行为来完成校验,支持PC端及移动端。可以将用户拖动行为的时间、精度,滑动轨迹等信息到服务器,然后进行后台算法验证。特别介绍Blazor 版本的滑块验证码 传送门在线演示效果图快速开始组件依赖 font-awesomeCSS将引入样式表的 标签复制并粘贴到 中,并放在所有其他样式表之前。JS将引入脚本的 用...
Ktor 是一个使用 Kotlin 以最小的成本快速创建 Web 应用程序的框架。Ktor 是一个用于在连接系统(connected systems)中构建异步服务器和客户端的 Kotlin 框架。它由 Kotlin 团队创建,因此,它充分利用了 Kotlin 的语言特性,为开发者提供出色的体验和运行时性能。import io.kto...
l VDI (Virtual Desktop Infrastructure)VDI构架采用的“集中存储、集中运算”构架,所有的桌面以虚拟机的方式运行在服务器硬件的虚拟化层上,桌面以图像传输的方式发送到客户端。l IDV (Intelligent Desktop Virtualization) 由于VDI方案对服务器资源、网络带宽要求比...
受昨晚闰秒问题影响,今天内网和线上的ATS服务器都出现了CPU负载增高的问题,参见下面的截图 下面是tsar监控到负载异常记录,从今天(20150701)早上8:05分开始: 我们内网和线上的服务器Linux kernel内核版本都是 经过实践摸索,发现如下规律: 1.如果已经开启ntpd,如果昨晚没有关闭n...
下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL R720 2U服务器 CPU 8核 Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz 内存 32G 硬盘 系统盘 /...
下面是几个常用命令行工具,先截图,再描述 在生成环境调试的命令 sudo gdb ./traffic_server -p $(pidof traffic_server) -batch -x [macro_file] 参考文献 [1].ATS Debugging Fall Summ...
Page1.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Page1.aspx.cs" Inherits="Application.跨页面传送.Page1" %>
在下面的例子中,我们在一个 .aspx 文件中声明了一个 TextBox 控件和一个 Label 控件。当您更改了 TextBox 中的值,并且在 TextBox 外单击时,change 子例程就会被执行。change 子例程会向 Label 控件写一条文本: