一育叁、概要
負載均衡的主要作用是為了避免單獨一個服務器壓力過大,將來自用戶的請求轉發(fā)給不同的服務器
負載均衡通過upstream模塊類配置,目前Nginx服務器upstream模塊支持7種載均衡策略
序號 均衡策略 說明 1 輪詢 默認方式 2 weight 權重方式 3 ip_hash 依據(jù)ip分配方式 4 least_conn 最少連接方式 5 fair(第三方) 響應時間方式 6 url_hash(第三方) 依據(jù)URL分配方式 7 sticky(第三方) 壓力均衡 image
二、輪詢
1抛蚤、說明
upstream模塊默認的負載均衡默認策略,每個請求按照時間順序逐一分配寻狂。如果server掛掉岁经,能自動剔除。
2蛇券、參數(shù)列表
參數(shù) | 說明 |
---|---|
backup | 標記該服務器為備用服務器缀壤。當主服務器停止時,請求會被發(fā)送到它這里纠亚。 |
ail_timeout | 與max_fails結合使用塘慕。 |
max_fails | 設置在fail_timeout參數(shù)設置的時間內最大失敗次數(shù),如果在這個時間內蒂胞,所有針對該服務器的請求都失敗了图呢,那么認為該服務器會被認為是停機了, |
fail_time | 服務器會被認為停機的時間長度,默認為10s骗随。 |
down | 標記某臺應用服務器暫時不參與負載均衡 |
3蛤织、特點
- 此策略適合服務器配置相當,無狀態(tài)且短平快的服務使用鸿染。
4指蚜、示例代碼
-
gunicorn配置
本案例采用的偽集群方式,主要修改配置文件的bind的端口涨椒,實戰(zhàn)開發(fā)中可以將項目部署在不同的服務器上摊鸡,
image - nginx中upstream配置
# 動態(tài)服務器組 upstream http-default { server localhost:8000; server localhost:8001; server localhost:8002; # 備用服務器 server localhost:8003 backup; }
- 在server模塊中
# 其它配置都不需要變 只需要修改 proxy_pass的值 server { location / { # 設置成upstream模塊的名字即可 proxy_pass http://https-default; }
三、權重方式(weight)
1丢烘、說明
權重方式柱宦,在輪詢策略的基礎上指定輪詢的幾率
2、參數(shù)列表
參數(shù) | 說明 |
---|---|
weight | weight參數(shù)用于指定輪詢幾率播瞳,weight的默認值為1 |
backup | 標記該服務器為備用服務器掸刊。當主服務器停止時,請求會被發(fā)送到它這里赢乓。 |
ail_timeout | 與max_fails結合使用忧侧。 |
max_fails | 設置在fail_timeout參數(shù)設置的時間內最大失敗次數(shù),如果在這個時間內牌芋,所有針對該服務器的請求都失敗了蚓炬,那么認為該服務器會被認為是停機了, |
fail_time | 服務器會被認為停機的時間長度,默認為10s躺屁。 |
down | 標記某臺應用服務器暫時不參與負載均衡 |
3肯夏、特點
- 權重越高分配到需要處理的請求越多。
- 此策略可以與least_conn和ip_hash結合使用。
- 此策略比較適合服務器的硬件配置差別比較大的情況驯击。
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 / { # 設置成upstream模塊的名字即可 proxy_pass http://https-weight; }
四、ip_hash
1徊都、說明
指定負載均衡器按照基于客戶端IP的分配方式沪斟,這個方法確保了相同的客戶端的請求一直發(fā)送到相同的服務器,以保證session會話暇矫。這樣每個訪客都固定訪問一個后端服務器主之,session共享
2、參數(shù)列表
參數(shù) | 說明 |
---|---|
ip_hash | 使用ip_hash策略 |
weight | weight參數(shù)用于指定輪詢幾率李根,weight的默認值為1 |
backup | 標記該服務器為備用服務器槽奕。當主服務器停止時,請求會被發(fā)送到它這里朱巨。 |
ail_timeout | 與max_fails結合使用史翘。 |
max_fails | 設置在fail_timeout參數(shù)設置的時間內最大失敗次數(shù)枉长,如果在這個時間內冀续,所有針對該服務器的請求都失敗了,那么認為該服務器會被認為是停機了必峰, |
fail_time | 服務器會被認為停機的時間長度,默認為10s洪唐。 |
down | 標記某臺應用服務器暫時不參與負載均衡 |
3、特點
- 在nginx版本必須大于1.3.1吼蚁。
- 此策略適合開發(fā)中常用于解決session共享的問題
- ip_hash不能與backup同時使用凭需。
- 當有服務器需要剔除,必須手動down掉肝匆。
4粒蜈、示例代碼
- upstream配置
upstream http-ip-hash { ip_hash; #保證每個訪客固定訪問一個后端服務器 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 / { # 設置成upstream模塊的名字即可 proxy_pass http://http-ip-hash; }
五、least_conn
1旗国、說明
最少連接可以控制單獨的一臺服務器負載太高的問題枯怖,而是會根據(jù)其負載動態(tài)的分配請求。輪詢算法是把請求平均的轉發(fā)給各個后端能曾,使它們的負載大致相同度硝;但是,有些請求占用的時間很長寿冕,會導致其所在的后端負載較高蕊程。這種情況下,least_conn這種方式就可以達到更好的負載均衡效果驼唱。
當然如果每臺服務還配置了權重藻茂,那么這時會取連接數(shù)和權重比值最小的那臺服務,如果連接數(shù)和權重的比值都相同的話就會采取輪詢的方式進行分發(fā)
3、參數(shù)列表
參數(shù) | 說明 |
---|---|
least_conn | 最少連接策略 |
weight | weight參數(shù)用于指定輪詢幾率辨赐,weight的默認值為1 |
backup | 標記該服務器為備用服務器岗钩。當主服務器停止時,請求會被發(fā)送到它這里肖油。 |
ail_timeout | 與max_fails結合使用兼吓。 |
max_fails | 設置在fail_timeout參數(shù)設置的時間內最大失敗次數(shù),如果在這個時間內森枪,所有針對該服務器的請求都失敗了视搏,那么認為該服務器會被認為是停機了, |
fail_time | 服務器會被認為停機的時間長度,默認為10s县袱。 |
down | 標記某臺應用服務器暫時不參與負載均衡 |
4浑娜、示例代碼
- upstream配置
upstream http-least-conn { least_conn; #保證每個訪客固定訪問一個后端服務器 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 / { # 設置成upstream模塊的名字即可 proxy_pass http-least-conn; }