Keepalived監控後端TCP協議的配置很好寫,直接用TCP_CHECK就行了.
而監控UDP協議就沒有UDP_CHECK了,需要用到MISC_CHECK來調用外部的腳本去判斷UDP端口是否開啓來做到UDP健康狀態檢查.
首先我們知道檢測UDP端口是否開啓可以使用linux下的nc命令.
例子:
1
2[root@lvs-proxy2-1 ~]# nc -zu -w 1 10.0.0.193 443
Connection to 10.0.0.193 443 port [udp/https] succeeded!
-u UDP模式
-z 如果端口無迴應的時候加上;如果有迴應-z參數需去掉(掃描端口是否打開用)
-w 如果端口有迴應數據,那麼必須加上-w參數,設爲1秒,nc則1秒後斷開連接
我們可以通過grep succeeded字段來判斷UDP端口是否開啓.那麼檢測腳本就可以寫[root@lvs-proxy2-1 ~]# cat /usr/local/scripts/keepalived/UDP_CHECK.sh
#!/bin/bash /usr/bin/nc -uz -w1 $1 $2 | grep succeeded >/dev/null exit $?
通過返回的狀態 $? 傳遞給keepalived .如果grep succeeded爲0 則$?爲1
Keepalived MISC_CHECK 返回的狀態碼 1爲失敗,0爲正常. 具體的可以去查看MISC_CHECK的詳細說明.
接下來做keepalived的配置:
virtual_server *.*.*.* 443 { delay_loop 1 lb_algo rr lb_kind NAT # persistence_timeout 5 protocol UDP real_server 10.0.0.193 443 { MISC_CHECK { //這裏注意MISC_CHECK與{之間要有空格. misc_path"/usr/local/scripts/keepalived/UDP_CHECK.sh 10.0.0.193 443" misc_timeout 10 } } }