Nginx負載均衡原理和配置初探
當單機無法支撐一個網站應用時,就要考慮到使用多臺機器時橫向擴展的方式來處理更多請求了。把請求分發到多臺服務器上的技術就是負載均衡。???????????????? 專? ? ?業的負載均衡服務有? ? ? ? ? ? ?LVS,HAProxy 等,在網站服務器還沒達到一定規模的情況下,使用 Nginx 的負載均衡也許是個更簡單好用的選擇。
為了演示使用 Nginx 的負載均衡功能有多容易,下面將先展示一個極簡的 Nginx 負載均衡配置:
upstream?app?{ ????server?192.168.1.10; ????server?192.168.1.11; ????server?192.168.1.12; } server?{ ????listen?80; ????location?/?{ ????????proxy_pass?http://app; ????} }
Nginx 使用?upstream?來定義一組參與負載均衡的服務器。上面的配置中,定義了三個服務器。然后在?server?配置段中使用?proxy_pass?來使用定義的服務器組。使用 Nginx 的負載均衡功能就是這么簡單。
Nginx 的負載均衡功能還可以配置輪詢策略。上面的配置就是默認的按順序輪詢。如果服務器的硬件能力參差不齊。還可以使用加權輪詢的策略,來使配置高的服務器承受更多的請求。使用加權輪詢策略的配置如下:
upstream?app?{ ????server?192.168.1.10?weight=1; ????server?192.168.1.11?weight=5; ????server?192.168.1.12?weight=3; }
上面的服務器后面,使用了?weight?來設置權重。數字越大權重越高,分配的請求就越多。除了加權輪詢外,另一種輪詢策略是 IP Hash。這種輪詢策略是將請求 IP 和服務器建立起穩固的關系。與其他策略相比,IP Hash 策略可以輕松的解決使用負載均衡時單機 session 變化的問題。IP Hash 的配置示例如下:
upstream?app?{ ????ip_hash; ????server?192.168.1.10; ????server?192.168.1.11; ????server?192.168.1.12; }
IP Hash 同樣也會存在輪詢請求不均衡的問題,所以一般情況下并不推薦使用。如果是為了 Session,可以考慮把 Session 遷移到數據庫來解決。除了以上 Nginx 內置的負載均衡策略外,還有一些擴展的輪詢規則,如: fair,consistent hash 等。因為要先安裝擴展包以后才能使用,這里就不多介紹了。下面將再介紹幾個關于負載均衡服務器的配置參數。
定義服務器的時候,有時候可能使用的并不是標準 80 端口,可以使用冒號(:)在 ip 后定義端口:
server?192.168.1.11:8000;
服務器如果因為臨時維護不能參與服務,可以使用?down?參數指定服務器不參與分發請求:
server?192.168.1.11?down;
還可以使用?backup?指定候補服務器,這樣的服務器正常情況下不會被分配請求,只有當正常服務器繁忙時才會使用。定義候補服務器的示例如下:
server?192.168.1.11?backup;
還可以使用?max_fails?來審核服務器的健康狀況,max_fails?可以設置一個請求失敗的最大限度,超過限度就會被認為服務器不可用,不再分發請求到該服務器。使用示例如下:
server?192.168.1.11?max_fails=3;
以上只是一部分 Nginx 常用的負載均衡配置參數,了解了以上知識,應付每天千萬請求應該不成問題了。除此之外,還可以到 Nginx 的官方文檔?Module ngx_http_upstream_module?中了解更多與負載均衡相關的配置和說明。
CSharp
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。