1. 程式人生 > 實用技巧 >Nginx配置後端服務負載均衡

Nginx配置後端服務負載均衡

參考文章:https://www.cnblogs.com/lave/p/10477375.html

概念介紹

負載均衡建立在現有網路結構之上,提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬,增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。

配置修改

修改nginx配置檔案( /etc/nginx/conf.d/default.conf )

upstream balance {
    # 配置被轉發的伺服器,其中的 ip 推薦使用內網 ip,可以提高訪問速度,weight 為權重,數字越大,權越高,下面的配置代表請求中三分之一分發給第一臺伺服器,三分之二的請求分發給第二臺伺服器。
    server 192.168.31.112:8080 weight=1;
    server 192.168.31.113:8080 weight=1;
    server 192.168.31.114:8080 weight=1;
}

server {
    # 監聽的埠
    listen 80;     
    # 域名,如果沒有域名可以使用ip進行訪問
    server_name 192.168.31.110 #自己的域名獲取當前nginx伺服器的IP;
        
    location / {
        add_header X-Content-Type-Options nosniff;
        proxy_set_header X-scheme $scheme;
        # 作用是我們可以獲取到客戶端的真實ip
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_hide_header X-Powered-By;
        proxy_hide_header Vary;
        # 重點是這裡,將代理轉發給上方 upstream 中配置的兩臺伺服器去處理,這裡的 http:// 後的值必須和 upstream 後面的值一致
        proxy_pass http://balance;
    }
}

nginx負載均衡策略

nginx的負載均衡策略有4種:

輪詢(預設)

最基本的配置方法,它是upstream的預設策略,每個請求會按時間順序逐一分配到不同的後端伺服器。

具體引數有:

引數 描述
fail_timeout 與max_fails結合使用
max_fails 設定在fail_timeout引數設定的時間內最大失敗次數,如果在這個時間內,所有針對該伺服器的請求都失敗了,那麼認為該伺服器會被認為是停機了
fail_time 伺服器會被認為停機的時間長度,預設為10s。
backup 標記該伺服器為備用伺服器。當主伺服器停止時,請求會被髮送到它這裡。
down 標記伺服器永久停機了。

注意:

  • 在輪詢中,如果伺服器down掉了,會自動剔除該伺服器。
  • 預設配置就是輪詢策略。
  • 此策略適合伺服器配置相當,無狀態且短平快的服務使用。

weight 權重

在輪詢策略的基礎上制定淪陷的機率。數字越大權重越高。例如:

upstream foo {
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003 backup;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

這裡例子中,weight引數用於制定輪詢的機率,weight預設值為1;weight的數值和被訪問的機率成正比。

ip_hash IP雜湊

負載均衡器按照客戶端IP地址的分配方式,可以確保相同客戶端的請求一直髮送到相同的伺服器。這樣每個訪客都固定訪問一個後端伺服器。

upstream foo {
    ip_hash;
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用權重(weight)。
  • ip_hash不能與backup同時使用。
  • 此策略適合有狀態服務,比如session。
  • 當有伺服器需要剔除,必須手動down掉。

least_conn 最小連線

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

upstream foo {
    least_conn;
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003 backup;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

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