Records-config详细参考:http://www.safecdn.cn/2017/01/records-config-2/

快速安装及使用参考:

http://www.cnblogs.com/itfenqing/p/5934936.html

http://www.thinksaas.cn/topics/0/506/506172.html

https://github.com/yanghao-zh/trafficserver-admin-books-zh_CN/blob/master/doc/完整配置示例.md

https://letong.gitbooks.io/website/content/cache/ats.html

http://blog.linuxphp.org/archives/1640/

貌似官方翻译文档:

https://cnkedao.gitbooks.io/trafficserver_practice/content/第一章-ATS安装.html

实践经验总结:

http://benpaozhe.blog.51cto.com/all/10239098/2

 

ATS入门知识点

一、ats的三个进程

1.traffic_server

traffic_server进程是ats的服务进程,负责代理缓存的事务处理。

2.traffic_manager

traffic_manager进程是ats的管理进程,负责启动、监控、配置等等,会监护traffic_server进程。

3.traffic_cop

traffic_cop进程是traffic_servertraffic_manager进程的监护者,发现异常会重启traffic_servertraffic_manager进程。

二、管理员工具

1.traffic_line

配置atsrecords.config主配置文件的工具,可以直接重载配置无需重启ats服务

读取配置traffic_line -r 参数名称

如:traffic_line -rproxy.config.http.insert_squid_x_forwarded_for

回显:1

修改配置traffic_line -s 参数名称 -v 修改内容

如:traffic_line -sproxy.config.http.insert_squid_x_forwarded_for -v 0

回显:(成功无回显)

生效配置traffic_line -x

查看更多帮助:traffic_line -h

2.traffic_shell测试无效,怀疑最新版5.3.2已经取消该功能

traffic_shell是一个监控和配置traffic_server的命令行工具(目前我只是使用其监控功能)。

可以登录进入traffic_shell进行使用,也可以通过管道调用

如可以执行traffic_shell命令进入traffic_shell管理模式使用

也可以这样调用 echo “show” |traffic_shell ,感觉调用方式比较方便。

例如:

echo “show:cache-stats” |traffic_shell,查看缓存状态信息

echo “show:proxy-stats” |traffic_shell,查看代理处理状态信息

详细请执行echo “show” |traffic_shell查看更多

三、ats的几个常用目录

这里列举的是默认安装的目录。

1.配置文件主目录

/usr/local/etc/trafficserver

records.configremap.configstorage.config等主配置文件在这个目录下。

2.ats相关日志文件目录

/usr/local/var/log/trafficserver

ats产生的日志文件在这个目录下,做日志分析需找到这个目录。

3.插件目录

/usr/local/libexec/trafficserver

ats安装的插件so文件会在这个目录下。

4.数据文件目录

/usr/local/var/trafficserver

默认的缓存数据db文件在这个目录下。

四、ats常用操作命令

1.启动|停止|重启atstrafficserver{start|stop|restart}

2.清空cache traffic_server -Cclear ( 该命令在ts停止时执行)

3.查看cache是否清空:traffic_line -r proxy.process.cache.bytes_used

4.查看配置的cache大小:traffic_line -r proxy.process.cache.bytes_total

5.查看集群中的节点数:traffic_line -r proxy.process.cluster.nodes

6.echo “show:cache-stats” |traffic_shell

7.echo “show:proxy-stats”|traffic_shell,显示数据仅作参考,据说不是很准

8.traffic_line-r proxy.node.cache_hit_ratio_avg_10s,查询当前缓存服务命中率

9.traffic_line-r proxy.node.current_server_connections ,到后端源的连接数

10.traffic_line-r proxy.node.current_client_connections ,前端用户到TServer的连接数

11.traffic_line-r proxy.node.user_agent_xacts_per_second ,平均每秒处理的并发数

