本文介绍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