- Linux運(yùn)維最佳實(shí)踐
- 胥峰 楊俊俊
- 1543字
- 2019-01-04 00:50:54
最佳實(shí)踐10:配置和優(yōu)化Squid
Squid是對(duì)HTTP協(xié)議遵從性最好的緩存軟件,因此它在CDN中得到了大量的部署,是眾多CDN公司使用到的核心緩存軟件。在部署Squid時(shí),建議遵從以下的規(guī)范。
推薦使用大內(nèi)存服務(wù)器
對(duì)于熱點(diǎn)文件,Squid使用內(nèi)存進(jìn)行緩存,在access_log中體現(xiàn)為T(mén)CP_MEM_HIT。因?yàn)槭褂昧烁咚賰?nèi)存緩存機(jī)制,從而避免了從磁盤(pán)讀入緩存內(nèi)容,所以TCP_MEM_HIT是最高效的緩存方法。服務(wù)器所需要的內(nèi)存,以能夠完全容納本站點(diǎn)的所有熱點(diǎn)文件為標(biāo)準(zhǔn)。
推薦每個(gè)磁盤(pán)獨(dú)立使用
對(duì)于過(guò)大的文件或者非經(jīng)常訪問(wèn)的文件,Squid使用基于磁盤(pán)的緩存。在創(chuàng)建磁盤(pán)緩存時(shí),不需要將磁盤(pán)組配置成RAID 10或者RAID 5、RAID 6,通過(guò)cache_dir配置直接使用每個(gè)獨(dú)立磁盤(pán)進(jìn)行緩存以提高磁盤(pán)iops。配置指令如下:
cache_dir ufs /mnt/sdb1 8096 32 256 cache_dir ufs /mnt/sdc1 8096 32 256 cache_dir ufs /mnt/sdd1 8096 32 256 cache_dir ufs /mnt/sde1 8096 32 256
禁用atime更新
使用noatime選項(xiàng)來(lái)mount的文件系統(tǒng),不會(huì)在讀取磁盤(pán)緩存時(shí)更新相應(yīng)的inode訪問(wèn)時(shí)間。在/etc/fstab中的配置指令如下:
/dev/sdb1 /mnt/sdb1 ext3 noatime,nodiratime 0 0
配置Squid多實(shí)例
Squid以單進(jìn)程運(yùn)行,對(duì)多CPU的架構(gòu)支持不好,不能重復(fù)利用多CPU處理器代理的高性能。解決這個(gè)問(wèn)題的思路是在部署Squid的服務(wù)器上,部署Squid多個(gè)實(shí)例進(jìn)程。在部署多個(gè)實(shí)例時(shí),需要注意每個(gè)Squid實(shí)例的以下配置項(xiàng)目必須不同:visible_hostname、unique_hostname、http_port、snmp_port、access_log、cache_log、pid_filename、cache_dir。
使用URL哈希方法對(duì)Squid多實(shí)例進(jìn)行調(diào)度
參考圖2-2所示的CDN節(jié)點(diǎn)的典型架構(gòu)圖,對(duì)Squid多實(shí)例進(jìn)行負(fù)載均衡時(shí),務(wù)必使用URL哈希方法。采用這個(gè)方法的好處如下。
·增加緩存命中率。相同的URL訪問(wèn)到同一個(gè)Squid實(shí)例上,可以提高Squid緩存命中率。
·避免Squid上緩存文件的重復(fù)。使用URL哈希后,不同的Squid上緩存不同的文件,因此可以大大節(jié)省Squid磁盤(pán)緩存空間和內(nèi)存緩存空間。
禁用緩存間通信協(xié)議
緩存間通信協(xié)議的設(shè)計(jì)初衷是為了架構(gòu)緩存集群,盡量減少對(duì)源站的訪問(wèn)。目前主要有以下緩存間通信協(xié)議和方法:ICP、HTCP、Cache Digest、WCCP、WCCP2。從實(shí)踐來(lái)看,緩存間通信協(xié)議會(huì)導(dǎo)致緩存響應(yīng)的延時(shí),同時(shí)不利于問(wèn)題的排查。因此,建議所有的Squid實(shí)例都單獨(dú)提供緩存服務(wù),不進(jìn)行緩存間協(xié)議通信。禁用的方式是在編譯時(shí)加入以下指令:
configure options: '--prefix=/usr/local/squid' '--disable-icap-client' '--disable-wccp' '--disable-wccpv2' '--disable-htcp' '--disable-ident-lookups' '--disable-auto-locale' --enable-ltdl-convenience
架構(gòu)二級(jí)緩存
在實(shí)踐中,往往會(huì)部署二級(jí)緩存節(jié)點(diǎn)以減少回源站的流量。一級(jí)緩存節(jié)點(diǎn)是指最邊緣的緩存節(jié)點(diǎn),是直接服務(wù)于終端用戶(hù)的節(jié)點(diǎn)。二級(jí)緩存節(jié)點(diǎn),在架構(gòu)上實(shí)際上被一級(jí)緩存節(jié)點(diǎn)認(rèn)為是源站,而不是緩存節(jié)點(diǎn)。一級(jí)緩存節(jié)點(diǎn)和二級(jí)緩存節(jié)點(diǎn)之間,并不使用緩存間通信協(xié)議,而是直接使用HTTP進(jìn)行內(nèi)容獲取或者緩存內(nèi)容驗(yàn)證。可以使用如下配置指令:
cache_peer 10.1.6.38 parent 80 0 no-query originserver round-robin no-digest no-netdb-exchange name=server_xufeng_info acl sites_xufeng_info dstdomain .xufeng.info cache_peer_access server_xufeng_info allow sites_xufeng_info
使用Squid Manager獲取運(yùn)行狀態(tài)
Squid Manager提供了對(duì)Squid運(yùn)行進(jìn)程狀態(tài)的詳細(xì)信息展示通道,在配置文件中使用如下指令配置后,即可使用該功能:
acl manager proto cache_object cachemgr_passwd 6ByhK4fx config reconfigure shutdown http_access allow manager localhost http_access deny manager
主要使用的命令包括以下兩類(lèi)。
·查看Squid運(yùn)行狀態(tài)的命令:
# /usr/local/squid/bin/squidclient -h 127.0.0.1 -p 80 mgr:info 主要關(guān)注以下的輸出(命中率一般應(yīng)該高于80%): Cache information for squid: Hits as % of all requests: 5min: 95.0%, 60min: 91.0% #請(qǐng)求命中率(按次數(shù)計(jì)算) Hits as % of bytes sent: 5min: 86.0%, 60min: 84.0% #請(qǐng)求命中率(按字節(jié)數(shù)計(jì)算) Memory hits as % of hit requests: 5min: 90.0%, 60min: 82.0% #內(nèi)存緩存命中率
·查看當(dāng)前Squid運(yùn)行的配置的命令:
# /usr/local/squid.bak/bin/squidclient -h 127.0.0.1 -p 80 -w 6ByhK4fx mgr:config #使用-w(小寫(xiě))指定在Squid中配置的Manager密碼
優(yōu)化HTTP Range
HTTP Range方法提供了允許客戶(hù)端只獲取某個(gè)靜態(tài)文件部分內(nèi)容的能力。典型的Range請(qǐng)求的頭部信息(部分)如下:
GET /test.rar HTTP/1.1 Connection: close Host: file.xufeng.info Range: bytes=1025-2048
這個(gè)請(qǐng)求的含義是:客戶(hù)端希望讀取獲取http://file.xufeng.info/test.rar文件的從1025字節(jié)到2048字節(jié)的部分內(nèi)容。這種請(qǐng)求方式在多線程下載器(如迅雷、Flashget)中比較常見(jiàn),通過(guò)多個(gè)線程分別獲取同一個(gè)URL的不同部分然后組合起來(lái),可以提高下載速度。
在Squid中,以下指令用于控制對(duì)HTTP Range請(qǐng)求的緩存行為:
range_offset_limit
在實(shí)踐中,建議配置為以下值以平衡Range請(qǐng)求和緩存整個(gè)文件之間效率問(wèn)題:
range_offset_limit 3 MB
這樣配置后,如果用戶(hù)請(qǐng)求的起始Range字節(jié)在3MB以?xún)?nèi),如Squid本地沒(méi)有緩存過(guò)該文件,那么Squid會(huì)向后端請(qǐng)求整個(gè)文件,然后進(jìn)行緩存。如果Range的起始范圍超過(guò)3MB,則Squid也使用Range向后端請(qǐng)求,此時(shí)文件不會(huì)被緩存。
- Social Media Mining with R
- Learning Windows Server Containers
- UNIX操作系統(tǒng)設(shè)計(jì)
- 新手易學(xué):系統(tǒng)安裝與重裝
- Windows Phone 7.5 Data Cookbook
- 新手學(xué)電腦從入門(mén)到精通(Windows 10+Office 2016版)
- 數(shù)據(jù)中心系統(tǒng)工程及應(yīng)用
- 直播系統(tǒng)開(kāi)發(fā):基于Nginx與Nginx-rtmp-module
- Linux系統(tǒng)安全基礎(chǔ):二進(jìn)制代碼安全性分析基礎(chǔ)與實(shí)踐
- Linux系統(tǒng)最佳實(shí)踐工具:命令行技術(shù)
- CentOS 6 Linux Server Cookbook
- Drupal 7 Cookbook
- OpenVZ Essentials
- VMware vSphere 5.1 Cookbook
- Microsoft Hyper-V Cluster Design