Apache Traffic Server 5.3.2及6.2.1的使用初探索

Records-config詳細參考:http://www.safecdn.cn/2017/01/records-config-2/php

快速安裝及使用參考:html

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

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

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

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

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

貌似官方翻譯文檔:git

https://cnkedao.gitbooks.io/trafficserver_practice/content/第一章-ATS安裝.htmlgithub

實踐經驗總結:web

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

 

ATS入門知識點

1、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進程。

2、管理員工具

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查看更多

3、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文件在這個目錄下。

4、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!主頁、體育、郵件及財經站點。截取百度


1、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官方集成的插件

2、ATS 反向代理配置

ATS 反向代理有兩種配置方式:1、一個域名對應一個後端ip;2、一個域名對應多個後端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、反向代理配置完成

3、緩存配置

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

4、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 添加以下內容:

<LogFormat>

<Name = "rev_pro_and_cache_log"/>

<Format = "%<chi> - [%<cqtn>]\"%<cqhm> %<cquuc> %<crc>/%<cqhv>\"%<pssc> %<psql> %<phr>/%<pqsn>\"%<cquc>\" \"%<{User-Agent}cqh>\" %<psct>"/>

</LogFormat>

<LogObject>

<Format = "rev_pro_and_cache_log"/>

<Filename = "access"/>

</LogObject>

保存退出。

traffic_line -x

日誌過濾配置:

<LogFormat>

<Name = "access"/>

<Format = "%<chi> - [%<cqtn>] %<cqhm>%<cquc>/%<cqhv> %<pssc> %<psql> %<crc>%<phr>/%<pqsn> \"%<{User-Agent}cqh>\"%<psct>"/>

</LogFormat>

<LogFilter>

<Name = "test_access"/>

<Condition = "psct CASE_INSENSITIVE_CONTAINtext/html"/>

<Action = "REJECT"/>

</LogFilter>

<LogObject>

<Format = "access"/>

<Filename = "access"/>

<Filters = "test_access"/>

</LogObject>

1.這裏自定義了日誌格式access.log

2.定義了一個日誌收集方式,一個過濾條件,把產生text/html文件的日誌過濾掉,非text/html文件日誌將寫到本地日誌 access.log中。

保存退出

traffic_line -x

或從新啓動 ATS

5、集羣配置

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查看集羣中的機子數量

6、防盜鏈配置

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頁面

7、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 域名解析服務器上解析

8、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

9、加入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[&#39;Host&#39;] =ts.ctx[&#39;hdr&#39;]

ts.client_response.header[&#39;request-get-method&#39;]= ts.ctx[&#39;re&#39;]

ts.client_response.header[&#39;Uri&#39;] =ts.ctx[&#39;uri&#39;]

ts.client_response.header[&#39;server&#39;] =ts.ctx[&#39;ser&#39;]

local cache_status = ts.http.get_cache_lookup_status()

if cache_status == TS_LUA_CACHE_LOOKUP_MISS then

ts.client_response.header[&#39;cache-lookup&#39;] =&#39;MISS&#39;

elseif cache_status == TS_LUA_CACHE_LOOKUP_HIT_STALE then

ts.client_response.header[&#39;cache-lookup&#39;] =&#39;HIT_STALE&#39;

elseif cache_status == TS_LUA_CACHE_LOOKUP_HIT_FRESH then

ts.client_response.header[&#39;cache-lookup&#39;] =&#39;HIT_FRESH&#39;

elseif cache_status == TS_LUA_CACHE_LOOKUP_SKIPPED then

ts.client_response.header[&#39;cache-lookup&#39;] =&#39;HIT_SKIPPED&#39;

end

return 0

end

function do_remap()

ts.ctx[&#39;hdr&#39;] =&#39;www.test100.com&#39;

ts.ctx[&#39;ser&#39;] = &#39;wang&#39;

ts.ctx[&#39;re&#39;] = ts.client_request.get_method()

ts.ctx[&#39;uri&#39;] = 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需反饋

相關文章
相關標籤/搜索