实现主备路由自动切换 – keepalived【二】

来源:互联网 发布:key软件怎么打开 编辑:程序博客网 时间:2024/06/05 17:51

实现主备路由自动切换 – keepalived【二】

将最近调试的keepalived做个简单的总结,部分配置可能
由于个人理解的关系,有些不同。希望大家能够指正!

Ubuntu 测试时,编译如下:
官网: http://www.keepalived.org/download.html

cd /usr/local/srcwget  http://www.keepalived.org/software/keepalived-1.2.6.tar.gztar zxf keepalived-1.2.6.tar.gz cd keepalived-1.2.6./configure --prefix=/usr/local/keepalived makemake installcp /usr/local/keepalived/sbin/keepalived /usr/sbin/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/mkdir -p /etc/keepalived/emacs  /etc/keepalived/keepalived.conf

1. 应用场景

网络拓扑图如下:

网络拓扑图

2. 配置文件

1)主路由:
由于我没有用到邮件通知,所以没有配置。

root@R1:/# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {!  notification_email {!     user@example.com!   }!   notification_email_from mail@example.org!   smtp_server 192.168.200.1!   smtp_connect_timeout 30    router_id NodeA}# 本来网上说可以增加脚本配置,但是我测试了不起作用。#vrrp_script check_local {#    script "/etc/keepalived/check_local.sh"#    interval 5#}vrrp_instance VI_1 {    state MASTER #指定A节点为主节点 备用节点上设置为BACKUP即可    interface br-lan #绑定虚拟IP的网络接口    virtual_router_id 231 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组    priority 105 #主节点的优先级(1-254之间),备用节点必须比主节点优先级低    advert_int 1 #组播信息发送间隔,两个节点设置必须一样#    nopreempt    authentication { #设置验证信息,两个节点必须一致        auth_type PASS #主从服务器验证方式        auth_pass 123456    }    virtual_ipaddress {  #指定虚拟IP, 两个节点设置必须一样        10.237.46.233 #虚拟IP    }# 触发脚本配置,配置未生效,故自己增加了另外的脚本#    track_script {#       check_local#    }}root@R1:/# 

2) 备用路由
配置基本和主路由相同。

root@R1:/# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {!  notification_email {!     user@example.com!   }!   notification_email_from mail@example.org!   smtp_server 192.168.200.1!   smtp_connect_timeout 30    router_id NodeA}# 本来网上说可以增加脚本配置,但是我测试了不起作用。#vrrp_script check_local {#    script "/etc/keepalived/check_local.sh"#    interval 5#}vrrp_instance VI_1 {    state BACKUP #标示状态为BACKUP    interface br-lan    virtual_router_id 232    priority 51 #MASTER权重要高于BACKUP    advert_int 1#    nopreempt    authentication {        auth_type PASS #主从服务器验证方式        auth_pass 123456    }    virtual_ipaddress {        10.237.46.233 #虚拟IP    }# 触发脚本配置,配置未生效,故自己增加了另外的脚本#    track_script {#       check_local#    }}root@R1:/# 

3) 基本配置参数的说明

  • virtual_router_id
    网上其他的资料要求2个主备路由器配置的id相同(“VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组”),但是配置后测试发现,有一台的keepalived启动失败(使用“ip a show |grep -w inet”命令即可查看)

  • interface
    原来配置此接口时不太理解,参考网上配置,都为成功,但是修改为br-lan后,成功了。个人理解为:按照我的应用场景,应该是向下的网关。

4) 其他参数:

global_defs: 全局配置标识,表面下面的区域{}是全局配置 - notification_email:   里面填邮箱地址,如果keepalived在发生诸如切换操作时会的发邮件到配置上的邮箱,邮件地址可以多个,每行一个 - notification_email_from:表示发送通知邮件时邮件源地址是谁 - smtp_server:表示发送email时使用的smtp服务器地址,可以填127.0.0.1 - smtp_connect_timeout:连接smtp超时时间 - vrrp_instance:各服务器上实例配置域,这里按本服务器的具体情况填值 - state:本实例启动状态,MASTERSLAVE,不管填MASTERSLAVE,最终还是要看本机器的权重。 - interface:实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,这里按本机情况而定 - virtual_router_id:这里设置VRID,如果两台机器是同一个备份组,设置一样 - priority:设置本节点的优先级,优先级高的为master,不能超过255 - advert_int:组播信息发送间隔,同一个备份组两个机器设置必须一样,默认是1S - authentication:验证域,同组的机器auth_type(验证类型)和auth_pass(验证密码)必须一样 - virtual_ipaddress:VIP,为master机器设置的虚拟地址,和实例绑定的网卡(interface)设置到一个网段

4) 自定义的配置脚本
刚开始配置完成后,如果主路由故障,可以自动切换到备用路由。但是,主路由恢复后,不能主动切换回主路由。如做了以下简单的脚本。

有些帖子中提到,nopreempt此参数可以起到自动切换的功能,但是我没有测试成功。

还有在配置文件中增加触发脚本,我也没有测试成功。

基于此,以下脚本使用watch -n 2来执行,即2s执行一次。

root@R1:/# cat keepalived_monitor.sh #!/bin/shIP=114.114.114.114FAIL_COUNT=0while [[ $FAIL_COUNT -le 2 ]]; do  #statements  ping -c 2 -W 1 $IP > /dev/null 2>&1  if [ "$?" == "0" ]; then    echo "Network connect!"    keepalived_status=`ps |grep keepalived |grep -v grep`    if [[ $? == "0" ]]; then      #      echo "keepalived is running!"      break    else      #      echo "keepalived is not running, it will be started."      /etc/init.d/keepalived start      break    fi  else    echo "Network disconnect!"    let FAIL_COUNT++    echo $FAIL_COUNT    if [[ $FAIL_COUNT == "3" ]]; then      # stop the keepalived services.      /etc/init.d/keepalived stop      break    fi  fidoneroot@R1:/#

此次调试总结,到此为止。希望朋友们指正……有好多参数的具体含义也没有完全理解,应该有更加晚上的配置和脚本,希望后期有时间继续研究。

1 0
原创粉丝点击