一、概要
負載均衡的主要作用是為了避免單獨一個服務(wù)器壓力過大挎挖,將來自用戶的請求轉(zhuǎn)發(fā)給不同的服務(wù)器
負載均衡通過upstream模塊類配置,目前Nginx服務(wù)器upstream模塊支持7種載均衡策略
序號 | 均衡策略 | 說明 |
---|---|---|
1 | 輪詢 | 默認方式 |
2 | weight | 權(quán)重方式 |
3 | ip_hash | 依據(jù)ip分配方式 |
4 | least_conn | 最少連接方式 |
5 | fair(第三方) | 響應(yīng)時間方式 |
6 | url_hash(第三方) | 依據(jù)URL分配方式 |
7 | sticky(第三方) | 壓力均衡 |
一、概要
負載均衡的主要作用是為了避免單獨一個服務(wù)器壓力過大嘶是,將來自用戶的請求轉(zhuǎn)發(fā)給不同的服務(wù)器
負載均衡通過upstream模塊類配置债蜜,目前Nginx服務(wù)器upstream模塊支持7種載均衡策略
序號 | 均衡策略 | 說明 |
---|---|---|
1 | 輪詢 | 默認方式 |
2 | weight | 權(quán)重方式 |
3 | ip_hash | 依據(jù)ip分配方式 |
4 | least_conn | 最少連接方式 |
5 | fair(第三方) | 響應(yīng)時間方式 |
6 | url_hash(第三方) | 依據(jù)URL分配方式 |
7 | sticky(第三方) | 壓力均衡 |
二晴埂、輪詢
1、說明
upstream模塊默認的負載均衡默認策略策幼,每個請求按照時間順序逐一分配邑时。如果server掛掉,能自動剔除特姐。
2晶丘、參數(shù)列表
參數(shù) | 說明 |
---|---|
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器。當(dāng)主服務(wù)器停止時,請求會被發(fā)送到它這里浅浮。 |
ail_timeout | 與max_fails結(jié)合使用沫浆。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù),如果在這個時間內(nèi)滚秩,所有針對該服務(wù)器的請求都失敗了专执,那么認為該服務(wù)器會被認為是停機了, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s郁油。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
3本股、特點
- 此策略適合服務(wù)器配置相當(dāng),無狀態(tài)且短平快的服務(wù)使用桐腌。
4拄显、示例代碼
-
gunicorn配置
本案例采用的偽集群方式,主要修改配置文件的bind的端口案站,實戰(zhàn)開發(fā)中可以將項目部署在不同的服務(wù)器上躬审,[圖片上傳中...(image-c53415-1567793655073-0)]
-
nginx中upstream配置
# 動態(tài)服務(wù)器組 upstream http-default { server localhost:8000; server localhost:8001; server localhost:8002; # 備用服務(wù)器 server localhost:8003 backup; }
-
在server模塊中
# 其它配置都不需要變 只需要修改 proxy_pass的值 server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http://https-default; }
三、權(quán)重方式(weight)
1蟆盐、說明
權(quán)重方式承边,在輪詢策略的基礎(chǔ)上指定輪詢的幾率
2、參數(shù)列表
參數(shù) | 說明 |
---|---|
weight | weight參數(shù)用于指定輪詢幾率石挂,weight的默認值為1 |
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器博助。當(dāng)主服務(wù)器停止時,請求會被發(fā)送到它這里誊稚。 |
ail_timeout | 與max_fails結(jié)合使用翔始。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù),如果在這個時間內(nèi)里伯,所有針對該服務(wù)器的請求都失敗了城瞎,那么認為該服務(wù)器會被認為是停機了, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s疾瓮。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
3脖镀、特點
- 權(quán)重越高分配到需要處理的請求越多。
- 此策略可以與least_conn和ip_hash結(jié)合使用狼电。
- 此策略比較適合服務(wù)器的硬件配置差別比較大的情況蜒灰。
4、示例代碼
-
nginx
# 負載均衡 upstream http-weight { server localhost:8000 weight=2; server localhost:8001 weight=2; server localhost:8002 backup; server localhost:8003 max_fails=3 fail_timeout=15s; }
-
在server模塊中
# 其它配置都不需要變 只需要修改 proxy_pass server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http://https-weight; }
四肩碟、ip_hash
1强窖、說明
指定負載均衡器按照基于客戶端IP的分配方式,這個方法確保了相同的客戶端的請求一直發(fā)送到相同的服務(wù)器削祈,以保證session會話翅溺。這樣每個訪客都固定訪問一個后端服務(wù)器脑漫,session共享
2、參數(shù)列表
參數(shù) | 說明 |
---|---|
ip_hash | 使用ip_hash策略 |
weight | weight參數(shù)用于指定輪詢幾率咙崎,weight的默認值為1 |
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器优幸。當(dāng)主服務(wù)器停止時,請求會被發(fā)送到它這里褪猛。 |
ail_timeout | 與max_fails結(jié)合使用网杆。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù),如果在這個時間內(nèi)伊滋,所有針對該服務(wù)器的請求都失敗了碳却,那么認為該服務(wù)器會被認為是停機了, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s新啼。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
3追城、特點
- 在nginx版本必須大于1.3.1。
- 此策略適合開發(fā)中常用于解決session共享的問題
- ip_hash不能與backup同時使用燥撞。
- 當(dāng)有服務(wù)器需要剔除,必須手動down掉迷帜。
4物舒、示例代碼
-
upstream配置
upstream http-ip-hash { ip_hash; #保證每個訪客固定訪問一個后端服務(wù)器 server localhost:8080 weight=2; server localhost:8081 weight=2; server localhost:8082 weight=3; server localhost:8083 max_fails=3 fail_timeout=20s; }
-
server模塊
# 其它配置都不需要變 只需要修改 proxy_pass server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http://http-ip-hash; }
五、least_conn
1戏锹、說明
最少連接可以控制單獨的一臺服務(wù)器負載太高的問題冠胯,而是會根據(jù)其負載動態(tài)的分配請求。輪詢算法是把請求平均的轉(zhuǎn)發(fā)給各個后端锦针,使它們的負載大致相同荠察;但是,有些請求占用的時間很長奈搜,會導(dǎo)致其所在的后端負載較高悉盆。這種情況下,least_conn這種方式就可以達到更好的負載均衡效果馋吗。
當(dāng)然如果每臺服務(wù)還配置了權(quán)重焕盟,那么這時會取連接數(shù)和權(quán)重比值最小的那臺服務(wù),如果連接數(shù)和權(quán)重的比值都相同的話就會采取輪詢的方式進行分發(fā)
3宏粤、參數(shù)列表
參數(shù) | 說明 |
---|---|
least_conn | 最少連接策略 |
weight | weight參數(shù)用于指定輪詢幾率脚翘,weight的默認值為1 |
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器。當(dāng)主服務(wù)器停止時绍哎,請求會被發(fā)送到它這里来农。 |
ail_timeout | 與max_fails結(jié)合使用。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù)崇堰,如果在這個時間內(nèi)沃于,所有針對該服務(wù)器的請求都失敗了,那么認為該服務(wù)器會被認為是停機了, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s揽涮。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
4抠藕、示例代碼
-
upstream配置
upstream http-least-conn { least_conn; #保證每個訪客固定訪問一個后端服務(wù)器 server localhost:8080 weight=2; server localhost:8081 weight=2; server localhost:8082 weight=3; server localhost:8083 max_fails=3 fail_timeout=20s; }
-
server模塊
# 其它配置都不需要變 只需要修改 proxy_pass server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http-least-conn; }
</article>
15人點贊
Django
](//upload-images.jianshu.io/upload_images/1420807-0b80a89550062222.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/1200)
二、輪詢
1蒋困、說明
upstream模塊默認的負載均衡默認策略盾似,每個請求按照時間順序逐一分配。如果server掛掉雪标,能自動剔除零院。
2、參數(shù)列表
參數(shù) | 說明 |
---|---|
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器村刨。當(dāng)主服務(wù)器停止時告抄,請求會被發(fā)送到它這里。 |
ail_timeout | 與max_fails結(jié)合使用嵌牺。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù)打洼,如果在這個時間內(nèi),所有針對該服務(wù)器的請求都失敗了逆粹,那么認為該服務(wù)器會被認為是停機了募疮, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
3僻弹、特點
- 此策略適合服務(wù)器配置相當(dāng)阿浓,無狀態(tài)且短平快的服務(wù)使用。
4蹋绽、示例代碼
-
gunicorn配置
本案例采用的偽集群方式芭毙,主要修改配置文件的bind的端口,實戰(zhàn)開發(fā)中可以將項目部署在不同的服務(wù)器上卸耘,image -
nginx中upstream配置
# 動態(tài)服務(wù)器組 upstream http-default { server localhost:8000; server localhost:8001; server localhost:8002; # 備用服務(wù)器 server localhost:8003 backup; }
-
在server模塊中
# 其它配置都不需要變 只需要修改 proxy_pass的值 server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http://https-default; }
三退敦、權(quán)重方式(weight)
1、說明
權(quán)重方式鹊奖,在輪詢策略的基礎(chǔ)上指定輪詢的幾率
2苛聘、參數(shù)列表
參數(shù) | 說明 |
---|---|
weight | weight參數(shù)用于指定輪詢幾率,weight的默認值為1 |
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器忠聚。當(dāng)主服務(wù)器停止時设哗,請求會被發(fā)送到它這里。 |
ail_timeout | 與max_fails結(jié)合使用两蟀。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù)网梢,如果在這個時間內(nèi),所有針對該服務(wù)器的請求都失敗了赂毯,那么認為該服務(wù)器會被認為是停機了战虏, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s拣宰。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
3、特點
- 權(quán)重越高分配到需要處理的請求越多烦感。
- 此策略可以與least_conn和ip_hash結(jié)合使用巡社。
- 此策略比較適合服務(wù)器的硬件配置差別比較大的情況。
4手趣、示例代碼
-
nginx
# 負載均衡 upstream http-weight { server localhost:8000 weight=2; server localhost:8001 weight=2; server localhost:8002 backup; server localhost:8003 max_fails=3 fail_timeout=15s; }
-
在server模塊中
# 其它配置都不需要變 只需要修改 proxy_pass server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http://https-weight; }
四晌该、ip_hash
1、說明
指定負載均衡器按照基于客戶端IP的分配方式绿渣,這個方法確保了相同的客戶端的請求一直發(fā)送到相同的服務(wù)器朝群,以保證session會話。這樣每個訪客都固定訪問一個后端服務(wù)器中符,session共享
2姜胖、參數(shù)列表
參數(shù) | 說明 |
---|---|
ip_hash | 使用ip_hash策略 |
weight | weight參數(shù)用于指定輪詢幾率,weight的默認值為1 |
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器淀散。當(dāng)主服務(wù)器停止時右莱,請求會被發(fā)送到它這里。 |
ail_timeout | 與max_fails結(jié)合使用吧凉。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù)隧出,如果在這個時間內(nèi),所有針對該服務(wù)器的請求都失敗了阀捅,那么認為該服務(wù)器會被認為是停機了, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s针余。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
3饲鄙、特點
- 在nginx版本必須大于1.3.1。
- 此策略適合開發(fā)中常用于解決session共享的問題
- ip_hash不能與backup同時使用圆雁。
- 當(dāng)有服務(wù)器需要剔除忍级,必須手動down掉。
4伪朽、示例代碼
-
upstream配置
upstream http-ip-hash { ip_hash; #保證每個訪客固定訪問一個后端服務(wù)器 server localhost:8080 weight=2; server localhost:8081 weight=2; server localhost:8082 weight=3; server localhost:8083 max_fails=3 fail_timeout=20s; }
-
server模塊
# 其它配置都不需要變 只需要修改 proxy_pass server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http://http-ip-hash; }
五轴咱、least_conn
1、說明
最少連接可以控制單獨的一臺服務(wù)器負載太高的問題烈涮,而是會根據(jù)其負載動態(tài)的分配請求朴肺。輪詢算法是把請求平均的轉(zhuǎn)發(fā)給各個后端,使它們的負載大致相同坚洽;但是戈稿,有些請求占用的時間很長,會導(dǎo)致其所在的后端負載較高讶舰。這種情況下鞍盗,least_conn這種方式就可以達到更好的負載均衡效果需了。
當(dāng)然如果每臺服務(wù)還配置了權(quán)重,那么這時會取連接數(shù)和權(quán)重比值最小的那臺服務(wù)般甲,如果連接數(shù)和權(quán)重的比值都相同的話就會采取輪詢的方式進行分發(fā)
3肋乍、參數(shù)列表
參數(shù) | 說明 |
---|---|
least_conn | 最少連接策略 |
weight | weight參數(shù)用于指定輪詢幾率,weight的默認值為1 |
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器敷存。當(dāng)主服務(wù)器停止時墓造,請求會被發(fā)送到它這里。 |
ail_timeout | 與max_fails結(jié)合使用历帚。 |
max_fails | 設(shè)置在fail_timeout參數(shù)設(shè)置的時間內(nèi)最大失敗次數(shù)滔岳,如果在這個時間內(nèi),所有針對該服務(wù)器的請求都失敗了挽牢,那么認為該服務(wù)器會被認為是停機了谱煤, |
fail_time | 服務(wù)器會被認為停機的時間長度,默認為10s。 |
down | 標(biāo)記某臺應(yīng)用服務(wù)器暫時不參與負載均衡 |
4禽拔、示例代碼
-
upstream配置
upstream http-least-conn { least_conn; #保證每個訪客固定訪問一個后端服務(wù)器 server localhost:8080 weight=2; server localhost:8081 weight=2; server localhost:8082 weight=3; server localhost:8083 max_fails=3 fail_timeout=20s; }
-
server模塊
# 其它配置都不需要變 只需要修改 proxy_pass server { location / { # 設(shè)置成upstream模塊的名字即可 proxy_pass http-least-conn; }