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