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

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號
亚洲国产精品VA在线看黑人| 日韩一区二区视频在线观看| 亚洲精品免费视频| 91久久精品91久久性色| 尤物国精品午夜福利视频| 日韩国产成人无码av毛片| 国产精品无码素人福利免费| 亚洲高清国产拍精品熟女| 国产精品嫩草影院一二三区入口| 人妻AV一区二区三区精品| 亚洲高清国产AV拍精品青青草原| 中文字幕乱码中文乱码51精品 | 思思久久精品在热线热| A级精品国产片在线观看| 日韩精品人成在线播放| 亚洲AV无码成人精品区日韩| 日韩电影在线播放| 国产乱子伦精品视频| 欧洲精品在线观看| 国产在线拍揄自揄视精品| 99精品国产免费久久久久久下载| 国产精品色拉拉免费看| 国产精品自拍一区| 国产韩国精品一区二区三区久久| 亚洲精品福利网泷泽萝拉| 久久精品国产99久久无毒不卡| 国产精品色内内在线播放| 青青青国产精品国产精品久久久久| 97r久久精品国产99国产精| 中国国产成人精品久久| 国模精品一区二区三区| 91麻豆精品视频| 中文成人无码精品久久久不卡| 中文字幕日韩精品在线| 伊人久久综合精品无码AV专区| 日韩精品无码专区免费播放| 久久亚洲精品中文字幕无码| 国产亚洲精品不卡在线| 亚洲精品国产成人片| 国产精品人人做人人爽| 久久精品无码专区免费|