nginx實現負載均衡

一.測試環境html

        OS: rhel6nginx

        Lib1: 192.168.20.106   A服務器算法

        Lib2: 192.168.20.107   B服務器vim

        Lib3: 192.168.20.108   C服務器後端

        部署: A服務器作爲主服務器,域名直接解析到A服務器(192.168.20.106)上,由A服務器負載均衡到B服務器(192.168.20.107)與C服務器(192.168.20.108)上。緩存

        upstream是Nginx的HTTP Upstream模塊,這個模塊經過一個簡單方法來實如今輪詢和客戶端IP之間的後端服務器負荷平衡。默認是以輪詢的方式實現負載均衡,這種方式中,每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。服務器

upstream支持的負載均衡算法:session

          Nginx的負載均衡模塊目前支持4種調度算法,下面分別進行介紹,其中後兩項屬於第三方調度算法負載均衡

          1.輪詢(默認) 每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端的某個服務器宕機,故障系統被自動剔除,使用戶的訪問不受影響,weight 指定輪詢的權值  weight值越大,分配的訪問的機率越高 主要用於後端的每一個服務器性能不均的狀況下ide

          2.ip_hash:每一個請求按訪問Ip的hash結果分配,這樣來自同一個Ip的訪客固定訪問到一個後端服務器,有效的解決了動態網頁存在的session共享問題

          3.fair:這是個比上面兩個更加智能的負載均衡算法,此算法能夠依據頁面的大小和加載時間長短智能的進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx自己不支持fair的,若是須要使用這種調度算法,必須下載Nginx的upstream_fair模塊

           4.url_hash:按訪問的url的hash結果來分配請求,使每一個url定向到同一個後端服務器,能夠進一步提升後端緩存服務器的效率,Nginx自己是不支持url_hash的,若是須要使用這種調度算法,必須安裝Nginx的hash軟件包

upstream支持的狀態參數在HTTP Upstream模塊中,能夠經過server指令來指定後端服務器的Ip地址和端口,同時還能夠設定每一個後端服務器

在負載均衡調度中的狀態,經常使用的狀態有:

           down: 表示當前的server暫時不參與負載均衡

           backup: 預留的備份機器,當其餘全部的非backup機器出現故障或忙碌時,纔會請求backup的後端主機,所以

這臺服務器的壓力最小

           max_fails: 容許請求失敗的次數,默認爲1,當超過最大的次數時,返回proxy_next_upstream模塊定義的錯誤

           fail_timeout: 在經歷max_fails次失敗後,暫停服務的時間,     

PS:      當負載調度算法爲ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。

           max_fails能夠和fail_timeout參數一塊兒使用,能夠進行健康狀態檢查。

二.以輪詢算法配置nginx負載均衡

     1.這裏關於nginx的安裝再也不作贅述

     2.# vim /etc/nginx/nginx.conf    ##在A服務器上進行配置

                upstream 配置在server段外

                upstream backend {

                           server 192.168.20.107 weight=2 max_fails=2 fail_timeout=2

                           server 192.168.20.108 weight=2 max_fails=2 fail_timeout=2 

                   }

                 location / {                         

                           proxy_pass  http://backend;

                           proxy_set_header X-Real-IP $remote_addr;

                   }

      3.配置域名,修改hosts文件在最後一行添加  (宿主機)

               192.168.20.106   www.luochen.com

      4.修改server段server_name (A服務器)

                server_name  www.luochen.com

      5.# service nginx restart

      6.修改B,C服務器的配置文件在日誌文件中顯示真實的客戶端ip(在B,C服務器上操做)

                在server段內添加:

                       set_real_ip_from 192.168.20.0/24;

                       real_ip_header   X-Real-IP;    ##在編譯時須要安裝http_realip_module模塊 

                       real_ip_recursive on;

       7.修改配置文件後重啓下服務

           # service nginx restart

       8.在宿主機上進行測試,看每次訪問是否是以輪詢的方式響應

       9.查看B,C服務器上的日誌文件

           # tail /var/log/nginx/access.log   ##若是ip是宿主機ip則配置成功

三.以ip_hash算法配置nginx負載均衡   

     1.# vim /etc/nginx/nginx.conf    ##在A服務器上進行配置

                upstream 配置在server段外

                upstream backend { 

                           ip_hash;                 ###與上面的配置同樣的只須要在這裏加上這一行便可

                           server 192.168.20.107 weight=2 max_fails=2 fail_timeout=2

                           server 192.168.20.108 weight=2 max_fails=2 fail_timeout=2 

                   }

                 location / {                         

                           proxy_pass  http://backend;

                           proxy_set_header X-Real-IP $remote_addr;

                   }

      2.配置域名,修改hosts文件在最後一行添加  (宿主機)

               192.168.20.106   www.luochen.com

      3.修改server段server_name (A服務器)

                server_name  www.luochen.com

      4.# service nginx restart

      5.修改B,C服務器的配置文件在日誌文件中顯示真實的客戶端ip(在B,C服務器上操做)

                在server段內添加:

                       set_real_ip_from 192.168.20.0/24;

                       real_ip_header   X-Real-IP;    ##在編譯時須要安裝http_realip_module模塊 

                       real_ip_recursive on;

       6.修改配置文件後重啓下服務    

           # service nginx restart

       7.在宿主機上進行測試,看每次訪問是否是以輪詢的方式響應

       8.查看B,C服務器上的日誌文件

           # tail /var/log/nginx/access.log   ##若是ip是宿主機ip則配置成功

PS: 使用ip_hash後會一直用同一臺服務器來響應同一ip的請求

四.猜測下是否有這樣的狀況,當全部的後端服務器都宕機了,該怎麼響應用戶???

     1.配置backup服務器   (A服務器)

        upstream backend {

                       server 192.168.1.111 weight=2 max_fails=2 fail_timeout=2;

                       server 192.168.1.113 weight=2 max_fails=2 fail_timeout=2;

                       server 127.0.0.1:8080 backup;       ###關鍵是這一行

           }

      2.修改配置文件添加一個虛擬主機

          server {

                        listen 8080;

                        server_name localhost;

                        root html;

                        index index.html index.htm;

           }

       3.# service nginx restart

       4.# service nginx stop  (B,C服務器)

      5.再在宿主機上訪問測試看看  

相關文章
相關標籤/搜索