1、安装
首先要安装epel的扩展yum包,然后
yum install nc -y
2、用法说明
安装完成后man nc有详细说明
监测udp端口是否打开
nc -v -D -uz -w 5 192.168.10.101 40175
3、示例
3.1 在xxxx项目中的udpcheck.sh内容
#!/bin/sh
echo "12" |nc -u -w1 $1 $2 |grep succeeded >/dev/null
exit $?
3.2 各参数的含义和说明
-z 如果端口无回应的时候加上;如果有回应-z参数需去掉(扫描端口是否打开用)
-w 如果端口有回应数据,那么必须加上-w参数,设为1秒,nc则1秒后断开连接
如果返回字符为ok,那么grep 也应修改为ok。
4、关于xxxx项目中的使用
4.1 根据网上找的例子进行参考
keepalived 的配置一小段
利用上面的nc可以写个脚本放到keepalived配置上,可以模仿下面做出udp的监测脚本
# Check for UDP
virtual_server 10.0.2.16 53 {
delay_loop 6 #这个是每隔多少秒就去测试客户端是否正常
lb_algo wlc
protocol UDP
real_server 10.0.2.20 53 {
weight 100
MISC_CHECK {
connect_timeout 6
misc_path "/etc/keepalived/dnscheck -h 10.0.2.20"
}
}
real_server 10.0.2.21 53 {
weight 100
MISC_CHECK {
connect_timeout 6
misc_path "/etc/keepalived/dnscheck -h 10.0.2.21"
}
}
}
4.2 在 lb01 和 lb02 上的keepalived.conf 增加如下的udp端口监测
MISC_CHECK {
connect_timeout 1 #这个貌似是在N秒内重发的意思,从日志上看设成1秒,也会重试6-7次左右(待继续考证)
misc_path "/etc/keepalived/udpcheck.sh 119.254.82.228 40118"
}
}
4.3 udpcheck的脚本内容
udpcheck.sh 需要两个参数 :第一个是ip,第二个是upd端口
刚开始udp的服务端对测试不返回数据,那么相应的脚本内容为:
#!/bin/sh
nc -uz -w1 $1 $2 |grep succeeded >/dev/null
exit $? # 如果nc的命令探测端口成功则返回0,否则为1。如果keeplived发现返回的是1,则自动调用ipvsadm将该realserver从可用的负载列表中剔除
后来udpserver进行了修改,如果接收到两个字符宽度的udp包,则向发送端返回ok,则脚本相应为
#!/bin/sh
echo "12" |nc -u -w1 $1 $2 |grep ok >/dev/null
exit $?
20121101 发现udp不能走dr的原因:udp的服务不会以vip向客户端返回信息,而是以本机ip向客户端返回
通过 强制udp服务监听vip解决 lvs对udp服务的监控
1、第一步
lvs的两台服务器上运行 ssh-keygen -t rsa 生成公钥
2、第二步
将公钥文件 拷贝的 27和28上,
scp -P 2247 /root/.ssh/id_rsa.pub root@xx.xx.xx.28:/root/
3、将该文件 放到 /root/.ssh/
cat ../id_rsa.pub.2 >> authorized_keys
实际配置 lvs的udp监控 脚本
--------------------------
1、keepalived的配置
[root@lvs_master keepalived]# more keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
someone@some.com
}
notification_email_from xtools@tiros.com.cn
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xx.xx.xx.26
192.168.0.1
}
}
virtual_server xx.xx.xx.226 40136 {
delay_loop 60
lb_algo wrr
lb_kind NAT
persistence_timeout 50
protocol UDP
real_server 192.168.0.11 40136 {
weight 100
MISC_CHECK {
connect_timeout 1
misc_path "/etc/keepalived/udpcheck2.sh 192.168.0.11 40136"
}
}
real_server 192.168.0.12 40136 {
weight 100
MISC_CHECK {
connect_timeout 1
misc_path "/etc/keepalived/udpcheck2.sh 192.168.0.12 40136"
}
}
}
virtual_server xx.xx.xx.26 40118 {
delay_loop 120
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol UDP
real_server xx.xx.xx.27 40118 {
weight 100
MISC_CHECK {
connect_timeout 1
misc_path "/etc/keepalived/udpcheck.sh xx.xx.xx.26 40118 119.254.82.227"
}
}
real_server xx.xx.xx.28 40118 {
weight 100
MISC_CHECK {
connect_timeout 1
misc_path "/etc/keepalived/udpcheck.sh xx.xx.xx.26 40118 xx.xx.xx.28"
}
}
# real_server 192.168.0.11 40118 {
# weight 100
#}
#real_server 192.168.0.12 40118 {
# weight 100
#}
}
2、udp监控脚本
[root@lvs_master keepalived]# cat udpcheck.sh
#!/bin/sh
ssh -p 22478 root@$3 "echo "12" |nc -u -w1 $1 $2 |grep ok >/dev/null "
exit $?
需要3个参数 vip/udp port/realserver ip
[root@lvs_master keepalived]# cat udpcheck2.sh
#!/bin/sh
nc -uz -w1 $1 $2 |grep succeeded >/dev/null
exit $?
需要两个参数 realserver/udp port
阅读(6176) | 评论(0) | 转发(0) |