Django + Nginx負載均衡(內(nèi)置策略)

一、概要

負載均衡的主要作用是為了避免單獨一個服務(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(第三方) 壓力均衡
image

二晴埂、輪詢

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拄显、示例代碼

  1. gunicorn配置
    本案例采用的偽集群方式,主要修改配置文件的bind的端口案站,實戰(zhàn)開發(fā)中可以將項目部署在不同的服務(wù)器上躬审,

    [圖片上傳中...(image-c53415-1567793655073-0)]

  2. nginx中upstream配置

    # 動態(tài)服務(wù)器組
    upstream http-default {
        server localhost:8000;  
        server localhost:8001;
        server localhost:8002; 
        # 備用服務(wù)器
        server localhost:8003 backup; 
    }
    
    
  3. 在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、示例代碼

  1. 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; 
    }
    
    
  2. 在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物舒、示例代碼

  1. 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;
    }
    
    
  2. 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抠藕、示例代碼

  1. 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;
    }
    
    
  2. 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蹋绽、示例代碼

  1. gunicorn配置
    本案例采用的偽集群方式芭毙,主要修改配置文件的bind的端口,實戰(zhàn)開發(fā)中可以將項目部署在不同的服務(wù)器上卸耘,

    image
  2. nginx中upstream配置

    # 動態(tài)服務(wù)器組
    upstream http-default {
        server localhost:8000;  
        server localhost:8001;
        server localhost:8002; 
        # 備用服務(wù)器
        server localhost:8003 backup; 
    }
    
    
  3. 在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手趣、示例代碼

  1. 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; 
    }
    
    
  2. 在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伪朽、示例代碼

  1. 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;
    }
    
    
  2. 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禽拔、示例代碼

  1. 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;
    }
    
    
  2. server模塊

    # 其它配置都不需要變 只需要修改 proxy_pass
    server {
        location / {
            # 設(shè)置成upstream模塊的名字即可
            proxy_pass http-least-conn;
        }
    
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刘离,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌期犬,老刑警劉巖雹顺,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恼除,居然都是意外死亡,警方通過查閱死者的電腦和手機曼氛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門豁辉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舀患,你說我怎么就攤上這事徽级。” “怎么了聊浅?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵餐抢,是天一觀的道長。 經(jīng)常有香客問我低匙,道長旷痕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任努咐,我火速辦了婚禮苦蒿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渗稍。我一直安慰自己佩迟,他們只是感情好团滥,可當(dāng)我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著报强,像睡著了一般灸姊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秉溉,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天力惯,我揣著相機與錄音,去河邊找鬼召嘶。 笑死父晶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弄跌。 我是一名探鬼主播甲喝,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铛只!你這毒婦竟也來了埠胖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淳玩,失蹤者是張志新(化名)和其女友劉穎直撤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜕着,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡谋竖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了承匣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圈盔。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悄雅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铁蹈,我是刑警寧澤宽闲,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站握牧,受9級特大地震影響容诬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沿腰,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一览徒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颂龙,春花似錦习蓬、人聲如沸纽什。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芦缰。三九已至,卻和暖如春枫慷,著一層夾襖步出監(jiān)牢的瞬間让蕾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工或听, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留探孝,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓誉裆,卻偏偏與公主長得像顿颅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子找御,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內(nèi)容