keepalived使用nc命令檢測udp端口

keepalived支持的健康檢測方式有:HTTP_GET|SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK。
因爲keepalived自身並不支持udp檢測,有TCP_CHECK可是沒有UDP_CHECK,因此這裏只能使用MISC_CHECK混合檢測方式調用外部腳原本對udp協議進行健康檢測。vim

首先,咱們知道檢測udp端口是否開啓能夠使用nc命令。bash

# nc --help
Ncat 6.40 ( http://nmap.org/ncat )
Usage: ncat [options] [hostname] [port]

-w, --wait <time>:Connect timeout;鏈接超時時長。例如設爲10秒,若是10秒後未鏈接成功則中止發起鏈接請求並返回失敗信息
-v, --verbose:Set verbosity level
-u, --udp:Use UDP instead of default TCP
-n, --nodns:Do not resolve hostnames via DNS
-z:zero-I/O mode [used for scanning];若是端口無迴應的時候加上;若是有迴應-z參數需去掉(掃描端口是否打開)

在debian下,nc檢測成功後返回的是open,而不是其餘OS常見的succeeded。因此這裏能夠經過grep open字段來判斷udp端口是否開啓。oop

# nc -unvz -w 1 192.168.10.88 2012
(UNKNOWN) [192.168.10.88] 2012 (?) open

編寫檢測腳本:code

# vim /etc/keepalived/UDP_CHECK.sh

#!/bin/bash
/bin/nc -unvz -w 1 $1 $2 2>&1 | grep open &> /dev/null
exit $?

經過返回的狀態碼$?傳遞給keepalived,若是grep open爲0,則$?爲1,若是grep open爲1,則$?爲0。server

MISC_CHECK 返回的狀態碼 1爲失敗,0爲正常,詳情能夠查看示例文件的說明。dns

配置keepalived:it

virtual_server 122.14.206.125 2012 {
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    delay_loop 20
    protocol UDP

    real_server 117.119.33.41 2012 {
        weight 5
        MISC_CHECK {
            misc_path "/etc/keepalived/UDP_CHECK.sh 192.168.10.88 2012"
            misc_timeout 10
        }
    }

    real_server 117.119.33.12 2012 {
        weight 5
        MISC_CHECK {
            misc_path "/etc/keepalived/UDP_CHECK.sh 192.168.10.89 2012"
            misc_timeout 10
        }
    }
}
相關文章
相關標籤/搜索