搬移Signalr專案到GCP時得知GCP的LB不支持長連接對象需要ip hash配置,需要自行建立一個LB代理處理,紀錄一下Nginx LB Method
簡單的LB配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23user nginx;
## 系統自行配置可使用的CPU
worker_processes auto;
events {
## 單一Process同時間可以處理的連線數,跟RAM還有Process最大可以開啟檔案有關
worker_connections 2048;
}
## 目標LB群組裡面監聽的URL跟PORT
upstream lb-backend {
server backend:9001;
server backend:9001;
}
## 入口監聽的PORT跟拜訪目標LB群組的對象
server {
listen 8080;
location / {
proxy_pass http://lb-backend;
}
}Round Robin: 請求平均分配(default)
1
2
3
4upstream lb-backend {
server backend:9001;
server backend:9001;
}Least Connections: 請求分配到連線數最少的目標
1
2
3
4
5upstream lb-backend {
least_conn;
server backend:9001;
server backend:9001;
}IP Hash: 針對長連結連線類型將IPV4前三個Byte或IPV6計算雜湊確保拜訪目標都為同一台
1
2
3
4
5upstream lb-backend {
ip_hash;
server backend:9001;
server backend:9001;
}Generic Hash: 根據指定變數計算雜湊確保拜訪目標都為同一台
1
2
3
4
5upstream lb-backend {
hash {變數} consostent;
server backend:9001;
server backend:9001;
}Least Time(nginx plus): 根據條件選擇平均延遲最低和連線數最少的對象
- header: 收到回應時間
- last_byte: 收到回應內容時間
- last_byte_infight: 收到完整回應內容時間
1
2
3
4
5upstream lb-backend {
least_time {func};
server backend:9001;
server backend:9001;
}
Random: 根據nginx權重計算挑出指定數量(one, two, three)機器,並指定方法選擇對象
- least_conn: 最少連線數
- least_time=header(nginx plus): 收到回應平均最少時間
- least_time=last_byte(nginx plus): 收到完整回應平均最少時間
1
2
3
4
5upstream lb-backend {
random {數量} {func};
server backend:9001;
server backend:9001;
}