Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1488103
  • 博文数量: 150
  • 博客积分: 660
  • 博客等级: 上士
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 11:39
文章分类

全部博文(150)

文章存档

2019年(4)

2018年(36)

2017年(53)

2016年(7)

2015年(3)

2014年(3)

2013年(27)

2012年(2)

2011年(1)

2006年(1)

2005年(13)

分类: 系统运维

2012-11-15 16:45:48

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
阅读(5275) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~