NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落

關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 153344

    累積人氣

  • 44

    今日人氣

    0

    訂閱人氣

[終篇:伺服器負載/高可用性配置] 使用高速緩存Varnish Cache 加速網頁存取及回應 By Neil


實作開始 

先來搞定後端Webite  Cent201/Cent202  Apache  & Nginx 

在Apache & Nginx 在前端 varnish 緩存狀態下配置可獲取後端真實IP的設定

Cent201[Apache 在前篇介紹Nginx Proxy 敘述過在此僅秀出配置]

 [TIP]

安裝擴充模組: mod_rpaf

 yum -y install mod_rpaf

 插入module mod_rapf 

vi  /etc/http/conf/http.conf

LoadModule rpaf_module modules/mod_rpaf-2.0.so

-------

<VirtualHost 192.168.11.201:80>
ServerAdmin near@outlook.com
DocumentRoot /rsync
ServerName proxy204.neil0918u.com
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 192.168.11.201 192.168.11.204  #指定前端Proxy IP:192.168.11.204
RPAFheader X-Forwarded-For
ErrorLog  pink13.example.com-error_log
CustomLog pink13.example.com-access_log common
</VirtualHost>
 
Cent202[ Nginx 1.5.4] 虛擬機配置檔案如下

server {
    listen   80;
    server_name proxy204.neil0918u.com;
    charset utf-8;
location / {

        set_real_ip_from 192.168.11.0/24;
        set_real_ip_from 192.168.11.204;   #指定前端proxy ip : 192.168.11.204
        real_ip_header X-Real-IP;
        root   /rsync;
        index index.php index.htm index.html;
        if (-f $request_filename) {
                        expires 30d;
                        break;
        }
        if (!-e $request_filename) {
                        rewrite ^(.+)$ /index.php?q=$1 last;
        }
    }
    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9999;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /rsync$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }
    location ~ /.ht {
        deny  all;
    }
}

[配置Varnish Proxy 相關配置]

參考Varnish官方資料得知SLB(Server Load Blance) 模式具"round-robin" & "client DR.weight"兩種

本例先以Client DR 定義權重配置為例

vi /usr/local/varnish/etc/varnish/vc1.conf  

backend webserv1 {
       .host = "192.168.11.201";     #定義webserv1 第一台web (.201)
       .port = "80";
       .probe = {
                .url = "/index.html";     #偵測後端伺服器健康(Live)相關配置
                .interval = 5s;
                .timeout = 1 s;
                .window = 5;
                .threshold = 3;
                }
}

backend webserv2 {                   #定義webserv2 第二台web (.202)
 .host = "192.168.11.202";
 .port = "80";
 .probe = {
           .url = "/index.html";
           .interval = 5s;
           .timeout = 1 s;
           .window = 5;
           .threshold = 3;
  }
 


配置Client Director 資訊

director slb2 client {            #定義director 容器 slb2 ,欲使用權重值分配機器處理比重 

{
  .backend = webserv1;     #指定webserv1 權重100 , .weight value 越高分配優先權機率越高
  .weight = 100;
}

{
  .backend = webserv2;    #指定webserv2 權重200
  .weight = 200;
}

}
接者我們需要在vcl_recv {..} 宣告式加入以下配置 

 
sub vcl_recv {                     #2.1.4 or later version

set req.backend = slb2;
   /* Load balance by URL */
   set client.identity = req.url;
   /* Load balance by client IP, this is the default */
   set client.identity = client.ip;
   /* Load balance by user agent */
   set client.identity = req.http.user-agent;
 
remove req.http.X-real-ip;                      #這部分配置與前述Nginx 獲取真實IP配置
set req.http.X-real-ip = client.ip;
set req.http.X-Forwarded-For = client.ip;

.......

if (!req.backend.healthy) {                    #後端WebSite健康偵測
        unset req.http.Cookie;
    }

    if (req.http.host ~ "^(.*).neil0918u.com") {    #任何neil0918u.com 相關域名皆進行快取動作
                                                                     並指定其backend = slb 2 (Director)
        set req.backend = slb2;
    }
 

}



[測試Wesite]負載平衡使用不同Client 端IP 測試

打開瀏覽器瀏覽WebSite 頁面 http://proxy204.neil0918u.com

延續前幾篇建立範例網頁: 我將.202 (Nginx)網頁做一個小註記在網頁左上角(Nginx 1.5.4)將其優先權

(Weight) 調高 
為辨識不同WebSite 測試 , 原網頁 Apache .201(並無Nginx 1.5.4註記) 經測試使用不同IP

瀏覽(會依權重比重) 分配規劃後端處理Web Site loading 以達到Server Load blancing(SLB目標)


[測試Wesite]HA高可用性容錯測試,接下來我們將測試 Varnish HA (Failover) 測試

適用於Web Site 服務希望處理7x24 不停機服務產業性質

在實作之前我們預計將Loadblance 機制由原先Client Director 負載平衡,調換為round-robin(輪巡)

更替由varnish 演算法分配決定後端流量平衡(很簡單,只有把上述配置先註解)

 替換為以下,就可以變更為round-robin 輪巡負載平衡模式

director slb  round-robin  {
   {
      .backend = webserv1;
   }
   {
      .backend = webserv2;
   }
 }
 

  vcl_recv {..}  內容更換以下配置


[最終測試: 測試HA 容錯轉移]

模擬情境: 假設Nginx (.202 整台燒毀)完全不能運作(一點也不誇張之前"是方電訊"機房燒毀很慘)

但.201 (Apache) 這台還存活者(如果火燒尚須異地備援防範卡實在) 


簡易測試: 將nginx 機器停用web 服務 , 測試連線proxy204.neil0918u.com 是否

               亦可連線正常!?無阻礙(若HA 正常Apache 將接手nginx 工作繼續營運)

 [下圖中: 已經網頁正確導向Apache (Cent201)處理,將不再派送到Deadth(Cent202)]

 進而做到HA 高可用性配置


另外本人最近參考一篇文章決定蠻值得深思探討工具CloudFlare 

探討CDN 開源應用,一般交由電信業租貸花費金額不斐,令翻閱內地技術文章發現

使用Bind,GeoIP,Varnish,nginx ...可以建置成一個小型CDN 架構

CLoudFlare 是完全開源CDN代理架構(網域名交由CloudFlare代管) 所以任何Record 在其

平台上配置,值得深入探討(較適合跨國+大流量營運商務網站)效能改善解決方案



勘誤文章一次:20130929 修正錯別字與內容部分敘述

另整理近三篇(始)(中)(終)三篇varnish 相關設定檔做日後操作之備忘電子檔,並放置在本人SkyDrive

請點選我 供讀者參考

相簿設定
標籤設定
相簿狀態