nginx中的健康檢查方案
ngx_http_proxy_module模塊(自帶) 超時時間設(shè)置
無特別場景需求都可直接采用默認60s
- 語法:proxy_connect_timeout ``time``;
- 默認值:proxy_connect_timeout 60s;
- 作用域:http, server, location
該指令設(shè)置與upstream server的連接超時時間,有必要記住,這個超時不能超過75秒。這個時間Nginx與上游服務(wù)器
嘗試建立連接,如果60s內(nèi)都沒有建立成功,則會放棄這個連接。
- 語法:proxy_read_timeout ``time``;
- 默認值:proxy_read_timeout 60s;
- 作用域:http, server, location
定義從后端服務(wù)器讀取響應(yīng)的超時。
此超時是指相鄰兩次讀操作之間的最長時間間隔,而不是整個響應(yīng)傳輸完成的最長時間。
如果后端服務(wù)器在超時時間段內(nèi)沒有傳輸任何數(shù)據(jù),連接將被關(guān)閉(連接成功后_等候后端服務(wù)器響應(yīng)時間_其實已經(jīng)進入后端的排隊之中等候處理(也可以說是后端服務(wù)器處理請求的時間))。
- 語法:proxy_send_timeout time;
- 默認值:proxy_send_timeout 60s;
- 作用域:http, server, location
設(shè)置將請求傳輸?shù)酱矸?wù)器的超時。僅在兩個連續(xù)的寫操作之間設(shè)置超時,而不是為整個請求的傳輸。
如果代理服務(wù)器在此時間內(nèi)未收到任何內(nèi)容,則關(guān)閉連接。(后端服務(wù)器數(shù)據(jù)回傳時間_就是在規(guī)定時間之內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù))。
- 語法:proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 |http_404 | off ...;
- 默認值:proxy_next_upstream error timeout;
- 作用域:http, server, location
后端返回狀態(tài)碼:指定在何種情況下一個失敗的請求應(yīng)該被發(fā)送到下一臺后端服務(wù)器
1、nginx 被動check 方法
Nginx(自帶)有健康檢查模塊:ngx_http_upstream_module,可以做到基本的健康檢查
參數(shù):
- max_fails:失敗嘗試最大次數(shù);超出此處指定的次數(shù)時,server將被標記為不可用,默認為1
- fail_timeout:后端服務(wù)器標記為不可用狀態(tài)的連接超時時長,默認10s
- backup:將服務(wù)器標記為"備用",即所有服務(wù)器均不可用時才啟用
例如:
server x.x.x.x:8080 max_fails=3 fail_timeout=30s;` server x.x.x.x:8080 max_fails=3 fail_timeout=30s;`
說明:
代表在30秒內(nèi)某一應(yīng)用失敗3次,認為該應(yīng)用宕機,后等待30秒,這期間內(nèi)不會再把新請求發(fā)送到宕機應(yīng)用,而是直接發(fā)到正常的那一臺,等待的這30秒時間到后再有請求進來繼續(xù)嘗試連接宕機應(yīng)用且僅嘗試1次,如果還是失敗,則繼續(xù)等待30秒...以此循環(huán),直到恢復。`
缺點:
Nginx只有當有訪問時后,才發(fā)起對后端節(jié)點探測。
如果本次請求中,節(jié)點正好出現(xiàn)故障,Nginx依然將請求轉(zhuǎn)交給故障的節(jié)點,然后再轉(zhuǎn)交給健康的節(jié)點處理。
所以不會影響到這次請求的正常進行。
但是會影響效率,因為多了一次轉(zhuǎn)發(fā),而且自帶模塊無法做到預警。
2、nginx 主動check 方法
nginx_upstream_check_module模塊對后端節(jié)點做主動健康檢查(淘寶開發(fā))
主動check:心跳檢測,為非業(yè)務(wù)流量,nginx本身發(fā)起健康檢測請求。
注意:check模塊版本和Nginx版本要求有限制。做補丁包的時候注意版本選擇
check指令只能出現(xiàn)在upstream中:
- interval:向后端發(fā)送的健康檢查包的間隔。
- fall:如果連續(xù)失敗次數(shù)達到fall_count,服務(wù)器就被認為是down。
- rise:如果連續(xù)成功次數(shù)達到rise_count,服務(wù)器就被認為是up。
- timeout:后端健康請求的超時時間。
- default_down:設(shè)定初始時服務(wù)器的狀態(tài),如果是true,就說明默認是down的,如果是false,就是up的。默認值是true,也就是一開始服務(wù)器認為是不可用,要等健康檢查包達到一定成功次數(shù)以后才會被認為是健康的
健康檢查包的類型,常用(tcp\http):
- tcp:簡單的tcp連接,連接成功,就說明后端正常(網(wǎng)絡(luò)層探測,通過發(fā)送SYN握手報文來檢測服務(wù)器端口是否存活)。
- http:發(fā)送HTTP請求,通過后端的回復包的狀態(tài)來判斷后端是否存活
- 不常用:ajp\ssl_hello\mysql\fastcgi
- 說明:(將HTTP模式的負載均衡修改為TCP模式后,負載均衡將只檢查監(jiān)聽端口狀態(tài),不檢查HTTP狀態(tài),會導致負載均衡無法實時獲知HTTP應(yīng)用是否出現(xiàn)問題。)
TCP模式配置:
upstream xxxx { server ip:port; server ip:port; check interval=5000 rise=2 fall=3 timeout=1000 type=tcp; }
HTTP模式配置:(需要提供一個健康檢查的url)
upstream xxxx { server ip:port; server ip:port; check interval=5000 rise=2 fall=3 timeout=1000 type=http; check_http_send "HEAD / HTTP/1.0\r\n\r\n"; #默認用HEAD方式 請求缺省頁 check_http_expect_alive http_2xx http_3xx; }
說明:
每個5秒檢測一次(單位為毫秒),請求2次正常則標記 realserver狀態(tài)為up,如果檢測 3 次都失敗,則標記 realserver的狀態(tài)為down,超時時間為1秒(單位為毫秒)。
- check_http_send: http 請求方式 如:("GET /index.html HTTP/1.0\r\n\r\n")注意:請求的uri不宜過大
- check_http_expect_alive: 定義健康的狀態(tài)碼
server 中配置可界面顯示后端健康狀態(tài) location /status { check_status; access_log off; }
3、目前環(huán)境配置建議:為保證業(yè)務(wù)流量無影響,優(yōu)先采用主動check方式
后端應(yīng)用未配置(提供)健康檢查url情況
upstream xxxx { server ip:port; server ip:port; check interval=5000 rise=2 fall=3 timeout=1000 type=tcp; }
后端提供健康檢查url 情況
upstream xxxx { server ip:port; server ip:port; check interval=5000 rise=2 fall=3 timeout=1000 type=http; check_http_send "HEAD /url HTTP/1.0\r\n\r\n"; # /url指提供健康檢查的url check_http_expect_alive http_2xx http_3xx; }
server 中配置。用于界面顯示后端健康狀態(tài) location /status { check_status; access_log off; }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx配置將HTTPS請求轉(zhuǎn)換成HTTP的方法實現(xiàn)
Nginx是一個很流行、很強大的代理軟件,我們可以借助Nginx,設(shè)置 http強轉(zhuǎn)https,本文就來詳細的介紹一下,感興趣的可以了解一下2023-09-09nginx結(jié)合keepalived實現(xiàn)高可用的完整步驟
這篇文章主要給大家介紹了關(guān)于nginx結(jié)合keepalived實現(xiàn)高可用的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用nginx具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-12-12nginx+lua+redis實現(xiàn)降級的示例代碼
隨著用戶訪問量的激增,網(wǎng)站或電商平臺可能會面臨系統(tǒng)超負載的問題,導致注冊、下單、支付等功能出現(xiàn)問題,為保障核心服務(wù)的高可用性,可以采用降級策略,本文就來介紹一下nginx+lua+redis降級,感興趣的可以了解學習2024-10-10Nginx設(shè)置Referer來防止盜圖的實現(xiàn)方法
這篇文章主要介紹了Nginx設(shè)置Referer來防止盜圖的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04