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

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

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


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

  • 153344

    累積人氣

  • 44

    今日人氣

    0

    訂閱人氣

Nginx Reverse Proxy + Keepalived 實現網站負載平衡兼具容錯轉移高速網站架構建By Neil

 Lab 開始
(1.) 先來搞定 .201 , 202 兩台 Web Site 虛擬主機配置如下 

     Nginx Version 1.5.1 安裝過程略過(直接切入組態設定參考)

     vi /etc/nginx/conf.d/proxy204.conf  

   
server {
    listen   80;                          #配置虛擬主機支援HTML l& PHP
    server_name proxy204.neil0918u.com;
    charset utf-8;
    keepalive_timeout  60;
location / {
        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;
    }
}


-------------------------


Then 我們試者在/rsync 目錄下新增首頁檔案: index.php 
 
cd /rsync   # /rsync 掛載 是由局網內另一台"GlusterFS"分享出來網路磁碟

echo "Neil Angel 小天 ! We are the world(.201)" >> index.php

/etc/init.d/nginx restart

chkconfig nginx on

chkconfig php-fpm on

 check .201 .202 瀏覽虛擬主機正常運作如預期顯示如下 #請自行對應好DNS記錄
 對應

由於我們等會操作為分辨是否Nginx Proxy 真的做到負載平衡驗證

故我們將.201 index 優先設定為: index.php  .202 index 優先設定:

default.php

並寫入以下資訊到這兩個檔案

echo "Neil Angel 小天 ! We are the world(.201)" >> index.php    #.201 首頁定義

echo "
Neil Angel 小天 ! We are the world(.202)" >> default.php  #.202 首頁定義

(2.) Then 接下搞定前端兩台Nginx Proxy (Reverse) 兩台設定均一致如下(以.204為例)

       /etc/nginx/conf.d/options.conf    #配置有關nginx proxy 本身組態    

      
 /etc/nginx/conf.d/proxy204.conf   #配置負載平衡機群相關定義  


vi  /etc/nginx/conf.d/options.conf   #主要包含一些Proxy Cache 相關設定 

 proxy_buffering           on;
  proxy_cache_min_uses       3;
  proxy_cache_path          /usr/local/nginx/proxy_temp/ levels=1:2 keys_zone=cache:10m        
 inactive=10m max_size=1000M;
  proxy_cache_valid         any 10m;
  proxy_ignore_client_abort off;
  proxy_intercept_errors    on;
  proxy_next_upstream       error timeout invalid_header;
  proxy_redirect            off;
  proxy_set_header          X-Forwarded-For $remote_addr;
  proxy_connect_timeout     60;
  proxy_send_timeout        60;
  proxy_read_timeout        60;
  proxy_headers_hash_max_size 51200;
  proxy_headers_hash_bucket_size 6400;
   

 /etc/nginx/conf.d/proxy204.conf  #使用upstream 模組配置機群負載平衡

 
upstream  lvs_web_site_pool {        #配置Pool lvs_web_site_pool相關LB設定
server 192.168.11.201:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.11.202:80 weight=3 max_fails=2 fail_timeout=30s;
}

server

{

listen 80;
server_name proxy204.neil0918u.com;     #定義要代理Web主機域名:80
location /

{
#後端伺服器收到502,504錯誤訊息轉發pool中其他live機器(Fail OVER)
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://lvs_web_site_pool; 
proxy_set_header Host proxy204.neil0918u.com;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/proxy204.neil0918u.com.log;   #log紀錄檔
}
 
再新增一組負責代理網站SSL 服務配置: https://proxy204.neil0918u.com

listen 443 ssl;
server_name proxy204.neil0918u.com;
    ssl_certificate     newcert.cert;  #建立憑證與私鑰前篇提到,略過建                                         立過程
    ssl_certificate_key private.key;
    access_log      ssl-access.log;
    error_log       ssl-error.log;
    keepalive_timeout  60;

location /

{
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://lvs_web_site_pool;
proxy_set_header Host proxy204.neil0918u.com;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect    off;
}


最後在配置一組cache 靜態物件之設定
 
location ~* .(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
        proxy_buffering on;
        proxy_cache_valid 200 120m;
       expires 30d;
        }

}



.204 & .205 請照上述步驟配置完成後確認語法組態無誤,重新啟動nginx生校

該設定 
備註: 本人僅在.204 在台nginx 使用手動編譯安裝(其他台階用RPM安

裝)


 故測試nginx 語法有誤?  /usr/local/nginx/sbin/nginx -t 

                       啟動Nginx: /usr/local/nginx/sbin/nginx

 
  目前我方Nginx Proxy 與 Web Site 皆配置完成(只剩keepalived 安裝)

(3.)  最終配置: 為兩台nginx proxy 裝上keepalived 元件實現高可用性

      yum -y install keepalived   #.203,204都需安裝

先編輯.204 keepalived 配置檔如下

vi /etc/keepalived/keepalived.conf

global_defs {
   router_id nginx_proxy_ha
}
vrrp_sync_group Nginx_Proxy {
   group {
VI_204
   }
}
vrrp_instance VI_204 {
    state MASTER
    interface eth0     #監聽介面eth0
    virtual_router_id 61
    priority 150     #優先權配置150
    advert_int 1

authentication {
auth_type PASS      #驗證Pass
auth_pass 7533967
    }
virtual_ipaddress {
192.168.11.100   #VIP 本Lab定義為 192.168.11.100 為對外存取網站虛擬IP(請將DNS改指向此                    IP)
}
}


Then 配置.203 Backup 角色


global_defs {
   router_id nginx_proxy_ha
}
vrrp_sync_group Nginx_Proxy {
   group {
VI_204
   }
}
vrrp_instance VI_204 {
    state BACKUP         #定義為backup: 當master掛點後,backup會接手Master提供服務
    interface eth0
    virtual_router_id 61
    priority 100
    advert_int 1

authentication {
auth_type PASS
auth_pass 7533967
    }
virtual_ipaddress {
192.168.11.100
}
}

[最終驗證]: 

使用瀏覽器檢視http:// proxy204.neil0918u.com  &

https://proxy204.neil0918u.com 

兩個網站是否順利透過nginx proxy 正確導向後端真實伺服器(.201,.202)?

並會切換
達成Loadblance 流量平衡目的?

初次連線則導向.201 


https:ssl



後續連線連線則導向.202 


https:ssl

測試高可用性Keepalived 移轉 摧毀.204(Master)連線  查看是否繼續運作

.203 log 檢視如下(由Backup 轉換為 Master State)



繼續不間段提供服務(容錯服務順利移轉),本Lab到此告一段落

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