使用nginx_upstream_check_module對后端服務進行健康檢測


nginx可以方便快捷的配置負載均衡,並且可以配置失效策略,負載均衡算法等。如下,是一個簡單的配置。

 

 

如上,配置了兩台后端服務,一個81端口,一個82端口,81的權重為1,82的權重為2。每10s內如果失效次數到達2次,則任務后端服務不可用,判定為不可用,會將其從后端列表中摘除,10s再次加入后端服務器列表。

nginx默認的健康監測機制為被動檢測,沒有主動進行心跳檢測。還好,有nginx_upstream_check_module模塊,配置了nginx_upstream_check_module模塊,就可以主動進行心跳檢測了。

配置模塊
1)首先,停止nginx。進入nginx安裝包,如我的路徑是/root/lnmp1.5/src/nginx-1.14.1

cd /root/lnmp1.5/src/nginx-1.14.1

2)為了統一管理第三方模塊,新建了一個modules目錄,並進入modules目錄

mkdir modules;
cd modules;

 

3)下載nginx_upstream_check_module模塊

wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master;
unzip master;
patch -p1 < /root/lnmp1.5/src/nginx-1.14.1/modules/nginx_upstream_check_module-master/check_1.14.0+.patch

 

4)查看nginx原本的配置參數

nginx -V

 

5)重新編譯,要使用上面輸出的配置參數

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/root/lnmp1.5/src/openssl-1.0.2o --add-module=/root/lnmp1.5/src/nginx-1.14.1/modules/nginx_upstream_check_module-master;
make;

 

最后的add-module就是加載了nginx_upstream_check_module模塊。

然后使用make編譯。注意,不要make install。

6)將生成的nginx替換原來的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak;
cp ./objs/nginx /usr/local/nginx/sbin/;

 

開啟nginx服務。

service nginx start;

 

配置心跳檢測

upstream backend {
            #ip_hash;
            server 127.0.0.1:81 max_fails=2 fail_timeout=10s weight=1;
            server 127.0.0.1:82 max_fails=2 fail_timeout=10s weight=2;
 
            check interval=5000 rise=2 fall=3 timeout=3000 type=http;
            check_http_send "HEAD / HTTP/1.0\r\n\r\n";
            check_http_expect_alive http_2xx http_3xx;
        }

 

上述心跳檢測的規則是:每5s檢測一次,失敗3次則標識后端服務為不存活,成功兩次標識為存活,超時時間為3s,檢測方式為http。

心跳檢測的方式有http和tcp兩種方式。如果只是tcp方式,則下面的check_http_send和check_http_expect_alive不需要。

當type為 http,可使用check_http_send來配置http監控檢查包發送的請求內容,

 check_http_send "GET /url/index.html  HTTP/1.0\r\n\r\n";


為了減少傳輸數據量,推薦采用 HEAD 方法。

 check_http_send "HEAD / HTTP/1.0\r\n\r\n";


當采用長連接進行健康檢查時,需在該指令中添加keep-alive請求頭。

采用 GET 請求uri的size不宜過大,確保在1個interval內傳輸完成,否則判后端服務器或網絡異常。

check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
 

指定HTTP回復的健康檢查成功狀態碼,默認認為2XX和3XX的狀態是健康的,但無法精確區分像301、302。

check_http_expect_alive [http_2xx | http_3xx | http_4xx | http_5xx]

 

 

 

原文鏈接:https://blog.csdn.net/maquealone/article/details/87261214

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM