1. 程式人生 > >apigateway-kong(四)負載均衡

apigateway-kong(四)負載均衡

ble 方案 普通 max ip_hash 目前 分享 nginx 配置 提高

負載均衡(Load balancing)是一種計算機網絡技術,用來在多個計算機(計算機集群)、網絡連接、CPU、磁盤驅動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。

使用帶有負載均衡的多個服務器組件,取代單一的組件,可以通過冗余提高可靠性。負載均衡服務通常是由專用軟體和硬件來完成。

負載均衡最重要的一個應用是利用多臺服務器提供單一服務,這種方案有時也稱之為服務器農場。通常,負載均衡主要應用於 Web 網站,大型的 Internet Relay Chat 網絡,高流量的文件下載網站,NNTP(Network News Transfer Protocol)服務和 DNS 服務。現在負載均衡器也開始支持數據庫服務,稱之為數據庫負載均衡器。

對於互聯網服務,負載均衡器通常是一個軟體程序,這個程序偵聽一個外部端口,互聯網用戶可以通過這個端口來訪問服務,而作為負載均衡器的軟體會將用戶的請求轉發給後臺內網服務器,內網服務器將請求的響應返回給負載均衡器,負載均衡器再將響應發送到用戶,這樣就向互聯網用戶隱藏了內網結構,阻止了用戶直接訪問後臺(內網)服務器,使得服務器更加安全,可以阻止對核心網絡棧和運行在其它端口服務的攻擊。

當所有後臺服務器出現故障時,有些負載均衡器會提供一些特殊的功能來處理這種情況。例如轉發請求到一個備用的負載均衡器、顯示一條關於服務中斷的消息等。負載均衡器使得 IT 團隊可以顯著提高容錯能力。它可以自動提供大量的容量以處理任何應用程序流量的增加或減少。

負載均衡在互聯網世界中的作用如此重要,本章我們一起了解一下 Nginx 是如何幫我們完成 HTTP 協議負載均衡的。

upstream 負載均衡概要

配置示例,如下:

upstream test.net{
    ip_hash;
    server 192.168.10.13:80;
    server 192.168.10.14:80  down;
    server 192.168.10.15:8009  max_fails=3  fail_timeout=20s;
    server 192.168.10.16:8080;
}
server {
    location / {
        proxy_pass  http://test.net;
    }
}

upstream 是 Nginx 的 HTTP Upstream 模塊,這個模塊通過一個簡單的調度算法來實現客戶端 IP 到後端服務器的負載均衡。在上面的設定中,通過 upstream 指令指定了一個負載均衡器的名稱 test.net。這個名稱可以任意指定,在後面需要用到的地方直接調用即可。

upstream 支持的負載均衡算法

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

  • 輪詢(默認):每個請求按時間順序逐一分配到不同的後端服務器,如果後端某臺服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。Weight 指定輪詢權值,Weight 值越大,分配到的訪問機率越高,主要用於後端每個服務器性能不均的情況下。
  • ip_hash:每個請求按訪問 IP 的 hash 結果分配,這樣來自同一個 IP 的訪客固定訪問一個後端服務器,有效解決了動態網頁存在的 session 共享問題。
  • fair:這是比上面兩個更加智能的負載均衡算法。此種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx 本身是不支持 fair 的,如果需要使用這種調度算法,必須下載 Nginx 的 upstream_fair 模塊。
  • url_hash:此方法按訪問 url 的 hash 結果來分配請求,使每個 url 定向到同一個後端服務器,可以進一步提高後端緩存服務器的效率。Nginx 本身是不支持 url_hash 的,如果需要使用這種調度算法,必須安裝 Nginx 的 hash 軟件包。
  • least_conn:最少連接負載均衡算法,簡單來說就是每次選擇的後端都是當前最少連接的一個 server(這個最少連接不是共享的,是每個 worker 都有自己的一個數組進行記錄後端 server 的連接數)。
  • hash:這個 hash 模塊又支持兩種模式 hash, 一種是普通的 hash, 另一種是一致性 hash(consistent)。
upstream 支持的狀態參數

在 HTTP Upstream 模塊中,可以通過 server 指令指定後端服務器的 IP 地址和端口,同時還可以設定每個後端服務器在負載均衡調度中的狀態。常用的狀態有:

  • down:表示當前的 server 暫時不參與負載均衡。
  • backup:預留的備份機器。當其他所有的非 backup 機器出現故障或者忙的時候,才會請求 backup 機器,因此這臺機器的壓力最輕。
  • max_fails:允許請求失敗的次數,默認為 1 。當超過最大次數時,返回 proxy_next_upstream 模塊定義的錯誤。
  • fail_timeout:在經歷了 max_fails 次失敗後,暫停服務的時間。max_fails 可以和 fail_timeout 一起使用。

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

配置 Nginx 負載均衡

技術分享圖片

Nginx 配置負載均衡

upstream webservers {
    server 192.168.18.201 weight=1;
    server 192.168.18.202 weight=1;
}
server {
    listen       80;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
        proxy_pass      http://webservers;
        proxy_set_header  X-Real-IP  $remote_addr;
    }
}

apigateway-kong(四)負載均衡