http://blog.csdn.net/tao_627/article/details/48196183
http://ats-zh.readthedocs.io/en/latest/reference/configuration/parent.config.zh.html
理解缓存分级cache hierarchies
缓存分级是由彼此能够相互通信的各级缓存组成的,ATS支持几种类型的缓存分级。
ATS支持父缓存和ICP两种形式的缓存选项。
你能够配置ATS节点去使用多个父缓存,以便假如某个父缓存不可用时,转而去查询另一个父缓存,依次下去,直至要么能有资源响应该请求,要么在没有更多父缓存的情况下去源站回源。这种情况叫做父缓存故障转移Parent Failover。
当你修改parent.config文件后,运行traffic_ctl config reload命令去让变更生效。当你对集群中的一个节点更新配置时,ATS会自动将配置更新应用到集群中的所有其它的节点。
父级缓存Parent Caching
与remap.config结合
假如使用了remap规则(配置了proxy.config.reverse_proxy.enabled),当请求到达子节点是,它的remap.config将在parent规则之前处理。
示例
客户端发送请求到 http://example.com. 上的ATS,ats发到源站的请求是http://origin.example.com; 父节点是parent1.example.com,子节点被配置为反向代理
- 子缓存节点
- remap.config中添加
map http://example.com http://origin.example.com
- parent.config中添加
dest_domain=origin.example.com method=get parent="parent1.example.com:80
处理流程:
子ATS接收客户端的请求 http://example.com,子ATS根据remap.config会把 http://example.com转发到源站http://origin.example.com上, 但因为子ATS又配置的父ATS,子ATS检查自己的parent.config配置,匹配到了一条到http://origin.example.com的规则,
所以子ATS会把客户端请求 http://example.com转发到其父ATSparent1.example.com上
- 父缓存节点
remap.config中配置
map http://origin.example.com http://origin.example.com #直接去源站取
该例子中,假如 parent1.example.com宕机,子节点在cache miss的情况下,会自动直连源站 origin.example.com
配置ATS使用父缓存
为了配置ATS使用一个或多个父缓存,你需要像下面那样详细配置。
注意 你只需要配置子缓存,假设父缓存配置为子缓存的源站,对父缓存不需要额外配置
- 在records.config中开启父缓存选项parent caching option
CONFIG proxy.config.http.parent_proxy_routing_enable INT 1
- 确保你想使用父缓存去服务于 service missed requests。如果另外要使用parent failover,你必须指定一个以上的父缓存,以便当一个父缓存不可用时,请求可以转发到另一个父缓存
- 配置parent.config中的parent proxy rules
下面的例子配置ATS子缓存将所有path为/viewpoint 和含有正则表达式politics的请求直接发往源站(跳过任何父缓存)
url_regex=politics prefix=/viewpoint go_direct=true
下面的例子配置ATS子缓存将所有以http://host1开头的URL的missed请求转发到父缓存,假如parent1不能服务,就转发到parent2.
因为round-robin=true, ATS会基于client IP address轮询方式遍历父缓存列表
dest_host=host1 scheme=http parent="parent1;parent2" round-robin=strict
运行traffic_ctl config reload命令去让配置变动生效。
附注:现在v6.0的版本最好使用"traffic_ctl config set "来代替"traffic_line -s"动态配置参数。
ICP Peering
The Internet Cache Protocol (ICP)被代理缓存使用去交换彼此的资源信息,ICP query消息去查询其它缓存是否存有指定的URL?
ICP response消息会应答为hit或miss。缓存只会和自己相邻的,并且能够接收ICP消息的特定ICP peer交换ICP消息。一个ICP缓存可以是一个sibling缓存(在分级缓存中同级)或是parent缓存(在分级缓存中高一级)
假如ATS开启了ICP caching,那么当HTTP请求cache miss时,它发送ICP query到ICP peers。假如ICP peers都没有hit,但是存在父级缓存,它会使用轮询策略
(round-robin policy)选择一个父缓存。假如没有ICP父缓存存在,ATS会将请求转发到HTTP父缓存。假如没有HTTP父缓存,ATS会转发请求到源站。
为了配置ATS节点作为ICP分级缓存的一部分,你必须执行下面的任务:
- 确定ATS是否只能接收ICP消息,或者是否发送和接收ICP消息
- 确定ATS是否可以直接将消息发给每个ICP peer,或者在指定多播通道发送单个消息
- 指定ICP消息使用的端口
- 确定能与ATS通信的ICP peer(siblings and parents)
在records.config中配置如下选项来使用ICP分级缓存ICP cache hierarchy
proxy.config.icp.enabled
proxy.config.icp.icp_port
proxy.config.icp.multicast_enabled
proxy.config.icp.query_timeout
配置icp.config,对每个你想识别的ICP peer,给出一条单独的规则
运行traffic_ctl config reload去让配置变动生效
参考文档
[1].https://docs.trafficserver.apache.org/en/latest/admin/hierachical-caching.en.html#configuring-traffic-server-to-use-a-parent-cache
[2].https://docs.trafficserver.apache.org/en/latest/reference/configuration/parent.config.en.html
=============================
http://blog.csdn.net/tao_627/article/details/48196519
parent.config
parent.config文件识别用在缓存分级中的父代理,用这个文件去执行下面的配置:
- 搭建父分级缓存,兼容多父级缓存和父级缓存故障转移
- 配置指定的URL请求避开父代理缓存
仅当父缓存选项开启后,ATS才能使用parent.config文件。
当你修改parent.config文件后,运行traffic_ctl config reload命令去让变更生效。当你对集群中的一个节点更新配置时,ATS会自动将配置更新应用到集群中的所有其它的节点。
格式
parent.config中每行必须包含一个parent caching rule,ATS识别以空格分隔的标签:
primary_destination=value secondary_specifier=value action=value
下表给出了primary_destination的目标和它们的允许值:
dest_domain: 请求的域名和子域名
dest_host: 请求主机名
dest_ip: 请求的IP地址或是IP地址范围,使用短杠-分隔
url_regex: URL中的正则表达式(regex)
secondary_specifiers在parent.config中可选,可能的指示符和允许的值如下:
port: 请求URL的端口
scheme: 请求URL的协议:http或https
prefix: 请求URL的path前缀
suffix: 请求URL的path后缀
method: 请求URL的方法,可以为get,post,put,trace中之一
time: 父缓存服务请求的时间段,比如 08:00-14:00,这个功能太牛逼了
src_ip: client的IP地址
internal: 布尔值true或false,指定该规则是match还是not match一个来自内部API(也就是插件自身触发的)的transaction,比如background_fetch插件发送的http请求
下表给出了可能的actions和它们允许的值
parent: 父服务器列表,假如请求不能被列表中的最后一个父服务器处理,将会直接回源,可以使用域名或是IP地址指定,但必须指定端口号
round_robin: 下列值之一:
true ATS基于client IP地址轮询方式遍历父缓存
strict ATS严格依照次序处理请求,比如proxy1服务第一个请求,proxy2服务第二个请求,等等
false 禁用轮询父缓存方法
consistent_hash url一致性hash,以便于一个给定url只有一个父缓存服务,假如一个父缓存宕机,ATS会跳过该宕机的父缓存去重新对剩下的父缓存们做一致性hash,
其它流量不受影响,一旦宕机的父缓存再次可用时,流量分布会重回宕机前的状态
go_direct: 下列两个值之一:
true 请求会跳过父级缓存直接回源
false 请求不跳过父级缓存,按正常思路走呗
示例
下面的规则配置了一个一子两父(p1.x.com和p2.x.com)的分级缓存,ATS会转发它不能serve的请求到父服务器p1.x.com和p2.x.com,
dest_domain=. method=get parent="p1.x.com:8080; p2.y.com:8080" round_robin=true //使用轮询方式round_robin=true;primary_destination=value secondary_specifier=value action1=value1 action2=value2
dest_domain=. method=get parent="p1.x.com:8080|1.0; p2.y.com:8080|2.0" round_robin=consistent_hash //使用round_robin=consistent_hash
下面的规则配置了ATS将所有含有正则表达式politics和path为/viewpoint的请求直接到源站(跳过任何父级缓存):
url_regex=politics prefix=/viewpoint go_direct=true //primary_destination=value secondary_specifier=value action=value
注意
parent.config中每行必须包含parent=或go_direct=指示符
参考文献
[1].https://docs.trafficserver.apache.org/en/latest/reference/configuration/parent.config.en.html
=================================实例分析======================
子ATS:
CONFIG proxy.config.reverse_proxy.enabled INT 1
map http://www.mytest.com:8080/ http://oringin.server.com:8000/pic/ #代表子ATS收到的http://www.mytest.com:8080/请求会被转换成http://oringin.server.com:8000/pic/
例如:
客户发发起的http://www.mytest.com:8080/trafficserver.png,会被转成http://oringin.server.com:8000/pic/trafficserver.png
日志: "TCP_MISS:DIRECT"
给子ATS增加父ATS
dest_host=http://oringin.server.com port=8000 prefix=/pic parent="ip_of_parent_ats:8080" round_robin=true
解释:
当ATS收到的http://www.mytest.com:8080/,如果cache miss了,请求会被转换成http://oringin.server.com:8000/pic/,但在向源站发起请求之前,子ATS会检查parent.config配置,如上例所示刚好匹配到了
dest_host=http://oringin.server.com port=8000 prefix=/pic parent="ip_of_parent_ats:8080" round_robin=true
所以子ATS会把请求转发给父ATS, 日志:"TCP_MISS:PARENT_HIT", 【该状态只是代表本节点miss了,并且找到了父节点,但父节点能不能响应该请求不确定】
子ATS会向地址为ip_of_parent_ats的父ATS的8080端口转发请求,转发出去的请求为:http://origin.server.com:8000/pic/trafficserver.png
父ATS:
如果父ATS没有配置关于origin.server.com:8000的规则的话,日志会返回: ERR_INVALID_URL:NONE
如果父ATS在其remap.config中有origin.server.com:8000相关的配置的话,例如
map http://origin.server.com:8000/pic/ http://origin.server.com:8000/pic/ #直接去源站取
map http://origin.server.com:8000/pic/ http://127.0.0.1:8000/ats/ #去其他地方去也可以
注意:
remap.config中的
<map_type> client-URL origin-server-URL <tag_value> <filtering>
Where client-URL and origin-server-URL are both of the format
<scheme>://<host>:<port>/<path_prefix> 到路径截至,不能包括特定的file name
client-URL:既可以是来自http客户端的直接请求,也可以是来自其他ATS透传过来的真实的客户端请求,端口号并一定非得是ATS的监听端口
比如一个源站对外服务的url是: http://example.com:9999/test.cgi
客户端可以通过给浏览器配置代理的方法,使得客户端的请求被发往ATS服务器。或者直接使用wget -e http_proxy=ats机器的ip:port http://example.com:9999/test.cgi -S ,
此时ATS的remap.config的配置应该如下:
map http://example.com:9999/ http://example.com:9999/ #直接发往源站
map http://example.com:9999/ http://othersize.com/ #直接发往任意其他站点
浙公网安备 33010602011771号