一、引言
上一篇介紹了一下Nginx的反向代理,在文章中,留下一個問題:反向代理伺服器,怎麼選擇挂在它後面的哪一台具體伺服器呢?帶着這個問題,下面就來學習一下 Nginx 的負載均衡及配置。
在學習之前,一如既往,如果沒有 Linux 和 Nginx 環境 或者沒有看過 Nginx 的反向代理,可以參考下面文章。
VirtualBox安裝Centos7
在Centos7下安裝Nginx
Nginx配置——反向代理
二、負載均衡
在學習負載均衡之前,我們要知道,為什麼服務要叢集部署?
我們大概了解一下,Tomcat 預設配置的最大并發請求是 150 個,也就是說一個 Tomcat 同時支援 150 個并發請求,當然了,也可以将其改大,改大之後,對于每個請求的響應速度會受到影響,這種方法不是解決問題的根本方法。對于一些高并發的應用來說,伺服器應該要考慮叢集部署(一般來說,當某個應用擁有 250 個以上并發的時候,應考慮應用伺服器的叢集)。
隻用一台伺服器,這種架構模式對于早期的系統相對單一,并發請求相對較少的情況下是比較适合的,成本也低。但是随着資訊數量的不斷增長,通路量和資料量的飛速增長,以及系統業務的複雜度增加,這種架構會造成伺服器相應用戶端的請求日益緩慢,并發量特别大的時候,還容易造成伺服器直接崩潰。很明顯這是由于伺服器性能的瓶頸造成的問題,那麼如何解決這種情況呢?
就像上面開始時說的,增加伺服器實體配置來解決問題是一種方法,但不是根本的方法,也就是說縱向解決問題的辦法行不通了,那麼橫向增加伺服器的數量呢?這時候叢集的概念産生了,單個伺服器解決不了,我們增加伺服器的數量,然後将請求分發到各個伺服器上,将原先請求集中到單個伺服器上的情況改為将請求分發到多個伺服器上,将負載分發到不同的伺服器,也就是我們所說的負載均衡,其原理圖如下:
請求到達反向代理伺服器後,反向代理伺服器會将請求分發到後面挂載的每個真是的響應伺服器。至于到底選擇哪一台作為響應,這就涉及負載的政策問題,下面一同學習。
三、如何配置
1、實作效果
(1)、浏覽器位址欄輸入位址 http://192.168.17.129/edu/a.html,每次重新整理頁面,請求被平均到8080和 8081 端口中,也就是兩個服務輪流響應。
2、準備工作
(1)、需要兩台 tomcat 伺服器,一台指定 8080端口,一台指定 8081端口
(2)、在兩台 tomcat 裡面 webapps 目錄中,分别建立名稱是 edu 檔案夾,在8080這台 edu 檔案夾中建立頁面 a.html,向頁面顯示8080,在8081這台 edu 檔案夾中也建立頁面 a.html,向頁面顯示8081,這樣便于區分請求被哪台服務響應。
3、修改 Nginx 配置檔案
每次修改完配置檔案,記得重新開機Nginx服務
在 nginx的配置檔案nginx.conf中進行負載均衡的配置
http {
upstream myserver{
server 192.168.17.129:8080;
server 192.168.17.129:8081;
}
server {
listen 80;
server_name 192.168.17.129;
location / {
proxy_pass http://myserver;
}
}
}
如果使用上面的配置,Nginx 反向代理伺服器會采用預設的輪詢政策,将請求逐一配置設定到不同的後端伺服器。
4、nginx 配置設定伺服器政策
(1)、 輪詢(預設)
每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端伺服器 down 掉,能自動剔除,上面沒配置,就是預設使用輪詢政策。
(2)、 weight
==weight 代表權重,預設為 1,權重越高被配置設定的用戶端越多, 例如:
upstream server_pool{
server 192.168.5.21 weight=10;
server 192.168.5.22 weight=10;
}
(3)、 ip_hash
每個請求按通路 ip 的 hash 結果配置設定,這樣每個訪客固定通路一個後端伺服器,這種方式可以解決分布式系統中 session 的問題。 例如:
upstream server_pool{
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}
(4)、 fair(第三方)
按後端伺服器的響應時間來配置設定請求,響應時間短的優先配置設定。
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
四、小結
上面就是Nginx負載均衡的介紹和配置。其實,負載均衡軟體有很多種,Nginx 隻是其中的一個,在 Linux 下有 Nginx、LVS、Haproxy 等等服務可以提供負載均衡服務。