Chinaunix

标题: keepalived环境中备机服务停止后不能自动重启的问题 [打印本页]

作者: sjzwyb    时间: 2014-05-05 11:08
标题: keepalived环境中备机服务停止后不能自动重启的问题
正在测试keepalived,环境如下:
主备双机,虚拟出一个IP地址,正常情况下:主机占用虚拟IP,服务(vsftpd)在主机运行,备机服务停止。若主机出问题,VIP迁移至备机,备机服务启动,主机服务停止;测试过程中发现:若在主机运行,服务(vsftp)手动停止的话,会被keepalived及脚本自动重启。但若在备机运行(VIP及vsftpd均在备机),手动停止vsftp,则不会被启动,以下为keepalived及脚本,请高手指点:

keepalived.conf:

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id MY_KEEPALIVED
}
vrrp_script chk_alive {
   script "/usr/local/keepalived/etc/keepalived/chk_alive.sh"
   interval 1
   }
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    preempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_interface {
        eth0
        eth1
    }
    virtual_ipaddress {
        10.215.54.33
    }
    track_script {
        chk_alive
    }  
notify_master "/usr/local/keepalived/etc/keepalived/notify.sh master"
notify_backup "/usr/local/keepalived/etc/keepalived/notify.sh backup"
notify_fault  "/usr/local/keepalived/etc/keepalived/notify.sh fault"
}


chk_alive.sh:

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/loacl/bin:/usr/local/sbin:~/bin
export PATH
VIP=10.215.54.33
FindVIP=`ip addr | grep $VIP | wc -l`
Serhealth=`pgrep vsftpd | wc -l `
if [ "$FindVIP" -eq 1 -a "$Serhealth" -eq 0 ] ; then
        service vsftpd start
        sleep 10
elif [ "$FindVIP" -eq 0 -a "$Serhealth" -ge 1 ] ; then
        service vsftpd stop
        sleep 10
else
        exit 0
fi


notify.sh:

#!/bin/bash
VIP=10.215.54.33
CONTACT='root@localhost'
THISIP=`ifconfig eth0 | awk '/inet addr:/{print $2}' | awk -F: '{print $2}'`
Notify() {
        mailsubject="$THISIP is to bi $VIP master"
        mailbody="vrrp transaction,$VIP floated to $THISIP"
        echo $mailbody | mail -s "$mailsubject" $CONTACT
}
case "$1" in
        master)
                /etc/init.d/keepalived start
                service vsftpd start
                sleep 10
                exit 0
        ;;
        backup)
                service vsftpd stop
                sleep 10
                exit 0
        ;;
        fault)
                service vsftpd stop
                sleep
                exit 0
        ;;
        *)
                echo 'Usage:`basename $0` {master|backup|fault}'
                exit 1
        ;;
esac

作者: sjzwyb    时间: 2014-05-05 11:30
我靠,找到原因了,备机的脚本有问题;问题解决,谢谢各位!
作者: q1208c    时间: 2014-05-05 13:26
我不是很明白, 楼主为啥用 keepalived 来处理应用层的切换呢?
作者: sjzwyb    时间: 2014-05-05 16:07
这样只要安装keepalived就可以解决硬件(网络)和软件(应用)双机了,比较方便可靠,不然还有什么其它方便且稳定的方法吗?请指点!
作者: q1208c    时间: 2014-05-06 08:26
回复 4# sjzwyb

个人以为, keepalived 是为 lvs 设计的 四层的 HA 架构, 而且, 是基于VRRP协议的. 对于应用层的监听处理, 没有特别的优势. 更多的需要自己写相应的脚本来处理.

对于应用层的HA, 还是应该使用7层的HA软件比较好. 开源的 Pacemaker, OpenAIS 还是什么的, 都可以参考一下.
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2