天天看點

nginx負載均衡的常用政策

文章目錄

    • 一、什麼是負載均衡
    • 二、 負載均衡政策
      • 1、輪詢(預設)
      • 2、權重 weight
      • 3、ip_hash( IP綁定)
      • 4、fair(第三方插件)
      • 5、url_hash(第三方插件)
    • 三、負載均衡配置的狀态參數
    • 四、配置執行個體:

一、什麼是負載均衡

當一台伺服器的機關時間内的通路量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗,我們通過負載均衡的方式來分擔伺服器壓力。

我們可以建立很多很多伺服器,組成一個伺服器叢集,當使用者通路網站時,先通路一個中間伺服器,在讓這個中間伺服器在伺服器叢集中選擇一個壓力較小的伺服器,然後将該通路請求引入該伺服器。

如此以來,使用者的每次通路,都會保證伺服器叢集中的每個伺服器壓力趨于平衡,分擔了伺服器壓力,避免了伺服器崩潰的情況。

負載均衡是用反向代理的原理實作的。

二、 負載均衡政策

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;
}
           

權重越高,在被通路的機率越大,如上例,分别是30%,70%。

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(第三方插件)

根據伺服器的響應時間來配置設定請求,響應時間短的優先配置設定,即負載壓力小的優先會配置設定。

由于fair子產品是第三方提供的,是以在編譯nginx源碼的時候,需要将fair添加到nginx子產品中。

假設我的nginx是通過源碼安裝的,安裝在/opt/nginx目錄下,而且安裝時沒有添加fair子產品。

1)下載下傳fair子產品源碼

下載下傳位址:https://github.com/xyang0917/nginx-upstream-fair

cd /opt
wget https://github.com/xyang0917/nginx-upstream-fair/archive/master.zip
unzip master.zip
           

解壓後的目錄名為:nginx-upstream-fair-master

2) 重新編譯nginx,将fair子產品添加到編譯參數

我的 nginx 源碼目錄在/opt/nginx-1.10.0

cd /opt/nginx-nginx-1.10.0
./configure --prefix=/opt/nginx --add-module=/opt/nginx-upstream-fair-master
make
           

注意:不要執行

make install

,這樣會覆寫之前nginx的配置 。

3) 使用新編譯的 nginx 執行檔案

新編譯後的 nginx 執行程式,放在nginx源碼的

objs

目錄下, 将

objs

目錄下新編譯的 nginx 可執行程式拷貝到

/opt/nginx/sbin/

目錄下,覆寫之前安裝的nginx 。

ps -aux | grep nginx
kill -9  nginx程序ID                                 # 停止nginx服務
cp  /opt/nginx-1.10.0/objs/nginx  /opt/nginx/sbin/  # 覆寫舊的nginx
nginx                                               # 啟動服務
           

配置使用fair負載政策子產品:

upstream tomcats {
    fair;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
    server 192.168.0.102:8080;
}
           

由于采用fair負載政策,使用 weigth 參數改變負載權重将無效。

5、url_hash(第三方插件)

按通路url的hash結果來配置設定請求,使每個url定向 。

到同一個後端伺服器,後端伺服器為緩存時比較有效。

upstream backserver {
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
    
    hash $request_uri;
    hash_method crc32;
}
           

場景:如果現在我們的電商項目出現了一個爆品,那個通路這個爆品的請求會增多。

若此時使用 url hash ,那麼請求會壓到同一台伺服器上,這樣顯然是不合理的。

nginx 1.7.2 版本以後,url_hash 子產品已經內建到了 nginx 源碼當中,不需要單獨安裝。之前的版本仍需要單獨安裝,下載下傳位址:https://github.com/evanmiller/nginx_upstream_hash 。

安裝方法和 fair 子產品一樣,先下載下傳url_hash源碼,然後重新編譯nginx源碼,将url_hash子產品添加到編譯配置參數當中,最後将編譯後生成的

nginx 二進制檔案

替換之前安裝的

nginx

二進制檔案即可。

三、負載均衡配置的狀态參數

  1. down

    : 表示下線,此 server 暫時不參與負載
  2. weight

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

    :允許請求失敗的次數預設為1 。當超過最大次數時,傳回 proxy_next_upstream 子產品定義的錯誤
  4. fail_timeout

    :在經曆了max_fails次失敗後,暫停服務的時間。 max_fails可以和 fail_timeout一起使用。
  5. backup

    : 預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,是以這台機器的壓力最輕。

四、配置執行個體:

#user  nobody;
worker_processes  4;

events {
    # 最大并發數
    worker_connections  1024;
}

http{

    # 待選伺服器清單
    upstream myproject{
        # ip_hash指令,将同一使用者引入同一伺服器。
        ip_hash;
        server 125.219.42.4 fail_timeout=60s;
        server 172.31.2.183;
    }

    server{
        # 監聽端口
        listen 80;
        # 根目錄下
        location / {
            # 選擇哪個伺服器清單
            proxy_pass http://myproject;
        }
    }
    
}
           

繼續閱讀