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秒,nc1秒后断开连接

我们可以通过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$?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
                }
        }
}