簡單實踐搭建 nginx 負載均衡

lxzoliver發表於2020-06-26

本文是通過自己的實踐,通過nginx搭建的負載均衡

概述

負載均衡在服務端開發中算是一個比較重要的特性。由於Nginx除了作為常規的Web伺服器外,還會被大規模的用於反向代理商前臺,由於Nginx的非同步框架可以解決很大的併發請求,把這些併發請求hold住之後即可以分發給後端服務端(backend servers, 後面簡稱backend)來做複雜的計算、解決和響應,並且在業務量新增的時候可以方便地擴容後端伺服器。

負載均衡可以分為硬體負載均衡和軟體負載均衡,前者一般是專用的軟體和硬體相結合的設施,設施商會提供完整成熟的處理方案,通常也會更加昂貴。軟體的複雜均衡以Nginx佔據絕大多數。

實踐搭建Laravel專案負載均衡

伺服器配置

伺服器配置通過1臺負載均衡伺服器和2臺應用伺服器組成,由於是測試,所以購買的是按時計算的雲伺服器,伺服器版本為centos7.2。
為了快速搭建服務所需環境,通過安裝寶塔以便迅速搭建線上環境。

負載均衡伺服器配置

nginx伺服器配置如下:

upstream backend {  
    ##2臺應用伺服器的ip地址
    server 103.246.246.228;  
    server 103.246.246.229;  
}  

server
{
    listen 80;
    server_name 你的域名地址;
    index index.php index.html index.htm default.php default.htm default.html;
    #該伺服器接受到埠80的所有流量並將其傳遞給上游upstream 。
    #請注意,upstream名稱和proxy_pass需要匹配。
    location / {  
            proxy_pass   http://backend;  
            index  index.html index.htm;  
    }
}

在其他兩臺應用伺服器中,定義預設頁面,一個為123,另一個為321。
通過訪問負載均衡域名,顯示以下內容:

實踐搭建 Laravel 專案負載均衡

再重新整理一次

實踐搭建 Laravel 專案負載均衡

說明負載均衡伺服器已成果將我們的請求轉發到另外兩臺應用伺服器當中。

負載均衡策略

輪詢方式

在上述所配置的方法,上面的例子就是輪詢的方式,它是upstream模組預設的負載均衡預設策略。每個請求會按時間順序逐一分配到不同的後端伺服器。

有如下引數:

fail_timeout 與max_fails結合使用。
max_fails 設定在fail_timeout引數設定的時間內最大失敗次數,如果在這個時間內,所有針對該伺服器的請求都失敗了,那麼認為該伺服器會被認為是停機了
fail_time 伺服器會被認為停機的時間長度,預設為10s。
backup 標記該伺服器為備用伺服器。當主伺服器停止時,請求會被髮送到它這裡。
down 標記伺服器永久停機了。
  • 在輪詢中,如果伺服器down掉了,會自動剔除該伺服器。
  • 預設配置就是輪詢策略。
  • 此策略適合伺服器配置相當,無狀態且短平快的服務使用。

權重方式

upstream backend {  
    ##2臺應用伺服器的ip地址
    server 103.246.246.228 weight=2;  
    server 103.246.246.229;  
} 

在該例子中,weight引數用於指定輪詢機率,weight的預設值為1,;weight的數值與訪問比率成正比,比如103.246.246.228伺服器被訪問的機率為103.246.246.229伺服器的兩倍。

  • 權重越高分配到需要處理的請求越多。
  • 此策略可以與least_conn和ip_hash結合使用。
  • 此策略比較適合伺服器的硬體配置差別比較大的情況。

ip_hash方式

指定負載均衡器按照基於客戶端IP的分配方式,這個方法確保了相同的客戶端的請求一直髮送到相同的伺服器,以保證session會話。這樣每個訪客都固定訪問一個後端伺服器,可以解決session不能跨伺服器的問題。

upstream backend {  
    ip_hash;    #保證每個訪客固定訪問一個後端伺服器
    server 103.246.246.228;  
    server 103.246.246.229;  
} 
  • 在nginx版本1.3.1之前,不能在ip_hash中使用權重(weight)。
  • ip_hash不能與backup同時使用。
  • 此策略適合有狀態服務,比如session。
  • 當有伺服器需要剔除,必須手動down掉。

least_conn 方式

把請求轉發給連線數較少的後端伺服器。輪詢演算法是把請求平均的轉發給各個後端,使它們的負載大致相同;但是,有些請求佔用的時間很長,會導致其所在的後端負載較高。這種情況下,least_conn這種方式就可以達到更好的負載均衡效果。

upstream backend {  
    least_conn;    #把請求轉發給連線數較少的後端伺服器
    server 103.246.246.228;  
    server 103.246.246.229;  
} 

此負載均衡策略適合請求處理時間長短不一造成伺服器過載的情況。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章