Nginx實現負載均衡

一、什麼是負載均衡

負載均衡是將負載分載分攤到多個操作單元上執行,從而提高服務的可用性和響應速度,帶給用戶更好的體驗。通過負載均衡,可以將一臺服務器的工作擴展到多臺服務器中執行,提高整個網站的負載能力。如下圖演示了負載均衡服務器的工作方式:

image.png

二、負載均衡配置

Nginx不僅可以作爲一個Web服務器或反向代理服務器,還可以通過輪詢、權重、ip_hash、第三方模塊多種方式實現負載均衡。

1.基礎配置環境:所有配置負載均衡方式的基礎環境一至

準備3臺虛擬機,並全部安裝Nginx服務器

負責均衡服務器:192.168.12.128

後端web1服務器:192.168.12.129

後端web2服務器:192.168.12.130

後端備份服務器:192.168.12.131

1)配置一般輪詢負載均衡

#配置nginx.conf文件

server {

    listen 80;

    server_name  test.ng.test;

   location / {

        proxy_pass http://web_server;

     }

}

upstream web_server {

   server 192.168.12.129;

   server 192.168.12.130;

  }

2)加權輪詢負載均衡

server {

    listen 80;

    server_name  test.ng.test;

   location / {

        proxy_pass http://web_server;

      }

    upstream web_server {

   server 192.168.12.129 weight=1 max_fails=1 fail_timeout=2;

   server 192.168.12.130 weight=8 max_fails=2 fail_timeout=2;

   server 192.168.12.131 backup;  

#當所服有務器巖機了,會自動啓用預留的備份服務器

  }        

參數說明:

weight  參數值越高則被分配到的概率越大

max_fails  允許請求失敗的次數,默認爲1

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

backup 預留的備份機器

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

測試方式:

對其他服務器做#nginx -s quit

只留back服務器,測試效果如下圖所示:

image.png

3)ip_hash負載均衡

ip_hash方式的負載均衡,是將每個請求按照訪問IP的hash結果分配,這樣可以使來自同一個IP的客戶端用戶固定訪問一臺Web服務器,有效地解決了動態網頁存在Session共享問題。

這種方式,無法保證負載均衡,建議少使用。

server {

    listen 80;

    server_name  test.ng.test;

   location / {

        proxy_pass http://web_server;

     }

}

upstream web_server {

   ip_hash; 

   server 192.168.12.129 ;

   server 192.168.12.130 ;    

   server 192.168.12.131 down;

  } 

參數說明:

down 在負載均衡時,會忽略服務器的分配;

ip_hash方式不能使用weight和backup設置。

測試運行效果:

image.png

4)利用第三方模塊

按照Web服務器的響應時間實現負載均衡,響應時間短的優先分配。

備份已安裝的Nginx

[root@Nginx ~]# cp -r /usr/local/nginx/  /usr/local/nginx_old

重新編譯安裝Nginx

https://github.com/gnosek/nginx-upstream-fair  #下載nginx-upstream-fair-master.zip

[root@Nginx src]# unzip nginx-upstream-fair-master.zip 

-bash: unzip: command not found

[root@Nginx src]# yum install unzip

[root@Nginx src]# unzip nginx-upstream-fair-master.zip 

Archive:  nginx-upstream-fair-master.zip

 creating: nginx-upstream-fair-master/

 inflating: nginx-upstream-fair-master/.gdbinit  

 inflating: nginx-upstream-fair-master/README  

 inflating: nginx-upstream-fair-master/config  

 inflating: nginx-upstream-fair-master/ngx_http_upstream_fair_module.c  

#mv nginx-upstream-fair-master  nginx-upstream-fair

[root@Nginx src]# cd nginx-1.14.2

[root@Nginx nginx-1.14.2]# ./configure \

> --prefix=/usr/local/nginx \

> --with-http_ssl_module \

> --add-module=/usr/local/src/nginx-upstream-fair

image.png

[root@Nginx nginx-1.14.2]# make 

#上述命令完成nginx和第三方模塊fair的編譯

image.png

#上述錯錯的原因是nginx版本過高,nginx-upstream-fair-master.zip模塊無法支持。使用此模塊,建設採用nginx 1.14.0以下版本或者是通過打補丁的方式,參考網址:https://www.cnblogs.com/ztlsir/p/8945043.html

編譯安裝成功如下圖所示:

image.png

配置fair方式的負載均衡

server {

  listen 80;

  server_name test.ng.test;

 location / {

    proxy_pass http://web_server;

   }

}

upstream web_server {

     server 192.168.12.129;

     server 192.168.12.130;

     server 192.168.12.131;

     fair;

 }

測試結論:響應快的服務器都會優先分配,接着纔會分配響應速度較慢的服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章