千家信息网

keepalived中vrrp_script,track_script,notify的使用方法

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,可以在keepalived.conf文件中定义的脚本,用以实现某个检测功能;例:检测/etc/keepalived目录下down文件是否存在,如果存在则优先级减20,如果不存在表示正常vrrp_scr
千家信息网最后更新 2024年11月18日keepalived中vrrp_script,track_script,notify的使用方法

可以在keepalived.conf文件中定义的脚本,用以实现某个检测功能;

例:检测/etc/keepalived目录下down文件是否存在,如果存在则优先级减20,如果不存在表示正常

vrrp_script chk {

script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"

interval 1

weight -20

注:这个脚本的作用是用于维护MASTER,使MASTER手动下线

如何调用上面定义的脚本呢?

在vrrp实例中(vrrp_instance VI_1)加上track_script用于追踪脚本

track_script {

chk

}

notify的用法:

notify_master:当当前节点成为master时,通知脚本执行任务(一般用于启动某服务,比如nginx,haproxy等)

notify_backup:当当前节点成为backup时,通知脚本执行任务(一般用于关闭某服务,比如nginx,haproxy等)

notify_fault:当当前节点出现故障,执行的任务;

例:当成为master时启动haproxy,当成为backup时关闭haproxy

notify_master "/etc/keepalived/start_haproxy.sh start"

notify_backup "/etc/keepalived/start_haproxy.sh stop"

一个完整的实例:

MASTER:初始priority为100

BACKUP:初始priority为90

模拟MASTER产生故障:

当检测到/etc/keepalived目录下有down文件时,priority减少20,变为80;低于BACKUP的priority;

此时MASTER变成BACKUP,同时执行notify_backup的脚本文件(关闭haproxy);

同时BACKUP变成MASTER,同时执行notify_master的脚本文件(启动haproxy);

模拟MASTER故障恢复:

当删除/etc/keepalived目录下的down文件时,原MASTER的优先级又变为100,高于原BACKUP的priority;

此时原MASTER由BACKUP又抢占成了MASTER,同时执行notify_master的脚本文件(启动haproxy);

同时原BACKUP由MASTER又变了BACKUP,同时执行notify_backup的脚本文件(关闭haproxy);

MASTER的配置:

global_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_script chk {   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"   interval 1   weight -20}vrrp_instance VI_1 {    state MASTER    interface eth2    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        10.0.22.245    }    track_script {      chk    }    notify_master "/etc/keepalived/start_haproxy.sh start"    notify_backup "/etc/keepalived/start_haproxy.sh stop"

BACKUP的配置:

global_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL} vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 51    priority 90    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {       10.0.22.245    }    notify_master "/etc/keepalived/start_haproxy.sh start"    notify_backup "/etc/keepalived/start_haproxy.sh stop" }

start_haproxy.sh的脚本内容:

#!/bin/bashcase "$1" in  start)    /etc/init.d/haproxy start  ;;  stop)    /etc/init.d/haproxy stop  ;;  restart)    /etc/init.d/haproxy stop    /etc/init.d/haproxy start  *)    echo "Usage:$0 start|stop|restart"  ;;esac

keepalived检测nginx,当nginx服务不正常时自动降级,当nginx恢复时自动升级:

check_nginx.sh脚本

#!/bin/bashnmap localhost -p 80 | grep "80/tcp open"if [ $? -ne 0 ];then        exit 10fi

notify.sh脚本:

#!/bin/bashVIP=$2sendmail (){        subject="${VIP}'s server keepalived state is translate"        content="`date +'%F %T'`: `hostname`'s state change to master"        echo $content | mail -s "$subject" zhengwei.liu@staples.cn}case "$1" in  master)        nmap localhost -p 80 | grep "80/tcp open"        if [ $? -ne 0 ];then                /etc/init.d/nginx start        fi        sendmail  ;;  backup)        nginx_psr=`ps -C nginx --no-header | wc -l`        if [ $nginx_psr -ne 0 ];then                /etc/init.d/nginx stop        fi  ;;  *)        echo "Usage:$0 master|backup VIP"  ;;esac

MASTER配置

! Configuration File for keepalivedglobal_defs {    notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id https}vrrp_script chk_nginx {    script "/etc/keepalived/check_nginx.sh"    interval 1    weight -20}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 54    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        172.16.8.19/25    }    track_script {        chk_nginx    }    notify_master "/etc/keepalived/notify.sh master 172.16.8.19"    notify_backup "/etc/keepalived/notify.sh backup 172.16.8.19"}

BACKUP配置:

backup无需检测nginx是否正常,默认nginx是未启动的,当升级为MASTER时启动nginx,当降级为BACKUP时关闭

! Configuration File for keepalivedglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id https}vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 54    priority 90    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        172.16.8.19/25    }    notify_master "/etc/keepalived/notify.sh master 172.16.8.19"    notify_backup "/etc/keepalived/notify.sh backup 172.16.8.19"}
0