Varnish(三)設定後端主機

十五十六發表於2018-09-19

設定後端主機

在這裡插入圖片描述

後端2臺web伺服器已經設定好了

使用輪詢演算法排程

Varnish定義設定輪詢後端主機示例

[root@localhost ~]# cat /etc/varnish/default.vcl
vcl 4.0;
import directors;
backend server1 {
    .host = "192.168.253.129";
    .port = "80";
}

backend server2 {
    .host = "192.168.253.158";
    .port = "80";
}

sub vcl_init{
    new  RR = directors.round_robin();  ##輪詢演算法
    RR.add_backend(server1);
    RR.add_backend(server2);
}


sub vcl_recv {				
    set req.backend_hint=RR.backend();
}

sub vcl_backend_response {
}

sub vcl_deliver {
}

重新裝在配置檔案,因為我們訪問一次之後就回產生快取第二次訪問的時候直接從快取命中的所以看不出效果。所以先請求一次。然後再ban掉再請求一次。看是否有輪詢的效果在這裡插入圖片描述
然後ban掉
在這裡插入圖片描述
最後再次請求
在這裡插入圖片描述
我們可以看到第一次請求是分配到192.168.253.129上的,第二個請求則是分配到192.168.253.158

動靜分離

Varnish定義設定後端主機實現動靜分離示例

[root@localhost ~]# grep -Ev "#|^$" /etc/varnish/default.vcl
vcl 4.0;
backend default {
    .host = "192.168.253.129";
    .port = "80";
}
backend appsrv {
    .host = "192.168.253.158";
    .port = "80";
}
sub vcl_recv {				
    if (req.url ~ "(?i)\.php$") { 
        set req.backend_hint = appsrv;
    } else {
        set req.backend_hint = default;
    }		
}
sub vcl_backend_response {
}
sub vcl_deliver {
}

重新裝載配置檔案後
在這裡插入圖片描述

基於cookie的會話保持

[root@localhost ~]# cat /etc/varnish/default.vcl
vcl 4.0;
import directors;
backend server1 {
    .host = "192.168.253.129";
    .port = "80";
}

backend server2 {
    .host = "192.168.253.158";
    .port = "80";
}

sub vcl_init{
    new  H  = directors.hash();  ##隨機演算法,可以設定權重
    H.add_backend(server1,1); #權重為1
    H.add_backend(server2,1); #權重為1
}


sub vcl_recv {				
    set req.backend_hint = H.backend(req.http.cookie); #基於cookie會話保持
}

sub vcl_backend_response {
}

sub vcl_deliver {
}

重新裝載配置檔案,先訪問一次
在這裡插入圖片描述
然後ban掉快取
在這裡插入圖片描述
再次訪問
在這裡插入圖片描述

健康檢查

格式

.probe:定義健康狀態檢測方法;
	.url:檢測時要請求的URL,預設為”/"; 
	.request:探測後端主機健康狀態時所請求內容的詳細格式,定義後,它會替換.url指定的探測方式
	      例如:
		  .request = 
				"GET /index.html HTTP/1.1"
				"Host: 192.168.253.128"
				"Connection: close"
	.window:基於最近的多少次檢查來判斷其健康狀態; 
	.threshold:最近.window中定義的這麼次檢查中至有.threshhold定義的次數是成功的;
	.interval:檢測頻度; 
	.timeout:超時時長;
	.expected_response:期望的響應碼,預設為200;

示例

[root@localhost ~]# cat /etc/varnish/default.vcl
vcl 4.0;
import directors;
probe check {     #定義一個全域性的健康檢查配置
    .url = "/index.html";  #檢查的url
    .window = 5;           #基於最近5次來檢查健康狀態
    .threshold = 4;        #最近5次檢查中有4次是健康才算是健康的
    .interval = 2s;         #間隔2s
    .timeout = 1s;         #超時時間1s
}
backend server1 {
    .host = "192.168.253.129";
    .port = "80";
    .probe = check;
}

backend server2 {
    .host = "192.168.253.158";
    .port = "80";
    .probe = {     ##可以使用在前面定義的,也可以在backend內自己定義
        .url = "/index.html";
        .window = 5;
        .threshold = 5;
        .interval = 1s;
        .timeout = 1s;
    }
}

sub vcl_init{
    new  RR = directors.round_robin();  ##輪詢演算法
    RR.add_backend(server1);
    RR.add_backend(server2);
}


sub vcl_recv {				
    set req.backend_hint=RR.backend();
}

sub vcl_backend_response {
}

sub vcl_deliver {
}

重新裝載配置檔案,進入命令列介面
在這裡插入圖片描述
然後我們可以down了後面的192.168.253.158主機
再次檢視
在這裡插入圖片描述
可以看到這裡發現後端192.168.253.158主機down了

相關文章