keepalived健康檢查方式

1、健康檢查方式html

keepalived對後端realserver的健康檢查方式主要有如下幾種web

    TCP_CHECK:工做在第4層,keepalived向後端服務器發起一個tcp鏈接請求,若是後端服務器沒有響應或超時,那麼這個後端將從服務器池中移除。
    HTTP_GET:工做在第5層,向指定的URL執行http請求,將獲得的結果用md5加密並與指定的md5值比較看是否匹配,不匹配則從服務器池中移除;此外還能夠指定http返回碼來判斷檢測是否成功。HTTP_GET能夠指定多個URL用於檢測,這個一臺服務器有多個虛擬主機的狀況下比較好用。
    SSL_GET:跟上面的HTTP_GET類似,不一樣的只是用SSL鏈接
    MISC_CHECK:用腳原本檢測,腳本若是帶有參數,需將腳本和參數放入雙引號內。腳本的返回值需爲:
            0)  檢測成功
            1)  檢測失敗,將從服務器池中移除
            2-255)檢測成功;若是有設置misc_dynamic,權重自動調整爲 退出碼-2,如退出碼爲200,權重自動調整爲198=200-2。
    SMTP_CHECK:用來檢測郵件服務的smtp的



2、相關配置:後端

    delay_loop 隔多長時間作一次健康檢測,單位爲秒
    connect_timeout  鏈接超時時間,單位爲秒
    nb_get_retry  檢測失敗後的重試次數,若是達到重試次數仍然失敗,將後端從服務器池中移除。
    delay_before_retry  失敗重試的間隔時間,單位爲秒



3、示例bash

1)HTTP_GET服務器

  HTTP_GET {
            url {
               path /index.html
               digest 5b6d74f1453e20c09d6a20d909779ad7
            }
            ## status_code 200
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 7
    }

##digest的值用genhash生成,genhash由keepalived自帶,通常位於安裝目錄中的bin目錄,生成方法:網絡

#./genhash -s realserverIP -p port -u url
如
#./genhash -s 192.168.1.100 -p 80 -u /index.html


2)TCP_CHECKtcp

TCP_CHECK {
            connect_port 80
            connect_timeout 6
            nb_get_retry 3
            delay_before_retry 3
      }


3)MISC_CHECKide

  MISC_CHECK {
            misc_path "/opt/mytools/check_web.sh web1" #腳本名,需全路徑
            misc_timeout 30             #腳本執行的超時時間
            misc_dynamic                  #動態調整服務器權重
      }


--------------------------------------------------------華麗神奇的分割線--------------------------------------------------------oop

以上轉自:http://blog.chinaunix.net/uid-10480699-id-5179873.htmlpost

--------------------------------------------------------華麗神奇的分割線--------------------------------------------------------




keepalived具備很強大、靈活的後端檢測方式,其具備HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK 幾種健康檢測方式 ,在分別介紹各類檢測方式以前,先糾正一個常見的理論問題 。在百度百科 及 keepalived官方老文檔(田逸提交的)中,對keepalived的描述是其具備三、四、7層交換及健康檢測功能。不過根據官網對當前版本的介紹和這有些出入 。


網上一些文檔的介紹以下:

    layer 3層檢測:進行ICMP ping包檢測,確認主機是否存活,若是異常,則會該主機從服務器集羣中剔除;

    layer 4層檢測:進行端口檢測,例如80、3306等,端口不通時,將服務器從集羣中剔除;

    layer 7層檢測:這個就是基於應用的了,如http返回碼是否爲200,確認主機是否正常。


固然,上面這些對keepalived的描述不能說不對,只能說不許確 。對於當前的最近版原本說,管網上關於checkers 的描述以下:

    This is one of the main Keepalived functionnality. Checkers are in charge of realserver healthchecking.

    A checker test if realserver is alive, this test end on a binary decision :

    remove or add realserver from/into the LVS topology. The internal checker design is realtime networking software,

    it use a fully multi-threaded FSM design (Finite State Machine).

    This checker stack provide LVS topology manipulation accoring to layer4 to layer5/7 test results.

    Its run in an independent process monitored by parent process


上面的描述很清楚,是layer4 to layer5/7 ,並不包含上面所謂的三層交換檢測 。不過也並不能說網上這些說法是不許確的,由於三層相較於layer5/7這些,屬於低層級的基本功能,基於MISC_CHECK 進行ICMP ping 三層網絡檢測徹底是不存在問題的 。不過僅僅經過ping確認一個服務是否正常,顯然也過低端了。---(本人有「潔癖」 ,以上爲對比官網描述和當下網上資料後的一點心得)



