HAProxy—— 4.健康檢查

1.基本配置詳解

global                                                 # 全局參數global模塊的設置
    log         127.0.0.1 local2                      # log語法:log <address_1>[max_level_1] # 全局的日誌配置,使用log關鍵字,指定使用127.0.0.1上的syslog服務中的local0日誌設備,記錄日誌等級爲info的日誌
    chroot      /var/lib/haproxy              #工作目錄
    pidfile     /var/run/haproxy.pid          #進程pid文件
    maxconn     4000                          #最大連接數
    user        haproxy                       #所屬用戶
    group       haproxy                       #所屬用戶組
    daemon                                    #以守護進程方式運行haproxy
stats socket /var/lib/haproxy/stats       #定義socket套接字,針對在線維護很有幫助
 
defaults                                      # defaults模塊的設置
    mode                    http              #默認的模式{ tcp|http|health},health只會返回OK
    log                     global            #應用全局的日誌配置
    option                  httplog           #啓用日誌記錄HTTP請求,默認不記錄HTTP請求日誌                                                                
    option                 dontlognull        # 啓用該項,日誌中將不會記錄空連接。所謂空連接就是在上游的負載均衡器者監控系統爲了探測該 服務是否存活可用時,需要定期的連接或者獲取某一固定的組件或頁面,或者探測掃描端口是否在監聽或開放等動作被稱爲空連接;官方文檔中標註,如果該服務上游沒有其他的負載均衡器的話,建議不要使用該參數,因爲互聯網上的惡意掃描或其他動作就不會被記錄下來
    option http-server-close                  #每次請求完畢後主動關閉http通道
    option forwardfor       except 127.0.0.0/8   #如果服務器上的應用程序想記錄發起請求的客戶端的IP地址,需要在HAProxy上配置此選項, 這樣 HAProxy會把客戶端的IP信息發送給服務器,在HTTP                                                                            請求中添加"X-Forwarded-For"字段。 啓用  X-Forwarded-For,在requests                                                                            頭部插入客戶端IP發送給後端的server,使後端server獲取到客戶端的真實IP。 
    option                  redispatch       # 當使用了cookie時,haproxy將會將其請求的後端服務器的serverID插入到cookie中,以保證會話的SESSION持久性;而此時,如果後端的服務器宕掉                                                                            了, 但是客戶端的cookie是不會刷新的,如果設置此參數,將會將客戶的請                                                                            求強制定向到另外一個後端server上,以保證服務的正常。
    retries                 3              # 定義連接後端服務器的失敗重連次數,連接失敗次數超過此值後將會將對應後端服務器標記爲不可用
    timeout http-request    10s             #http請求超時時間
    timeout queue           1m              #一個請求在隊列裏的超時時間
    timeout connect         10s             #連接超時
    timeout client          1m              #客戶端超時
    timeout server          1m              #服務器端超時
    timeout http-keep-alive 10s             #設置http-keep-alive的超時時間
    timeout check           10s             #檢測超時
maxconn                 3000            #每個進程可用的最大連接數
 
listen stats                                #定義一個listen模塊,用於狀態檢測
mode http                               #模式採用http
bind 0.0.0.0:8888                       #綁定本機的地址及端口
stats enable                            #啓用狀態檢測功能
stats uri     /haproxy-status           #狀態檢測的URI
stats auth    haproxy:123456            #訪問檢測界面的用戶名和密碼
 
frontend  main *:80                         #frontend模塊的設置,定義了一個前端
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js      #這裏定義了一個acl規則
    use_backend static   if  url_static     #如果匹配到了acl,則訪問後端的static模塊
default_backend             my_webserver #如果沒有匹配到acl,則將請求丟給默認的模塊
 
backend static                          #定義第一個後端模塊,static
    balance     roundrobin              #負載均衡算法爲輪詢
server      static 127.0.0.1:80 check         #後端服務器地址
 
backend my_webserver                    #定第二個後端,my_wenserver
balance     roundrobin              #負載均衡算法
    server  web01 172.31.2.33:80  check inter 2000 fall 3 weight 30              #定義的多個後端
    server  web02 172.31.2.34:80  check inter 2000 fall 3 weight 30              #定義的多個後端
    server  web03 172.31.2.35:80  check inter 2000 fall 3 weight 30              #定義的多個後端

Haproxy作爲Loadblance,支持對backend的健康檢查,以保證在後端backend不能服務時,把從frontend進來的request分配至其他可以服務的backend,從而保證整體服務的可用性。

2. 健康檢查相關配置

httpchk <method><uri><version> 
option httpchk HEAD / HTTP/1.0
check:啓動健康檢測
inter:健康檢測時間間隔
rise:檢測服務可用的連接次數
fall:檢測服務不可用的連接次數
error-limit:往server寫數據連續失敗次數的上限,執行on-error的設定
observe<mode>:把正常服務過程作爲健康檢測請求,即實時檢測
on-error<mode>:滿足error-limit後執行的操作(fastinter、fail-check、sudden-death、mark-down)。其中fastinter表示立即按照fastinter的檢測延時進行。fail-check表示改次error作爲一次檢測;sudden-death表示模仿一次fatal,如果緊接着一次fail則server爲down;mark-down表示直接把server設置爲down狀態。
server web-node2 192.168.56.22:8080 check inter 2000 rise 30 fall 15

3. 檢測方式

3.1 通過監聽端口進行健康檢測

這種檢測方式,haproxy只會去檢查server的端口,並不能保證服務真正可用。

listen http_proxy 0.0.0.0:80
mode http
cookie SERVERID
balance roundrobin
option httpchk
server web1 192.168.1.1:80 cookie server01 check
server web2 192.168.1.2:80 cookie serve02 check inter 500 rise 1 fall 2
3.2 通過URI進行健康檢測

這種檢測方式,是用去GET後端server的web頁面,基本可以代表後端服務的可用性。

listen http_proxy 0.0.0.0:80
mode http
cookie SERVERID
balance roundrobin
option httpchk GET /index.html
server web1 192.168.1.1:80 cookie server01 check
server web2 192.168.1.2:80 cookie serve02 check inter 500 rise 1 fall 2
3.3 通過request獲取的頭部信息進行匹配進行健康檢測

這種檢測方式,是基於一些高級、精細的監測需求,通過對後端頭部訪問的頭部信息進行匹配檢測。

listen http_proxy 0.0.0.0:80
mode http
cookie SERVERID
balance roundrobin
option httpchk HEAD /index.jsp HTTP/1.1\r\n\Host:\www.xxx.com
server web1 192.168.1.1:80 cookie server01 check
server web2 192.168.1.2:80 cookie serve02 check inter 500 rise 1 fall 2

————Blueicex 2020/03/26 16:38 [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章