站長資訊網
        最全最豐富的資訊網站

        Linux中的varnish服務解析

        一、varinish簡介

        Varnish是一款高性能的開源HTTP加速器,他的作者Poul-Henning Kamp是FreeBSD的內核開發者之一。挪威最大的在線報紙 Verdens Gang 使用3臺Varnish代替了原來的12臺Squid,性能比以前更好。

        Varnish與一般服務器軟件類似,就是一個web緩存代理服務器,分為master(management)進程和child(worker,主要做cache的工作)進程。master進程讀入命令,進行一些初始化,然后fork并監控child進程。child進程分配若干線程進行工作,主要包括一些管理線程和很多woker線程。

        Management進程主要實現應用新的配置、編譯VCL、監控varnish、初始化varnish以及提供一個命令行接口等。 Management進程會每隔幾秒鐘探測一下Child進程以判斷其是否正常運行,如果在指定的時長內未得到Child進程的回 應,Management將會重啟此Child進程。

        Child進程包含多種類型的線程,常見的如:
        Acceptor線程:接收新的連接請求并響應;
        Worker線程:child進程會為每個會話啟動一個worker線程,因此,在高并發的場景中可能會出現數百個worker線程甚至更多;
        Expiry線程:從緩存中清理過期內容;

        Varnish依賴“工作區(workspace)”以降低線程在申請或修改內存時出現競爭的可能性。在varnish內部有多種不同的工作區,其中最關鍵的當屬用于管理會話數據的session工作區。

        二、VCL簡介

        Varnish Configuration Language (VCL)是varnish配置緩存策略的工具,它是一種基于“域”(domain specific)的簡單編程語言,它支持有限的算術運算和邏輯運算操作、允許使用正則表達式進行字符串匹配、允許用戶使用set自定義變量、支持if判 斷語句,也有內置的函數和變量等。使用VCL編寫的緩存策略通常保存至.vcl文件中,其需要編譯成二進制的格式后才能由varnish調用。

        Linux中的varnish服務解析

        VCL處理過程大致分為如下幾個步驟:

        (1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass 或
        Pipe,或者進入 Lookup(本地查詢)。
        (2)Lookup 狀態,進入此狀態后,會在 hash 表中查找數據,若找到,則進入 Hit 狀態,否則進
        入 miss 狀態。
        (3)Pass 狀態,在此狀態下,會進入后端請求,即進入 fetch 狀態。
        (4)Fetch 狀態,在 Fetch 狀態下,對請求進行后端的獲取,發送請求,獲得數據,并進行本地
        的存儲。
        (5)Deliver 狀態, 將獲取到的數據發送給客戶端,然后完成本次請求。

        三、varnish的安裝

        1、server1中:

        1.安裝varnish

        yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y

        Linux中的varnish服務解析

        2.更改varnish全局配置

        vim /etc/sysconfig/varnish

        VARNISH_LISTEN_PORT=80 #更改varnish服務端口為80

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        3.更改varnish配置文件

        vim /etc/varnish/default.vcl

        backend default { #配置一個后端服務器
        .host = "172.25.4.2"; #更改訪問IP為172.25.4.2
        .port = "80";
        }

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        4.重新加載服務

        /etc/init.d/varnish reload

        Linux中的varnish服務解析

        2、server2中:

        1.安裝apache

        yum install httpd -y

        Linux中的varnish服務解析

        /etc/init.d/httpd start

        Linux中的varnish服務解析

        2.制作index.html

        cd /var/www/html

        vim index.html

        server2

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        3.重新加載服務

        /etc/init.d/httpd reload

        Linux中的varnish服務解析

        3、測試:

        物理機中打開firefox,訪問172.25.4.1,看到server2即配置成功

        Linux中的varnish服務解析

        四、測試緩存命中情況

        1、server1中:

        1.更改配置文件

        vim /etc/varnish/default.vcl

        添加
        sub vcl_deliver { #查看緩存命中情況
        if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT from westos cache";
        }
        else {
        set resp.http.X-Cache = "MISS from westos cache";
        }
        return (deliver);
        }

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        2.重新加載服務

        /etc/init.d/varnish reload

        Linux中的varnish服務解析

        2、測試:

        物理機中:

        curl -I 172.25.4.1 第一次顯示 MISS from westos cache 緩存中沒有,前往后端獲取

        Linux中的varnish服務解析

        curl -I 172.25.4.1 第二次顯示 HIT from westos cache 緩存中直接獲取

        Linux中的varnish服務解析

        3、通過 varnishadm 手動清除緩存

        varnishadm ban.url .*$ #清除所有緩存

        varnishadm ban.url /index.html #清除 index.html 頁面緩存

        varnishadm ban.url /admin/$ #清除 admin 目錄緩存

        測試:

        1.測試清除所有緩存

        物理機中curl -I 172.25.4.1兩次,使172.25.4.1緩存到cache中

        Linux中的varnish服務解析

        server1中執行 varnishadm ban.url .*$ 清除所有緩存

        Linux中的varnish服務解析

        物理機中curl -I 172.25.4.1 ,發現顯示MISS from westos cache

        Linux中的varnish服務解析

        2.測試清除 index.html 頁面緩存

        物理機中curl -I 172.25.4.1/index.html兩次,使172.25.4.1/index.html緩存到cache中

        Linux中的varnish服務解析

        server1中執行 varnishadm ban.url /index.html 清除 index.html 頁面緩存

        Linux中的varnish服務解析

        物理機中curl -I 172.25.4.1/index.html 發現顯示MISS from westos cache

        Linux中的varnish服務解析

        注意:

        此時如果cache中有172.25.4.1的緩存信息,使用curl -I 172.25.4.1訪問時會顯示HIT from westos cache,這是因為雖然curl -I 172.25.4.1

        和curl -I 172.25.4.1/index.html訪問得到的結果一致,但是緩存到cache中的地址不同。cache緩存的是用戶訪問的url

        拓展:

        curl -I 172.25.4.1訪問的結果中Age表示緩存時間,默認為120s后自動清除,可在/etc/sysconfig/varnish中修改

        五、定義多個不同域名站點的后端服務器

        1、server3中:

        1.安裝acpache

        yum install httpd -y

        Linux中的varnish服務解析

        /etc/init.d/httpd start

        Linux中的varnish服務解析

        2.制作index.html

        cd /var/www/html

        vim index.html

        www.linux.org

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        3.重新加載服務

        /etc/init.d/httpd reload

        Linux中的varnish服務解析

        2、server2中:

        1.更改index.html

        cd /var/www/html

        vim index.html

        www.westos.org

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        2.重新加載服務

        /etc/init.d/httpd reload

        Linux中的varnish服務解析

        3、物理機中:

        1.添加本地解析

        vim /etc/hosts

        172.25.4.1 www.westos.org www.linux.org westos.org

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        4、server1中:

        1.更改配置文件

        vim /etc/varnish/default.vcl

        backend web1 {
        .host = "172.25.4.2";
        .port = "80";
        }

        backend web2 {
        .host = "172.25.4.3";
        .port = "80";
        }

        #當訪問 westos.org 域名時,自動訪問 www.westos.org 域名

        #當訪問 www.westos.org 域名時從 web1 上取數據,訪問 www.linux.org 域名時到 web2 取數據,訪問其他頁面報錯

        sub vcl_recv {
        if (req.http.host ~ "^(www.)westos.org") {
        set req.http.host = "www.westos.org";
        set req.backend = web1;
        } elsif (req.http.host ~ "^www.linux.org") {
        set req.backend = web2;
        } else {error 404 "westos cache";
        }
        }

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        2.重新加載服務

        /etc/init.d/varnish reload

        Linux中的varnish服務解析

        5、測試:

        物理機中:

        curl www.westos.org

        curl westos.org

        發現兩者得到的結果相同,均為server2中相應的index.html文件內容

        curl www.linux.org

        得到server3中相應的index.html文件內容

        Linux中的varnish服務解析

        六、定義負載均衡

        1、server3中:

        1.更改apache配置文件

        vim /etc/httpd/conf/httpd.conf

        打開

        NameVirtualHost *:80

        添加

        DocumentRoot /var/www/html
        ServerName www.linux.org


        DocumentRoot /www1
        ServerName www.westos.org

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        2.建立/www1/index.html

        mkdir /www1

        vim /www1/index.html

        www.westos.org-server3

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        3.重新加載服務

        /etc/init.d/httpd reload

        Linux中的varnish服務解析

        4.配置本地解析

        vim /etc/hosts

        172.25.4.3 server3 www.westos.org www.linux.org

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        5.測試配置是否生效

        curl www.linux.org

        curl www.westos.org

        得到相應的index.html文件中的內容

        Linux中的varnish服務解析

        2、server1中:

        1.更改varnish配置

        vim /etc/varnish/default.vcl

        #把多個后端聚合為一個組,并檢測后端健康狀況

        director lb round-robin {
        { .backend = web1; }
        { .backend = web2; }
        }

        sub vcl_recv {
        if (req.http.host ~ "^(www.)westos.org") {
        set req.http.host = "www.westos.org";
        set req.backend = lb;
        } elsif (req.http.host ~ "^www.linux.org") {
        set req.backend = web2;
        } else {error 404 "westos cache";
        }
        }

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        2.重新加載配置

        /etc/init.d/varnish reload

        Linux中的varnish服務解析

        3、測試:

        1.物理機中:

        curl www.westos.org 得到server2中相應的index.html文件內容

        Linux中的varnish服務解析

        2.server1中:

        varnishadm ban.url .*$ 清除所有緩存

        Linux中的varnish服務解析

        3.物理機中:

        curl www.westos.org 得到server3中相應的index.html文件內容

        Linux中的varnish服務解析

        注意:

        還可以更改server1中varnish配置文件,添加return (pass); 使得varnish緩存功能失效,客戶端直接去后端抓取內容,可以獲得更好的

        測試對比效果

        4、server1中:

        1.更改varnish配置

        vim /etc/varnish/default.vcl

        sub vcl_recv {
        if (req.http.host ~ "^(www.)westos.org") {
        set req.http.host = "www.westos.org";
        set req.backend = lb;
        return (pass); #varnish緩存功能失效,客戶端直接去后端抓取內容
        } elsif (req.http.host ~ "^www.linux.org") {
        set req.backend = web2;
        } else {error 404 "westos cache";
        }
        }

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        2.重新加載配置

        /etc/init.d/varnish reload

        Linux中的varnish服務解析

        5、測試:

        物理機中:

        curl www.westos.org

        curl www.westos.org

        curl www.westos.org

        curl www.westos.org

        發現循環得到server2和server3相應的index.html內容

        Linux中的varnish服務解析

        此時若server2的httpd服務關閉curl會一直讀取server3相應的index.html內容而不會報錯,這是因為varnish擁有自動的健康檢查功能,

        若開啟server2的httpd服務,使用curl又能夠循環讀取到server2和server3相應的index.html內容

        server2中:

        /etc/init.d/httpd stop

        Linux中的varnish服務解析

        物理機中:

        curl www.westos.org

        curl www.westos.org

        發現一直得到server3相應的index.html內容

        Linux中的varnish服務解析

        server2中:

        /etc/init.d/httpd start

        Linux中的varnish服務解析

        物理機中:

        curl www.westos.org

        curl www.westos.org

        curl www.westos.org

        curl www.westos.org

        發現循環得到server2和server3相應的index.html內容

        Linux中的varnish服務解析

        七、varnish全局配置文件中的參數

        1、NFILES #所能夠打開的最大文件數

        server1中:

        1.查看內核允許的打開文件數的最大值

        sysctl -a | grep file

        Linux中的varnish服務解析

        2.更改varnish配置文件

        vim /etc/sysconfig/varnish

        更改NFILES數值,小于內核允許最大值

        NFILES=66655

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        3.更改系統限制文件

        vim /etc/security/limits.conf

        varnish nofile 66656

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        2、MEMLOCK #用多大內存空間保存日志信息

        server1中:

        1.更改varnish用戶為可交互登陸模式,切換到varnish用戶

        usermod -s /bin/bash varnish

        su – varnish

        Linux中的varnish服務解析

        2.查看系統允許的最大值

        ulimit -l

        Linux中的varnish服務解析

        *拓展:

        ulimit -a #查看所有系統限制

        Linux中的varnish服務解析

        3.更改系統限制文件

        logout

        vim /etc/security/limits.conf

        varnish memlock 82000

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        3、NPROCS #進程核心轉儲所使用的內存空間,unlimited表示無上限

        server1中:

        1.切換到varnish用戶

        su – varnish

        Linux中的varnish服務解析

        2.查看系統允許的最大值

        ulimit -u

        Linux中的varnish服務解析

        3.更改系統限制文件

        logout

        vim /etc/security/limits.conf

        varnish nproc unlimited

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        4.還原varnish用戶登陸設置

        usermod -s /sbin/nologin varnish

        Linux中的varnish服務解析

        注意:/etc/security/limits.conf 與 /etc/sysconfig/varnish 配置文件均是即改即生效

        拓展:

        VARNISH_TTL=120 #聯系后端服務器的超時時間

        VARNISH_STORAGE_SIZE=1G #儲存的文件的大小

        VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin #基于文件存儲時的文件路徑

        Linux中的varnish服務解析

        varnish與squid的區別

        varnish和squid在中小規模的應用上,varnish足夠輕量級,足夠好用,但是在巨大的并發請求來說,單個varnish所能夠承載的并發 訪問量大概在5000個連接請求左右,超出5000個可能就就得不穩定了;而在這里squid就能表現出良好的性能了,并且squid擁有鄰居功能,因此在大規模的企業級應用中仍然是以squid居多,而在中小規模的自己公司的反向代理緩存中varnish居多

        8、CDN推送平臺

        1、server1:

        1.安裝apache服務

        yum install httpd -y

        Linux中的varnish服務解析

        2.更改apache服務配置

        避免與varnish服務端口沖突

        vim /etc/httpd/conf/httpd.conf

        Listen 8080

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        3.下載bansys.zip包,安裝解壓縮命令

        yum install unzip -y

        unzip bansys.zip -d /var/www/html

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        4.將解壓出來的目錄中的文件移動至/var/www/html

        cd /var/www/html

        cd bansys/

        mv * ..

        Linux中的varnish服務解析

        5.安裝php服務

        yum install php -y

        Linux中的varnish服務解析

        6.開啟apache服務

        /etc/init.d/httpd start

        Linux中的varnish服務解析

        7.更改php服務配置文件

        cd /var/www/html

        vim config.php

        刪除其余內容,保留內容如下:

        //varnish主機列表
        //可定義多個主機列表
        $var_group1 = array(
        'host' => array('172.25.4.1'),
        'port' => '80',
        );
        //varnish群組定義
        //對主機列表進行綁定
        $VAR_CLUSTER = array(
        'www.westos.org' => $var_group1,
        );
        //varnish版本
        //2.x和3.x推送命令不一樣
        $VAR_VERSION = "3";

        >

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        注意:

        bansys 有兩種工作模式,分別是:telnet 和 http 模式。

        telnet 模式需要關閉 varnish 服務管理端口的驗證,注釋掉/etc/sysconfig/varnish 文件中的

        “ -S ${VARNISH_SECRET_FILE}”這行,重啟 varnish 服務即可

        如果是 http 模式需要對 varnish 做以下設置(本次試驗采用http模式推送)

        8.更改varnish配置文件

        vim /etc/varnish/default.vcl

        #設置訪問控制

        acl westos {
        "127.0.0.1";
        "172.25.4.0"/24;
        }

        在sub vcl_recv {} 中添加

        if (req.request == "BAN") {
        if (!client.ip ~ westos) {
        error 405 "Not allowed.";
        }
        ban("req.url ~ " + req.url);
        error 200 "ban added";
        }

        刪除 return (pass);

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        9.重新加載varnish服務

        /etc/init.d/varnish reload

        Linux中的varnish服務解析

        2、測試:

        物理機中:

        用firefox訪問www.westos.org

        打開另外一個網頁,用firefox訪問 172.25.4.1:8080

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        推送模式:HTTP

        CDN群組:www.westos.org

        推送內容:

        /index.html #文件

        /images/* #目錄

        本次試驗推送文件 /index.html

        推送一次,再訪問172.25.4.1:8080一次,發現循環讀取到server2和server3相應的index.html內容

        Linux中的varnish服務解析

        Linux中的varnish服務解析

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品第12页| 女人香蕉久久**毛片精品| 东京热TOKYO综合久久精品| 热久久国产欧美一区二区精品| 国产大片91精品免费观看不卡| 欧美精品免费专区在线观看| 99热精品毛片全部国产无缓冲| WWW国产精品内射老师| 亚洲国产精品无码专区| 日韩精品无码久久一区二区三| 国产精品 猎奇 另类视频| 国产大片91精品免费观看不卡| 久久精品中文闷骚内射| 亚洲精品网站在线观看不卡无广告| 国产亚洲午夜高清国产拍精品| 欧美一区二区精品| 91精品视频网站| 国精品无码一区二区三区左线| 亚洲综合精品香蕉久久网| 亚洲av无码成人精品区| 久久99精品久久久久久9蜜桃| 国产精品夜色视频一级区 | 国产成人精品日本亚洲| 日韩人妻精品一区二区三区视频 | 亚洲AV无码之日韩精品| 韩国三级中文字幕hd久久精品| 国产高清国内精品福利99久久| 久久久国产精品福利免费| 69SEX久久精品国产麻豆| 国产国拍亚洲精品mv在线观看| 精品一区二区三区在线观看视频| 无码人妻精品一区二区三区东京热 | 亚洲一区爱区精品无码 | 欧美精品国产日韩综合在线| 免费欧美精品a在线| 亚洲精品免费视频| 国产VA免费精品高清在线| 办公室久久精品| 国产亚洲精品拍拍拍拍拍| 精品无码一级毛片免费视频观看| 国产一区二区三区欧美精品|