1、HTTP及SSL GET檢測

這裏有幾個要點:

一、二者都有兩種檢測方式,一種是簡單的基於返回碼確認;另外一種是基於確認後端頁面內容hash值,確認先後是否發生變化(是否是感受有點高端,還有簡單的防止頁面被篡改的做用,固然,動態頁面顯然不行);

二、二者都是處理簡單的GET請求,基於post返回值確認是否正常,這種方法顯然不適用 ,不過POST方式是能夠經過MISC_CHECK方式進行支持檢測的;

三、二者配置語法上相同,只不過類型名不一樣而已 。同屬於大的web請求範疇,只不過一個走的HTTP協議,一個走的HTTPS協議;


基於狀態碼的檢測

配置以下:

   real_server 192.168.2.188 80 {
          weight 1
          HTTP_GET {
              url {
              path /index.html
              status_code 200      #http://192.168.2.188/index.html的返回狀態碼
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }

基於genhash的檢測

配置以下:

real_server 192.168.2.188 80 {
         weight 1
         HTTP_GET {
           url {
           path /index.html
           digest bfaa334fdd71444e45eca3b7a1679a4a  #http://192.168.2.188/index.html的digest值
            }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }

安裝完keepalived包,系統中會多出一個命令genhash,經過該命令能夠獲取頁面的hash串,以下是我更改某個頁面先後的digest值:

 [root@lvs-dr ~]# genhash  -s 192.168.122.10 -p 80 -u /index.html
    MD5SUM = 6df8d89daedcbb90e3f0c1d1f82cbcf6
    [root@lvs-dr ~]# genhash  -s 192.168.122.10 -p 80 -u /index.html
    MD5SUM = e6368a07d59e3922d2f428b2acd27090

也能夠參考官方給出的文檔(包安裝後,會有該文件生成)。



2、TCP_CHECK 檢測

配置以下:

real_server 192.168.2.100 80 {
            weight 100
            TCP_CHECK {
                connect_timeout 3  #鏈接超時時間
                nb_get_retry 3  #重連次數
                delay_before_retry 3  #重連間隔
                connect_port 80
            }
        }


這個在安裝包附帶的文檔中也有示例 。並且其還能夠配合HTTP_GET和SSL_GET一塊兒用,以下:

   real_server 192.168.201.100 443 {
            weight 1
            SSL_GET {
                url {
                  path /
                  digest ff20ad2481f97b1754ef3e12ecd3a9cc
                }
                connect_port    444
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }

以上配置也是安裝包中的示例 。



3、SMTP檢測

SMTP這個顧名思義,主要用於郵件系統SMTP協議的檢測,具體以下示例:

    SMTP_CHECK {
        connect_timeout 10
        retry 2
        delay_before_retry 5
        helo_name foo.bar.com
        host {
            connect_ip 172.16.1.11
        }
        host {
            connect_ip  192.168.155.10
        }
    }

這裏也能夠指定鏈接的端口(默認確定是25啊),監聽的地址 ,更多也能夠參看幫助文檔 。



4、MISC_CHECK檢測

這個是經過調用外部配置名腳本進行檢測確認後端主機是否正常的方法 。

 MISC_CHECK {
        misc_path <STRING>|<QUOTED-STRING># 外部程序或者腳本路徑
        misc_timeout <INT># 執行腳本的超時時間
        misc_dynamic #若是設置了misc_dynamic,healthchecker程序的退出狀態碼會用來動態調整服務器的權重(weight).
        #返回0:健康檢查OK,權重不被修改
        #返回1:健康檢查失敗,權重設爲0
        #返回2-255:健康檢查OK,權重設置爲:退出狀態碼-2,好比返回255,那麼weight=255-2=253
    }


對應的腳本後面是支持傳參的,兩個示例以下:

    #不傳參配置

  real_server 192.168.200.6 1358 {
        weight 1
        MISC_CHECK {
          misc_path /usr/local/bin/script.sh
        }
    }

    

#傳參配置

 real_server 192.168.200.6 1358 {
        weight 1
        MISC_CHECK {
          misc_path "/usr/local/bin/script.sh  arg1  arg2"
        }
    }

--------------------------------------------------------華麗神奇的分割線--------------------------------------------------------

以上轉自:http://www.361way.com/keepalived-health-check/5218.html

--------------------------------------------------------華麗神奇的分割線--------------------------------------------------------

相關文章
相關標籤/搜索