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