基于 VRRP Script 实现其它应用的高可用性

keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用功能

1、VRRP Script 配置

分两步实现:

  • 定义脚本

vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后,是和global_defs平级的语句块

通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点

当 keepalived_script 用户存在时,会以此用户身份运行脚本,否则默认以root运行脚本
注意:此定义脚本的语句块一定要放在下面调用此语句vrrp_instance语句块的前面

vrrp_script <SCRIPT_NAME> {
  script <STRING>|<QUOTED-STRING>   #此脚本返回值为非0时,会触发下面OPTIONS执行
  OPTIONS
}

track_script:调用vrrp_script定义的脚本去监控资源,定义在VRRP实例之内,调用事先定义的vrrp_script

track_script {
  SCRIPT_NAME_1
  SCRIPT_NAME_2
}

1.1、定义 VRRP script

vrrp_script <SCRIPT_NAME> { #定义一个检测脚本,在global_defs 之外配置
    script <STRING>|<QUOTED-STRING> #shell命令或脚本路径
    interval <INTEGER> #间隔时间,单位为秒,默认1秒
    timeout <INTEGER> #超时时间
    weight <INTEGER:-254..254> #默认为0,如果设置此值为负数,当上面脚本返回
值为非0时,会将此值与本节点权重相加可以降低本节点权重,即表示fall. 如果是正数,当脚本返回值为
0,会将此值与本节点权重相加可以提高本节点权重,即表示 rise.通常使用负值
    fall <INTEGER>       #执行脚本连续几次都失败,则转换为失败,建议设
为2以上
    rise <INTEGER>       #执行脚本连续几次都成功,把服务器从失败标记
为成功
    user USERNAME [GROUPNAME] #执行监测脚本的用户或组
    init_fail         #设置默认标记为失败状态,监测成功之后再转换
为成功状态
}

1.2、调用 VRRP script

vrrp_instance VI_1 {
  …
  track_script {
    <SCRIPT_NAME>
  }
}

2、利用脚本实现主从角色切换

[root@ka1 ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
    notification_email {
        root@localhost
    }
    notification_email_from keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id ka1
    vrrp_mcast_group4 224.0.100.100
}

vrrp_script check_down {
   script "[ ! -f /etc/keepalived/down ]"
   # /etc/keepalived/down存在时返
回非0,触发权重-30
   interval 1
   weight -30
   fall 3
   rise 2
   timeout 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.55/24 dev eth0 label eth0:1
    }
    track_interface {
        eth0
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
    track_script {
        check_down
    }
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享