<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nginx實戰(zhàn)|Nginx健康檢查

          共 3094字,需瀏覽 7分鐘

           ·

          2020-09-22 22:43

          ? 開源Linux

          長按二維碼加關(guān)注~

          上一篇:盤點提高國內(nèi)訪問Github的速度的9種方案


          服務(wù)治理的一個重要任務(wù)是感知服務(wù)節(jié)點變更,完成服務(wù)自動注冊及異常節(jié)點的自動摘除。這就需要服務(wù)治理平臺能夠:及時、準(zhǔn)確的感知service節(jié)點的健康狀況。

          方案概述

          Nginx 提供了三種HTTP服務(wù)健康檢查方案供用戶選擇:

          1. TCP層默認(rèn)檢查方案:

          定時與后端服務(wù)建立一條tcp連接,鏈接建立成功則認(rèn)為服務(wù)節(jié)點是健康的。

          1. HTTP層默認(rèn)檢查方案:

          TCP層檢查有一定的局限性:

          • 很多HTTP服務(wù)是帶狀態(tài)的,端口處于listen狀態(tài)并不能代表服務(wù)已經(jīng)完成預(yù)熱;
          • 不能真實反映服務(wù)內(nèi)部處理邏輯是否產(chǎn)生擁堵。
          • 這時可以選擇http層健康檢查,會向服務(wù)發(fā)送一個http請求GET / HTTP/1.0\r\n\r\n,返回狀態(tài)是2xx或3xx時認(rèn)為后端服務(wù)正常。
          1. 自定義方案:

          可根據(jù)下文描述自定義檢查方案。

          配置參數(shù)詳解

          一個常用的健康檢查配置如下:

          check?fall=3?interval=3000?rise=2?timeout=2000?type=http;
          check_http_expect_alive?http_2xx?http_3xx?;
          check_http_send?"GET?/checkAlive?HTTP/1.0\r\n\r\n"?;

          下面針對每個配置參數(shù),進(jìn)行詳細(xì)介紹。

          check:

          check 字段參數(shù)如下:

          Syntax:?check?interval=milliseconds?[fall=count]?[rise=count]?[timeout=milliseconds]?[default_down=true|false]?[type=tcp|http|ssl_hello|mysql|ajp]?[port=check_port]
          Default:?如果沒有配置參數(shù),默認(rèn)值是:interval=30000?fall=5?rise=2?timeout=1000?default_down=true?type=tcp

          check 字段各個參數(shù)含義如下:

          • interval:向后端發(fā)送的健康檢查包的間隔。

          • fall(fall_count): 如果連續(xù)失敗次數(shù)達(dá)到fall_count,服務(wù)器就被認(rèn)為是down。

          • rise(rise_count): 如果連續(xù)成功次數(shù)達(dá)到rise_count,服務(wù)器就被認(rèn)為是up。

          • timeout: 后端健康請求的超時時間。

          • default_down: 設(shè)定初始時服務(wù)器的狀態(tài),如果是true,就說明默認(rèn)是down的,如果是false,就是up的。默認(rèn)值是true,也就是一開始服務(wù)器認(rèn)為是不可用,要等健康檢查包達(dá)到一定成功次數(shù)以后才會被認(rèn)為是健康的。

          • type:健康檢查包的類型,現(xiàn)在支持以下多種類型

            • tcp:簡單的tcp連接,如果連接成功,就說明后端正常。
            • ssl_hello:發(fā)送一個初始的SSL hello包并接受服務(wù)器的SSL hello包。
            • http:發(fā)送HTTP請求,通過后端的回復(fù)包的狀態(tài)來判斷后端是否存活。mysql: 向mysql服務(wù)器連接,通過接收服務(wù)器的greeting包來判斷后端是否存活。
            • ajp:向后端發(fā)送AJP協(xié)議的Cping包,通過接收Cpong包來判斷后端是否存活。
            • port: 指定后端服務(wù)器的檢查端口??梢灾付ú煌谡鎸嵎?wù)的后端服務(wù)器的端口,比如后端提供的是443端口的應(yīng)用,你可以去檢查80端口的狀態(tài)來判斷后端健康狀況。默認(rèn)是0,表示跟后端server提供真實服務(wù)的端口一樣。

          check_http_expect_alive:

          check_http_expect_alive 指定主動健康檢查時HTTP回復(fù)的成功狀態(tài):

          Syntax:?check_http_expect_alive?[?http_2xx?|?http_3xx?|?http_4xx?|?http_5xx?]
          Default:?http_2xx?|?http_3xx

          check_http_send:

          check_http_send 配置http健康檢查包發(fā)送的請求內(nèi)容

          為了減少傳輸數(shù)據(jù)量,推薦采用”HEAD”方法。當(dāng)采用長連接進(jìn)行健康檢查時,需在該指令中添加keep-alive請求頭,如:”HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n”。同時,在采用”GET”方法的情況下,請求uri的size不宜過大,確??梢栽?個interval內(nèi)傳輸完成,否則會被健康檢查模塊視為后端服務(wù)器或網(wǎng)絡(luò)異常。

          Syntax:?check_http_send?http_packet
          Default:?"GET?/?HTTP/1.0\r\n\r\n"

          完整示例

          完整示例,如下:

          http?{
          ????upstream?cluster1?{
          ????????#?simple?round-robin
          ????????server?192.168.0.1:80;
          ????????server?192.168.0.2:80;
          ????????check?interval=3000?rise=2?fall=5?timeout=1000?type=http;
          ????????check_http_send?"HEAD?/?HTTP/1.0\r\n\r\n";
          ????????check_http_expect_alive?http_2xx?http_3xx;
          ????}
          ????upstream?cluster2?{
          ????????#?simple?round-robin
          ????????server?192.168.0.3:80;
          ????????server?192.168.0.4:80;
          ????????check?interval=3000?rise=2?fall=5?timeout=1000?type=http;
          ????????check_keepalive_requests?100;
          ????????check_http_send?"HEAD?/?HTTP/1.1\r\nConnection:?keep-alive\r\n\r\n";
          ????????check_http_expect_alive?http_2xx?http_3xx;
          ????}
          ????server?{
          ????????listen?80;
          ????????location?/1?{
          ????????????proxy_pass?http://cluster1;
          ????????}
          ????????location?/2?{
          ????????????proxy_pass?http://cluster2;
          ????????}
          ????????location?/status?{
          ????????????check_status;
          ????????????access_log???off;
          ????????????allow?SOME.IP.ADD.RESS;
          ????????????deny?all;
          ????????}
          ????}
          }


          來源:https://ningg.top/nginx-series-health-check/


          - End -

          關(guān)注「開源Linux」加星標(biāo),提升IT技能

          瀏覽 73
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲超级高清无码第一在线视频观看 | 可以看的毛片 | 无码一区二区三区在线观看 | 内射精品视频直播 | 午夜亚洲福利视频 |