uwsgi + nginx 部署python專案(二)

阪田銅時發表於2019-12-20

實現負載均衡

開啟兩個伺服器,nginx負責分發請求到兩個伺服器,以減輕單個伺服器負擔。

配置uwsgi伺服器

在a專案目錄下生成uwsgi.ini檔案,在b專案目錄下生成uwsgi.ini檔案,如何寫可以檢視上一篇文章 www.cnblogs.com/pyweb/p/120…

兩個專案不同點是埠不同。

後臺啟動uwsgi伺服器

nohup uwsgi --ini uwsgi_a.ini &
nohup uwsgi --ini uwsgi_b.ini &複製程式碼

配置nginx配置檔案

vim /etc/nginx/nginx.conf

http {
        upstream flasktest {
                server 127.0.0.1:82;   # 配置多個伺服器
                server 127.0.0.1:83;

        }
        server {
                listen 0.0.0.0:81;
                server_name www.flasktest.com;
                charset UTF-8;
                access_log /etc/nginx/FlaskTest_access.log;
                error_log /etc/nginx/FlaskTest_error.log;
                client_max_body_size 75M;

                location / {
                        include uwsgi_params;
                        # uwsgi_pass 127.0.0.1:82;
                        uwsgi_pass flasktest;   # 使用上面的flasktest進行匹配,表示81埠同時監聽82,83埠
                        uwsgi_read_timeout 2;
                }

        }複製程式碼

分發規則(輪詢,ip_hash, fair, url_hash)

# 輪詢,指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。如下所示,83的訪問比率要比82的訪問比率高一倍。
upstream linuxidc{ 
      server 127.0.0.1:82 weight=5; 
      server 127.0.0.1:83 weight=10; 
}# ip_hash, 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。複製程式碼
upstream linuxidc{     ip_hash;
      server 127.0.0.1:82; 
      server 127.0.0.1:83; 
}# fair,  按後端伺服器的響應時間來分配請求,響應時間短的優先分配。與weight分配策略類似。複製程式碼
upstream linuxidc{
      server 127.0.0.1:82; 
      server 127.0.0.1:83;       fair;
}複製程式碼
# url_hash, 按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。# 注意:在upstream中加入hash語句,server語句中不能寫入weight等其他的引數,hash_method是使用的hash演算法。複製程式碼
複製程式碼
upstream linuxidc{
      server 127.0.0.1:82; 
      server 127.0.0.1:83;       hash $request_uri;    hash_method crc32;
}複製程式碼
 複製程式碼

其他

upstream還可以為每個裝置設定狀態值,這些狀態值的含義分別如下:

down: 表示單前的server暫時不參與負載.

weight: 預設為1.weight越大,負載的權重就越大。

max_fails:允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤.

fail_timeout :max_fails次失敗後,暫停的時間。

backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

upstream bakend{ #定義負載均衡裝置的Ip及裝置狀態 
      ip_hash; 
      server 10.0.0.11:9090 down; 
      server 10.0.0.11:8080 weight=2 max_fails=1 fail_timeout=1s; 
      server 10.0.0.11:6060 max_fails=1 fail_timeout=1s; 
      server 10.0.0.11:7070 backup; 
}複製程式碼


相關文章