高可用集群技术之Keepalived实现LVS高可用并负载均(2)

重启keepalived服务创建down文件测试:
# service keepalived restart
# touch /etc/keepalived/down
 
---在/etc/keepalived/下建立down文件可实现主备模式切换

(6)调用外部脚本检测web(nginx)健康状态
建立/etc/keepalived/chkngx.sh脚本
#/bin/bash
#/etc/keepalived/chkngx.sh
#
if pkill -0 nginx>/dev/null; then
        [ `curl -sL -w %{http_code} -o /dev/null` -eq 200 ] && exit 0
else
        service nginx start
fi
exit $?

授予脚本执行权限:
# chmod +x /etc/keepalived/chkngx.sh

配置keepalived.conf调用外部脚本
全局配置的段下添加如下:
vrrp_script chkngx {
    script "/etc/keepalived/chkngx.sh"    #指定用于检测nginx服务的执行脚本路径
    interval 1        #监测间隔
    weight -2        #失败时,优先级减2
    fall 3          # 指定nginx检测脚本连续执行失败次数为3,才进行Failover
    rise 3          # 指定nginx检测脚本连续执行成功次数为3,才进行Failback
}
 
在vrrp_instance VI_1 ##vrrp实例配置段添加如下:
track_script {
    chkngx          #通过指定上面定义监控脚本来监控服务状态,监控nginx监控状态
}

(7)使用通知脚本实现如何在vrrp事务发生时,发送警告邮件给指定的管理员? 比如:主从节点故障时
建立脚本监控脚本如下:
# vim /etc/keepalived/notify.sh 
#!/bin/bash
#
 
declare -a vips=(172.16.100.98 172.16.100.99)
contact='root@localhost'
Usage() {
        echo "Usage:`basename $0`{master|backup|fault}"
}
 
Notify() {
    if [ "$2" = "VI_1" ]; then
        vip=${vips[0]}
    echo $vip
    elif [ "$2" = "VI_2" ]; then
        vip=${vips[1]}
    echo $vip
    fi
    suject="`hostname`'s state chaged to $1"
    mailbody="`date  +%F--%H:%M:%S`: `hostname`'s state chage to $1,vip floating..."
    echo $mailbody | mail -s  "$subject" $contact 
    echo $mailbody >> /tmp/keepalived.log
}
 
case $1 in
    master)
    Notify master
        exit 0
    ;;
    backup)
    Notify backup
        exit 0
    ;;
    fault)
    Notify fault
        exit 0
    ;;
    *)
        Usage 
        exit 1
    ;;
esac

授予脚本执行权限:
# chmod +x /etc/keepalived/notify.sh

配置keepalived.conf调用外部脚本
在vrrp_instance VI_1 ##vrrp实例配置段最后添加如下:
notify_master "/etc/keepalived/notify.sh master"        #状态变为master时,触发的通知脚本
notify_backup "/etc/keepalived/notify.sh backup"        #状态变为backup时,触发的通知脚本
notify_fault "/etc/keepalived/notify.sh fault"          #状态变为fault时,触发的通知脚本
notify "/etc/keepalived/notify.sh"    #当发生所有的状态改变时,会先触发对应的状态通知脚本后,再触发该脚本

(8)使用脚本根据down文件检测实现主从状态转换
# vim /etc/keepalived/convert_state.sh
#!/bin/bash
#
 
usage() {
    echo "./`basename $0` {master|backup}"
    exit 1
}
 
if [ $# -eq 0 ]; then
    usage
fi
 
if [[ "$1" = "master" ]]; then
    [ -f /etc/keepalived/down ] && rm -f /etc/keepalived/down
elif [[ "$1" = "backup" ]]; then
    [ ! -f /etc/keepalived/down ] && touch /etc/keepalived/down
else
    usage
fi
sleep 1
 
# chmod +x /etc/keepalived/convert_state.sh

执行脚本convert_state进行备节点转换:
# /etc/keepalived/convert_state.sh backup
# ls /etc/keepalived/ | grep down
down

执行脚本convert_state进行主节点转换:
# /etc/keepalived/convert_state.sh master

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c3eaad57fdfc31c753133af855c939c2.html