分享

Keepalived配置及典型应用案例 第2页

 mediatv 2014-01-07

参考案例二:双主模式
主备模式的缺点就是始终只有一台机器位于工作状态,另外一台机器永远是备用状态,存在资源浪费之问题。

双主模式允许两台机器均处于工作状态并互相作为备份。

搭建keepalived双方模式的要素:

1.  必须有两个虚拟IP, 分别绑定至两个节点上

2. 每个节点作为某个虚拟IP的主节点,并同时作为另外一个虚拟IP的备用节点。

3. 当某个节点产生故障时,两个虚拟IP自动绑定至正常节点上

参阅相关文章,这就相当于使用两台物理路由器(普通主机视为路由器即可),构造出两个虚拟VRRP路由器。

也就是说,两个节点的配置应该是交叉的,对同个虚拟IP,交叉互为主备。

节点A的关键配置:
vrrp_instance vip1 {

     state MASTER

    interface eth0

     virtual_router_id 51   #本机两个vrrp_instance组的此值不能相同,但对应备用节点的此值必须相同

     priority 99 #对应备用节点值应该比此值小

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.100.1 /24

    }

}

 

vrrp_instance vip2 {

     state BACKUP

    interface eth0

     virtual_router_id 52  #本机两个vrrp_instance组的此值不能相同,但对应主节点的此值必须相同

     priority 90   #主节点的值应该比此值大

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.100.2 /24

    }

}

复制节点A的配置至B节点,并将MASTER修改为BACKUP, 同时将BACKUP修改为MASTER。优先级和虚拟路由器组id(virtual_route_id)要特别注意其它配置必须保持相同。

B节点的配置:
vrrp_instance vip1 {

     state BACKUP

    interface eth0

     virtual_router_id 51

     priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.100.1 /24

    }

}

 

vrrp_instance vip2 {

     state MASTER

    interface eth0

     virtual_router_id 52

     priority 99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.100.2 /24

    }

}

另外,为了保证服务可靠性,我们应该在每个节点运行shell脚本检测本机的服务是否正常,一旦检测到服务异常时,停止掉本机的 keepalived, 如此虚拟IP自动转移到备用机器之上,如每隔3秒检测一次本机服务状态,如果连接3次检测失败,则停止掉keepalived实例。同时如果本机服务是正 常的,但是keepalived没有启动(故障恢复之后),则启动keepalived,以达到故障恢复之目的。

check_service.sh文件的内容

#!/bin/bash

 

pidfile=/var/lock/subsys/`basename $0`.pid

if [ -f $pidfile ] && [ -e /proc/`cat $pidfile` ] ; then

    exit 1

fi

 

trap "rm -fr $pidfile ; exit 0" 1 2 3 15

echo $$ > $pidfile

 

maxfails=3

fails=0

success=0

 

while [ 1 ]

do

    /usr/bin/wget --timeout=3 --tries=1 http://127.0.0.1/ -q -O /dev/null

    if [ $? -ne 0 ] ; then

        let fails=$[$fails+1]

        success=0

    else

        fails=0

        let success=$[$success+1]

    fi

 

    if [ $fails -ge $maxfails ] ; then

        fails=0

        success=0

 

        #check keepalived is running ? try to stop it

        service keepalived status | grep running

        if [ $? -eq 0 ] ; then

            logger -is "local service fails $maxfails times ... try to stop keepalived."

            service keepalived stop 2>&1 | logger

        fi

    fi

 

    if [ $success -gt $maxfails ] ; then

        #check keepalived is stopped ? try to start it

        service keepalived status | grep stopped

        if [ $? -eq 0 ] ; then

            logger -is "service changes normal, try to start keepalived ."

            service keepalived start

        fi

        success=0

    fi

    sleep 3

done

两个节点上均应运行此脚本,请将此脚本加入到cron任务中(此程序已经作了单实例运行机制,加入计划任务的作用就是防止脚本意外中断后检测功能失效),可实现的功能:

如果本地服务连续三次检测失败,就尝试停止keepalived服务(如果keepalived处于运行状态)

如果本地服务连接三次检测成功,但keepalived没有启动,则启动之

关键的执行点,均已经记录到系统日志中(/var/log/messages)

执行crontab -e , 加入以下内容:
*/1  *  *  *  * /root/check_service.sh

此脚本的原始文件

下载在Linux公社的1号FTP服务器里,下载地址:

FTP地址:ftp://www.

用户名:www.

密码:www.muu.cc

在 2012年LinuxIDC.com\8月\Keepalived配置及典型应用案例

下载方法见 http://www./thread-1187-1-1.html

停止掉本机的keepalived, 稍过一会,就会keepalived服务被自动启动了(这是因为本地服务检测正常)

停止掉本机的nginx, 稍过一会,就会发现keepalived服务也被停止掉了

再启动nginx, 稍过一会,发现keepalived也被正常启动,并绑定了正确的虚拟IP

我们可根据具体环境,将服务的检测功能强化(如检测到网关的连接性),以达到较好的故障转移效果。

linux


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多