Nginx-upstream負載均衡

1、Nginx使用upstream模塊配置負載均衡nginx

本機配置好兩個tomcat:算法

# curl http://127.0.0.1:8080
Tomcat 1 test jsp
# curl http://127.0.0.1:8081
Tomcat 2 test jsp


配置Nginx:後端

# cat nginx.conf
#user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    include       conf.d/vhost.conf;
    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"';
     
    #記錄用戶訪問的真實IP
    #log_format  main  '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
     
    #access_log  logs/access.log  main;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    client_max_body_size 50m;  #緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲保存到本地再傳給用戶
    client_body_buffer_size 256k;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    proxy_connect_timeout 300s; #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
    proxy_read_timeout 300s;    #鏈接成功後,後端服務器響應時間(代理接收超時)
    proxy_send_timeout 300s;    
    proxy_buffer_size 64k;     #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
    proxy_buffers 4 32k;       #proxy_buffers緩衝區,網頁平均在32k如下的話,這樣設置
    proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)
    proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳遞請求,而不緩衝到磁盤
    proxy_ignore_client_abort on;  #不容許代理端主動關閉鏈接
     
}


配置負載均衡配置文件:緩存

# cat conf.d/vhost.conf 
upstream mysvr {
         server 127.0.0.1:8080;
         server 127.0.0.1:8081;
        }
server
{
    listen 80;
    server_name 127.0.0.1;
    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://mysvr;
    }
 
    access_log logs/tomcat1_access.log;
}


重啓Nginx測試:(默認分發機制是輪詢)tomcat

# /opt/nginx/sbin/nginx -s reload

測試:
bash

# curl http://127.0.0.1
Tomcat 1 test jsp
# curl http://127.0.0.1
Tomcat 2 test jsp
# curl http://127.0.0.1
Tomcat 1 test jsp
# curl http://127.0.0.1
Tomcat 2 test jsp

 

2、upstream模塊分發方式:服務器

一、輪詢(默認)session

每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,負載均衡會自動剔除。app

二、weight(指定輪詢概率,也叫加權輪詢)負載均衡

weight,指定輪詢的概率,weight和訪問率成正比,用於後端服務器性能不均的狀況,weight參數越高表示權值越大,被分配到的概率就越高。例如:

upstream mysvr {
         server 127.0.0.1:8080 weight=1;
         server 127.0.0.1:8081 weight=2;
}

三、ip_hash

每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session共享的問題,例如:

upstream mysvr {
         ip_hash;
         server 127.0.0.1:8080;
         server 127.0.0.1:8081;
}

四、fair(第三方模塊,須要Nginx編譯安裝時添加模塊支持--add-module=/usr/local/gnosek-nginx-upstream-fair-2131c73)

upstream fair 是比內建的負載均衡更加智能的負載均衡模塊。它採用的不是內建負載均衡使用的輪換的均衡算法,而是能夠根據頁面大小、加載時間長短智能的進行負載均衡。例如:

upstream mysvr {
         fair;
         server 127.0.0.1:8080;
         server 127.0.0.1:8081;
}

五、url_hash(第三方模塊,須要Nginx編譯安裝時添加模塊支持--add-module=/usr/local/nginx_upstream_hash-0.3.1)。

按訪問url的hash結果來分配請求,使每一個url定向到同一個後端服務器,後端服務器爲緩存時比較有效,例如:

upstream mysvr {         
         server 127.0.0.1:8080;         
         server 127.0.0.1:8081;    
         hash $request_uri; 
         hash_method crc32; 
}


3、upstream爲每一個後端服務器設置狀態值,例如:

upstream mysvr{
        ip_hash; 
        server 127.0.0.1:8080 down;
        server 127.0.0.1:8081 weight=2;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083 backup;
}

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

2.weight 默認爲1.weight越大,負載的權重就越大。 

3.max_fails :容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤 

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

5.backup: 其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。 



更多內容,請關注博主我的博客網站:http://www.whysha.com

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息