本文介绍keepalived高可用的部署方式

keepalived 配置说明

global_defs {
    router_id redis
}

vrrp_script chk_redis {
    script "/etc/keepalived/check_redis.sh"
    interval 5  #检查频率,此值一定要大于脚本执行时间
}


vrrp_instance VI_1 {
    state BACKUP
    interface ens160          # 网卡名
    priority 50             # 优先级,越大越优先
    virtual_router_id 54       # 集群认证ID,需与其他集群不同
    advert_int 2           
    nopreempt               # 不开启抢占模式
    authentication {
        auth_type PASS
        auth_pass 认证密码
    }
    virtual_ipaddress {
       VIP地址
    }


    track_script {
       chk_redis
    }

}

redis检查脚本实例

#!/bin/bash
# 每次检查3次,发现有一次检查失败,则关闭keepalived服务
err=0
for k in $(seq 1 3)
do
    check_code=`ps -C redis-server --no-heading| wc -l`
    if [ $check_code -eq 0 ]; then
        err=$(expr $err + 1)
        date=`date +"%Y-%m-%d %H:%M.%S"`
        echo $date"  第"$k"次检查失败" >> /var/log/keepalived-error.log
        sleep 1
        continue
    else
        err=0
        break
    fi
done



if [ $err -ne 0 ]; then
    
    date=`date +"%Y-%m-%d %H:%M.%S"`
    echo $date"  redis is stoped" >> /var/log/keepalived-error.log
    echo $date"  systemctl stop keepalived" >> /var/log/keepalived-error.log
    /usr/bin/systemctl stop keepalived
    exit 1
else
    exit 0
fi

常见问题

1.keepalived无法运行脚本
原因一:脚本文件未加权限

[root@blog ~]# chmod u+x 脚本文件

原因二:track_script必须放在virtual_ipaddress下面

2.两台服务器的同时具有VIP地址
原因:未关闭防火墙

[root@blog ~]# service firewalld stop
[root@blog ~]# systemctl disable firewalld

3.VIP地址无法绑定到任何一台服务器
原因: 局域网内其他keepalived集群存在相同的virtual_router_id