Centos上配置nginx+uwsgi+負載均衡配置


負載均衡在服務端開發中算是一個比較重要的特性。因為Nginx除了作為常規的Web服務器外,還會被大規模的用於反向代理后端,Nginx的異步框架可以處理很大的並發請求,把這些並發請求hold住之后就可以分發給后台服務端(backend servers, 后面簡稱backend)來做復雜的計算、處理和響應,並且在業務量增加的時候可以方便地擴容后台服務器。

    說白了就是,隨着業務和用戶規模的增長,僅僅一台服務器無法肩負起高並發的響應,所以需要兩台以上的服務器共同分擔壓力,而分擔壓力的媒介就是萬能的Nginx。  

首先,利用wsgi在不同的端口上起兩個Django服務,比如8000和8001(不用啟動nginx服務)

然后修改nginx網站配置,將原uwsgi_pass注釋,改成變量綁定

 

server {
    listen       8000;
    server_name  localhost;

    access_log      /root/myweb_access.log;
    error_log       /root/myweb_error.log;


    client_max_body_size 75M;

    location / {
        include uwsgi_params;
        uwsgi_pass mytest; #uwsgi_pass 127.0.0.1:8001;
        uwsgi_param UWSGI_SCRIPT video_back.wsgi;
        uwsgi_param UWSGI_CHDIR  /root/video_back;
    }


    location /static {
        alias /root/video_back/static;
    }

    location /upload {
        alias /root/video_back/upload;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
server {
    listen       80;
    server_name  localhost;

    access_log      /root/video_vue_access.log;
    error_log       /root/video_vue_error.log;
    
    client_max_body_size 75M;


    location / {
        #include uwsgi_params;
        # uwsgi_pass 127.0.0.1:8000;
        #uwsgi_pass mytest;
        root /root/video_vue;
        index index.html;
        try_files $uri $uri/ /index.html;

    }

    location /static {
        alias /root/video_vue/static;
    }

    error_log    /root/video_vue/error.log    error;

}

 

然后修改主配置文件 vim /etc/nginx/nginx.conf,在http配置內添加負載均衡配置

user  root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    upstream mytest { server 39.106.172.65:8000 weight=3;  #負載均衡服務器群
    server 39.97.117.229:8001 weight=7; }
}

然后重啟服務即可: 

systemctl restart nginx.service


值得注意的是常用的負載均衡策略有以下幾種:
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。

upstream backserver {
    server 192.168.0.14;
    server 192.168.0.15;
}


2、權重 weight
指定輪詢幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。

upstream backserver {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=7;
}


3、ip_hash( IP綁定)
上述方式存在一個問題就是說,在負載均衡系統中,假如用戶在某台服務器上登錄了,那么該用戶第二次請求的時候,因為我們是負載均衡系統,每次請求都會重新定位到服務器集群中的某一個,那么已經登錄某一個服務器的用戶再重新定位到另一個服務器,其登錄信息將會丟失,這樣顯然是不妥的。

我們可以采用ip_hash指令解決這個問題,如果客戶已經訪問了某個服務器,當用戶再次訪問時,會將該請求通過哈希算法,自動定位到該服務器。

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。

upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}


4、fair(第三方插件)
按后端服務器的響應時間來分配請求,響應時間短的優先分配。

upstream backserver {
    server server1;
    server server2;
    fair;
}


5、url_hash(第三方插件)
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。

upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM