大型網站架構與自動化運維——Squid緩存服務器

                                                       Squid緩存服務器

一、網絡架構圖

二、Squid服務基礎
1、緩存代理概述
(1)代理的工作機制
        當客戶機通過代理來請求的時候,指定待服務器會先查詢自己緩存,如果緩存有,則直接將緩存內容發送給客戶機。否則由代理服務器向internet發送請求,並將返回信息緩存併發送給客戶機
(2)代理的基本類型
        ①傳統代理:需要在客戶機程序中手動設置代理服務器地址和端口,才能使用代理服務器來訪問網絡
        ②透明代理:通過默認路由、防火牆策略將web訪問重定向。
2、安裝及運行控制
(1)編譯安裝
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex
        ①選項含義:
        --prefix:目錄
        --sysconfdir:配置文件位置
        --enable-arp-acl:通過客戶端MAC進行管理,放置IP欺詐
        --enable-linux-netfilter:使用內核過濾
        --enable-linux-tproxy:支持透明模式
        --enable-async-io:異步IO,提升存儲性能
        --enable-err-language:錯誤信息語言
        --enable-underscore:允許URL中有下劃線
        --enable-poll:使用poll()模式,提升性能
        --enable-gnuregex:使用GUN正則表達式
        ②創建連接文件、用戶
        ln -s /user/local/squid/sbin/* /usr/Local/sbin/
        useradd -M -s /sbin/nologin squid
        chown -R squid:squid /usr/local/squid/var/
(2)配置文件:squid.conf
http_port 3128:監聽端口
cache_effective_user squid:指定賬號
cache_effective_group squid:指定組
(3)運行控制
        ①檢查配置文件語法
        squid -k parse
        ②啓動、停止
        squid -z 啓動前需要先初始化
        squid 啓動
        squid -k kill 停止
        rm -rf /usr/local/squid/var/run/squid.pid 刪除PID文件
        ③問題
        centos7版本出現只監聽IPV6時,修改3128爲0.0.0.0:3128

三、構建代理服務器
1、傳統代理
(1)squid服務器配置
        ①修改配置文件
        repliy_body_max_size 10MB:允許下載的最大文件大小
        http_access allow all:放在http_access deny all之前

2、透明代理
(1)配置squid支持透明代理
http_port 192.168.11.101:3128 transparent
(2)設置iptables策略
iptables -t nat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

2、ACL訪問控制
    在配置文件中,ACL訪問控制通過兩個步驟實現:其一,使用acl配置項定義需要控制的條件;其二,通過http_access配置項對已定義的列表做允許或拒絕控制
(1)定義訪問控制列表:acl 列表名稱 列表類型 列表內容

(2)設置訪問權限
        ①httpd_access allow/deny 列表名
        ②取反可以在列表前加“!”
        ③沒有設置任何規則時將拒絕客戶端請求
        ④有規則時,沒有匹配到,則執行最後一條規則
        ⑤deny MYLAN MEDIAFILE:禁止下載mp3、mp4等文件
                deny MYLAN IPBLOCK:禁止訪問黑名單IP
                deny MYLAN DMBLCK:禁止訪問黑名單網址
                deny MYLAN MC20:併發鏈接超過20則禁止
                deny allow MYLAN WORKTIME:允許工作時間上網
                deny all:禁止所有客戶端使用代理


四、squid反向代理配置
1、修改配置文件
    http_port 192.168.11.10:80 vhost vport
    cache_peer  192.168.11.11 parent 80 0  www.abc.com
2、重啓squid
 

五、varnish與nginx緩存服務器
1、varnish
(1)優點
具有更高的穩定性、更快的訪問速度、更多的併發鏈接支持數,可以通過管理端口來管理緩存
(2)缺點
在高併發狀態下,消耗更多的CPU/IP和內存資源
進程一旦掛起、崩潰或重啓,緩存的數據會從內存中釋放,此時所有的請求都會轉發到後端服務器上

2、nginx
(1)緩存功能十分穩定、運行速度不遜於squid
(2)對多核CPU的利用率比其他開源軟件要好
(3)支持高併發請求,能同時承受更多訪問請求
六、varnish
1、varnish概述
(1)Varnish是一款高性能的開源HTTP加速器,其主要用來做爲反向代理中的緩存服務器使用。
        Varnish 的作者Poul-Henning Kamp是FreeBSD的內核開發者之一,他認爲現在的計算機比起1975年已經複雜許多。在1975年時,儲存媒介只有兩種:內存與硬盤。但現在計算機系統的內存除了主存外,還包括了cpu內的L1、L2,甚至有L3快取。硬盤上也有自己的快取裝置,因此squid cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但操作系統可以得知這些情況,所以這部份的工作應該交給操作系統處理,這就是 Varnish cache設計架構。
varnish的設計架構就是利用操作系統的緩存機制處理訪問
(2)Varnish主要運行兩個進程:Management進程和Child進程(也叫Cache進程)
        ①Child進程包含多種類型的線程,常見的如:
        Acceptor線程:接收新的連接請求並響應;
        Worker線程:child進程會爲每個會話啓動一個worker線程,因此,在高併發的場景中可能會出現數百個worker線程甚至更多;
        Expiry線程:從緩存中清理過期內容;
(3)Varnish Configuration Language (VCL)是varnish配置緩存策略的工具
        使用VCL編寫的緩存策略通常保存至.vcl文件中

2、部署
(1)安裝支持軟件
yum -y install libtool ncurses-devel pcre-devel libxslt groff pkgconfig libedit-devel libedit python-docutils python-imaging gcc gcc-c++ tar
(2)編譯安裝varnish
./configure --prefix=/usr/local/varnish --enable-debugging-symbols
make && make install
ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/
ln -s /usr/local/varnish/bin/* /usr/local/bin/
(3)添加配置文件
cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl
(4)修改配置文件
vim /usr/local/varnish/default.vcl

backend web1 {
        .host = "192.168.11.101";
        .port = "80";
        .probe = {  #開啓健康檢查
                .url = "/";  #請求的URL路徑
                .interval = 5s;  #查詢間隔時間
                .timeout = 1s;  #超時時間
                .window = 5; #varnish保持的結果滑動窗口,該滑動窗口是一種流量控制方法,允許發送方在停止並等待確認前可以連續發送多個分組。由於發送方不必每發送一個分組就停下來等待確認,所有此協議可以加速數據傳輸
                .threshold = 3; #上次檢查.window數量的多少,才代表後端是健康的
        }
}

backend web2 {
        .host = "192.168.11.102";
        .port = "80";
        .probe = {
                .url = "/";
                .interval = 5s;
                .timeout = 1s;
                .window = 5;
                .threshold = 3;
        }
}

sub vcl_init {
     new bar = directors.round_robin(); #定義調度算法:random/dns
     bar.add_backend(web1);
     bar.add_backend(web2);
}
sub vcl_recv {
    set req.backend_hint = bar.backend();  #把流量轉發給directors
    return(pass);  #設置不進行緩存
}

(5)啓動與停止
varnishd -f /usr/local/varnish/default.vcl -a 192.168.11.21:8080
pkill varnish

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章