nginx的http負載均衡

注意:nginx自帶的http服務後端檢測有缺陷,沒法根據狀態碼來檢測,建議使用tengine的nginx_upstream_check_module來實現後端服務的http健康狀態檢測html

(1)負載均衡簡介

做用:提高吞吐率,提高請求性能,提升容災
負載均衡按層級劃分
    四層負載均衡:ip+tcp端口,
    七層負載均衡:處理http層,例如根據主機地址調度
nginx實現負載均衡用到了proxy_pass代理模塊核心配置,將客戶端請求代理轉發至一組upstream虛擬服務池
ngx_http_proxy_module                              //proxy代理模塊
ngx_http_upstream_module                        //負載均衡模塊,能夠實現網站的負載均衡功能及節點的健康檢查。nginx自帶的健康狀態很差用

(2)負載均衡基本實現

0.語法和例子node

upstrem name { .... } 
必需要配置http標籤以內和server標籤以外


1.web服務器配置nginx

#vim /usr/local/nginx/conf/nginx.conf
 server {
        listen 8001;
        root /webroot/node1;
        index index.html;
        }
 server {
        listen 8002;
        root /webroot/node2;
        index index.html;
        }
 server {
        listen 8003;
        root /webroot/node3;
        index index.html;
        }
#nginx -t
#mkdir -pv /webroot/{node1,node2,node3}
#echo "node1" >>/webroot/node1/index.html
#echo "node2" >>/webroot/node2/index.html
#echo "node3" >>/webroot/node3/index.html
#nginx -s reload

2.代理服務器配置web

#vim /usr/local/nginx/conf
http {
    include /usr/local/nginx/conf.d 
    }
#vim /usr/local/nginx/conf.d/www.test.com.conf 
upstream  node {
        server 192.9.191.31:8001;
        server 192.9.191.31:8002;
        server 192.9.191.31:8003;
}
server {
        listen 80;
        server_name www.test.com;
        location / {
                proxy_pass http://node;
        }
}
#nginx -t
#nginx -s reload

3.修改hosts文件以及測試redis

#vim /etc/hosts
192.9.191.30    www.test.com
# curl http://192.9.191.30
node2
# curl http://192.9.191.30
node3
# curl http://192.9.191.30
node1

(3)upstream參數

1.參數詳解算法

server 1.1.1.1:80   \\負載均衡後面的RS配置,能夠是IP或域名,端口不寫,默認是80端口,高併發場景ip要換成域名,經過dns作負載均衡
weight              \\權重,默認爲1,權重大接受的請求越多
max_fails=2         \\最大嘗試次數監測後端服務是否正常,默認根據端口檢查,默認爲1,0表示禁止失敗嘗試,
backup              \\預留的備份服務器,當前面激活的real server都失敗後會自動啓用該服務器
fail_timeout=20s    \\失敗超時時間,默認是10s。根據業務需求去配置,常規業務2-3秒合理,失敗以後,20秒以後在檢測服務是否正常
down                \\這標誌着服務器永遠不可用
max_conns=10        \\最大併發鏈接數,超過10個鏈接沒法訪問;保護節點
slow_start=10s      \\後端服務器由down轉爲up,加入到集羣的時間
server x.x.x.x:80  max_fails=2 fail_timeout=20s;     \\     每隔20秒鐘檢測後端服務是否正常2次,若是後端服務down機,自動切換到其它正常機器,若是後端機器由down改爲up狀態,又自動加入到web集羣中

2.配置案例vim

#vim /usr/local/nginx/conf.d/www.test.com.conf 
upstream  node {
        server 192.9.191.31:8001 down;
        server 192.9.191.31:8002 backup;
        server 192.9.191.31:8003 max_fail=1 fail_timeout=10s;       
}
server {
        listen 80;
        server_name www.test.com;
        location / {
                proxy_pass http://node;
        }
}

(4)upstream調度算法

1.調度算法詳解後端

rr輪詢      \\按時間順序逐一分配到不一樣的後端服務器,默認調度算法
weight  \\加權輪詢,weight值越大,分配到訪問概率越大
ip_hash    \\同一個ip請求web服務器,第一次扔給一臺服務器,下次同一個ip都會扔給同一臺服務器,能夠解決動態網頁session共享問題,可是會破壞負載均衡,請求分配不均,最大的問題是NAT;建議不要使用ip_hash方式,使用redis方式進行會話共享;
fair            \\第三方動態算法,按照後端服務器RS的響應時間來分配請求,響應時間短的優先分配
url_hash      \\按訪問url的hash結果來分配請求,讓每一個url定向到同一個後端服務器,url_hash和ip_hash相似,url_hash用於web緩存,ip_hash用於會話保持,例如www.baidu.com/1.html和www.baidu.com/index.html這兩個url會分配不一樣的後端服務器,必定要記錄url包含請求的資源例如index.html等
一直性hash  \\淘寶tengine,
least_conn  \\最少鏈接數

2.weight加權配置案例緩存

upstream  node {
        server 192.9.191.31:8001;
        server 192.9.191.31:8002 weight=5;      
}

3.ip_hash配置案例服務器

upstream  node {
        ip_hash;
        server 192.9.191.31:8001;
        server 192.9.191.31:8002;       
}

4.url_hash配置案例,注意低版本的nginx不支持

upstream  node {
        hash $request_uri;
        server 192.9.191.31:8001;
        server 192.9.191.31:8002;       
}
相關文章
相關標籤/搜索