12.traffic_line-r proxy.node.client_throughput_out ,当前TServer输出到前端的带宽流量(单位Mbps

 

 

trafficserver安装配置

Apache Trafficserver

介绍:ISP级别的高性能反向和缓存服务器,支持集群,缓存效率高,响应快,代理支持长连接,连接复用,过滤规则,映射,甚至7hash,负载均衡,丰富的api,类似nginx,更多特性看百度介绍。

Apache Traffic Server v.3.0.0基准测试的结果是每秒钟可以处理200,000多个请求,相对于v2.0来说提升了277%。它可以用在各种大规模的产品部署环境中,Yahoo!使用Apache Traffic Server处理400TB的数据量,同时每天还使用它处理多达300亿的数据对象,包括Yahoo!主页、体育、邮件及财经站点。截取百度


一、ATS 安装(这里参考文档为5.3.0的版本,但安装我们还是安装较新的版本6.2.1)

需要准备的安装包如下:

1.下载trafficserver-5.3.0.tar.bz2

http://mirror.bit.edu.cn/apache/trafficserver/trafficserver-5.3.0.tar.bz2

http://mirror.bit.edu.cn/apache/trafficserver/trafficserver-6.2.1.tar.bz2 

2.tcl tcl-devel

Centos\redhat: yum install tcl tcl-devel

debianapt-get install tcl tcl-dev

3.openssl openssl-devel

Centos\redhat: yum install openssl openssl-devel

Debian:apt-get install openssl libssl-dev libxml2 libxml2-dev(安装ats6.2的时候用到)

4.pcreats安装

安装步骤如下:

a、首先需要安装 tcl tcl-devel库,以及 openssl openssl-devel库,可以使用 yum install直接安装

b、解压:tar -xvf pcre-8.36.tar.gz

安装:cd pcre-8.36

./configure --prefix=/usr/local/trafficserver/pcre

make && make install

注:pcre 最好安装到一个指定的文件夹下,下边安装traffic server时会需要指定pcre函数库所在的文件夹--with-pcre

c、解压:tar -xvf trafficserver-5.3.0.tar.bz2

可能需要的库文件:yum install make gcc gcc-c++ glibc-devel db4-devel openssl-develtcl-devel expat-devel pcre-devel -y

安装:cd trafficserver-5.3.0

./configure --prefix=/usr/local/trafficserver --with-pcre =/usr/local/trafficserver/pcre--enable-example-plugins --enable-experimental-plugins

make && make install

注:--enable-example-plugins --enable-experimental-plugins 这两条指令是为了安装ATS官方集成的插件

二、ATS 反向代理配置

ATS 反向代理有两种配置方式:一、一个域名对应一个后端ip;二、一个域名对应多个后端ip

反向代理配置步骤如下:

  1. 进入ATS配置文件目录

cd/usr/local/trafficserver/etc/trafficserver

2、打开ATS主配置文件 records.config 修改或者添加下面的指令

CONFIG proxy.config.http.server_ports STRING 80

CONFIG proxy.config.reverse_proxy.enabled INT 1

CONFIG proxy.config.url_remap.remap_required INT 1

3、打开ATS映射配置文件 remap.config 配置映射规则

(1) 对于一个域名对应一个后端ip的情况,可以直接配置如下:

map http://www.ats100.com/ http://192.168.215.3/

其中,第一个url为请求的域名,第二个url为后端服务器的ip,两个url的格式为:scheme://host/

对于第一种,一个域名对应一个后端ip的方式配置完成,保存退出,重新启动ATS,或者使用 traffic_line -x

(2) 对于一个域名对应多个后端ip的情况,需要进行如下配置

map http://www.ats100.com/ http://www.ats100.com/

保存退出,打开 parent.config ,添加如下内容:

dest_domain=www.ats100.com parent="192.168.215.3:80;192.168.215.6:80; 192.168.215.9:80" round_robin=strict

保存退出,打开主配置文件 record.config 增加如下配置:

CONFIG proxy.config.http.parent_proxy_routing_enable INT 1

CONFIG proxy.config.http.no_dns_just_forward_to_parent INT 1

保存退出,重启ATS,或者使用 traffic_line -x

4、反向代理配置完成

三、缓存配置

1、简单缓存配置

a、打开主配置文件 record.config ,修改或者增加如下内容:

CONFIG proxy.config.http.cache.http INT 1

CONFIG proxy.config.http.cache.required_headers INT 0

b、打开 storage.config ,修改cache存储路径

var/trafficserver 256M(有条件就多设置点比如200G

c、缓存配置完成,保存退出,重启ATS,或者使用 traffic_line -x 重新加载配置

2、缓存有效期,缓存文件类型配置

a、保持反向代理和简单缓存配置不变,打开 cache.config 文件,这个文件就是用来配置缓存的一些详细信息

b、如果 remap.config 中的内容是 map http://www.ats100.com/ http://www.abc.com/

cache.config 中配置如下:

dest_domain=www.abc.com suffix=html ttl-in-cache=20s

意思是:请求域名是 www.ats100.com,请求文件是.html类型,缓存有效期是 20s(可以配置比如2h)

c、也可以配置不缓存,需要将 ttl-in-cache 替换成 action=never-cache,还可以配置忽略头部的no-cache字段等

d、可以使用正则表达式进行匹配,如需要实现,对于同一个域名,有参数的url全部不缓存,没有参数的url缓存20s

配置如下:

url_regex=^http://www.ats100.com/.*\?.*$ suffix=htmlaction=never-cache

url_regex=^http://www.ats100.com/[^\?]*$ suffix=htmlttl-in-cache=20s

3、多磁盘配置

a、多磁盘配置之前需要关闭 ATS ,并且删除 ATS 中的所有 cache.db 文件,否则会导致后边的配置出错

b、删除 cache.db 之后,保持 ATS关闭,需要修改 hosting.config volume.config storage.config 这三个文件如下:

hosting.config

hostname=www.ats100.com volume=1

hostname=www.ats200.com volume=2

hostname=* volume=3

volume.config

volume=1 scheme=http size=10240

volume=2 scheme=http size=10240

volume=3 scheme=http size=10240

storage.config

var/trafficserver/sde 256M volume=1

var/trafficserver/sdb 256M volume=2

var/trafficserver/sdf 256M volume=3

c、需要新建 sde/ seb/ sdf/ 三个文件夹,并且修改权限为 nobody

mkdir -pv var/trafficserver/sde

mkdir -pv var/trafficserver/sdb

mkdir -pv var/trafficserver/sdf

chown -R nobody:nobody var/trafficserver/sde

chown -R nobody:nobody var/trafficserver/sdb

chown -R nobody:nobody var/trafficserver/sdf

d、启动 ATS ,会看到在 sde/ sdb/ sdf/ 三个文件夹下都生成了一个 cache.db 文件,多磁盘配置成功

上边配置的作用就是使请求的host www.ats100.com 的请求cache sde/ 目录下www.ats200.com cache sdb/ 目录

其它请求cache sdf/ 目录下

4、定时更新缓存配置

a、打开主配置文件 record.config 修改或者增加如下内容:

CONFIG proxy.config.update.enabled INT 1

b、打开 update.config 文件,修改或者增加如下内容:

http://www.ats100.com/bzq.html\User-Agent: noname useragent\10\30\5\

c、重启 ATS 或者使用 traffic_line –x

四、ATS 日志配置

1、使用系统定义的日志格式

a、打开 record.config 修改或者添加如下内容:

CONFIG proxy.config.log.squid_log_enabled INT 1

CONFIG proxy.config.log.squid_log_is_ascii INT 1

b、重新启动 ATS 或者使用 traffic_line -x

2、使用自定义日志格式配置

a、打开 record.config 修改或者添加如下内容:

CONFIG proxy.config.log.custom_logs_enabled INT 1

CONFIG proxy.config.log.squid_log_enabled INT 0

CONFIG proxy.config.log.squid_log_is_ascii INT 0

b、打开 logs_xml.config 添加如下内容:

- [%]\"% % %/%\"% % %/%\"%\" \"%<{User-Agent}cqh>\" %"/>

保存退出。

traffic_line -x

日志过滤配置:

- [%] %%/% % % %%/% \"%<{User-Agent}cqh>\"%"/>

1.这里自定义了日志格式access.log

2.定义了一个日志收集方式,一个过滤条件,把产生text/html文件的日志过滤掉,非text/html文件日志将写到本地日志 access.log中。

保存退出

traffic_line -x

或重新启动 ATS

五、集群配置

a、打开 record.config 文件,修改或者添加如下内容:

LOCAL proxy.local.cluster.type INT 1

CONFIG proxy.config.proxy_name STRING MyCluster

CONFIG proxy.config.cluster.ethernet_interface STRING eth0

b、集群需要满足下面的条件:

1、集群中的机子配置要相同

2、集群中的机子要使用相同版本的ATS

3、集群中的机子需要在同一个ip

4、集群中名称必须相同proxy.config.proxy_name

c、重新启动 ATS 或者使用下面的两条命令:

traffic_line -x

traffic_line -L

d、使用 traffic_line -r proxy.process.cluster.nodes查看集群中的机子数量

六、防盗链配置

a、打开 record.config 文件,修改或者添加如下内容:

CONFIG proxy.config.http.referer_filter INT 1

b、打开 remap.config 添加如下内容:

map_with_referer http://www.ats200.com/ http://www.test200.com/http://127.0.0.1/error.html ~* .*\.bzq\.com

格式为:

map_with_referer client-URL origin-server-URL redirect-URLregex1 [regex2 ...]

其中, ~* 表示Referer头是可选的(没有Referer头正常访问)

上边配置的意思是:

1、请求头中没有Referer头的可以正常访问

2、请求头中有Referer头,并且Referer头字段的内容是 .*\.bzq\.com的才可以正常访问

3、不符合上边两条规则的,会自动跳转到 http://127.0.0.1/error.html页面

七、DNS 解析服务器指定

a、打开 record.config 文件,修改或者添加如下内容:

CINFIG proxy.config.dns.splitDNS.enabled 1

b、打开 splitdns.config 文件,加入如下内容:

dest_domain=www.ats100.com named="192.168.210.2"

c、上边配置的意思就是域名 www.ats100.com 192.168.210.2 域名解析服务器上解析

八、ui界面检查缓存状态:

1. 主配置文件records.config

加入:CONFIG proxy.config.http_ui_enabled INT 3

CONFIG proxy.config.http.enable_http_info INT 1 (可选项)

remap.config:

map http://www.test100.com/ http://www.test100.com/

map http://www.ui.com/ http://{cache} @action=allow@src_ip=192.168.153.1


测试:

map http://192.168.180.195/cache-internal/ http://{cache-internal}

map http://192.168.180.195/cache/ http://{cache}

map http://192.168.180.195/stat/ http://{stat}

map http://192.168.180.195/test/ http://{test}

map http://192.168.180.195/hostdb/ http://{hostdb}

map http://192.168.180.195/net/ http://{net}

map http://192.168.180.195/http/ http://{http}


iparent.config:

dest_domain=www.test100.com parent="192.168.215.3:80"round_robin=strict

注意:这里如果在remapmap的映射设置的是ip,在使用ui工具时查询时必须输入ip+path来查询,因为缓存时以ip加文件名为key缓存的,

2.打开浏览器,配置好host (www.ui.com)

访问www.ui.com,会出现

Lookup url

Delete url

Regex lookup

Regex delete

Regex invalidate

3.先访问test100让其缓存,然后点击各个可查看缓存信息,Lookup url 输入urlhttp://www.test100.com/test2.html,即可查看信息

点击delete url 可以删除该缓存中的 url

九、加入lua,配置响应头信息:

1.修改配置文件plugin.config

加入:background_fetch.so

2.修改配置文件remap.config

map http://www.test100.com/ http://www.test100.com/@plugin=/usr/local/ats/libexec/trafficserver/tslua.so@pparam=/usr/local/ats/lua_ats/test_hdr.lua

注意:@plugin 这里需要加载tslua.so, @pparam 这里是编写的lua脚本。

3.脚本如下(下面是测试的脚本)

function send_response()

ts.client_response.header['Host'] =ts.ctx['hdr']

ts.client_response.header['request-get-method']= ts.ctx['re']

ts.client_response.header['Uri'] =ts.ctx['uri']

ts.client_response.header['server'] =ts.ctx['ser']

local cache_status = ts.http.get_cache_lookup_status()

if cache_status == TS_LUA_CACHE_LOOKUP_MISS then

ts.client_response.header['cache-lookup'] ='MISS'

elseif cache_status == TS_LUA_CACHE_LOOKUP_HIT_STALE then

ts.client_response.header['cache-lookup'] ='HIT_STALE'

elseif cache_status == TS_LUA_CACHE_LOOKUP_HIT_FRESH then

ts.client_response.header['cache-lookup'] ='HIT_FRESH'

elseif cache_status == TS_LUA_CACHE_LOOKUP_SKIPPED then

ts.client_response.header['cache-lookup'] ='HIT_SKIPPED'

end

return 0

end

function do_remap()

ts.ctx['hdr'] ='www.test100.com'

ts.ctx['ser'] = 'wang'

ts.ctx['re'] = ts.client_request.get_method()

ts.ctx['uri'] = ts.client_request.get_uri()

ts.hook(TS_LUA_HOOK_SEND_RESPONSE_HDR, send_response)

return 0

end

 

 

开启DEBUG

traffic_ctl config setproxy.config.diags.debug.enabled 1

然后去日志diags.log或者traffic.out查看有无匹配http_match的日志

cache_heuristic_min_lifetime=3600导致cache.config的超时配置无效,群里表示是个BUG需反馈