Keepalived 问题集
问题描述
- Q1
ip address associated with VRID 51 not present in MASTER advert : 10.1.7.58
其中 51 为 virtual_router_id 10.1.7.58 为虚拟IP
可能原因
-
ntp 时间不同步
-
局域网内 virtual_router_id 与其他集群配置冲突。 另外 router_id 主机标示,一般为hostname即可。
解决方法: unicast_peer{ } 配置成单播模式
- Q2
keepalived ping不通
解决办法,注释掉配置文件中的
vrrp_strict
- Q3
not a regular file
解决方法
chmod 644 keepalived.conf
- Q4
virtual_server
该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块
- Q5
VRRP , Virtual Router Redunday Protocol 。虚拟路由冗余协议
- Q6
Keepalived工作方式:抢占式、非抢占式
抢占式 , 主从模式 。 state: MASTER ,BUCKUP
非抢占式, 在配置中添加 nopreempt 标识为非抢占模式
一个简单的配置DEMO
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL # 组名。同一个网络空间,组名一致为同一个组
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # MASTERE BACKUP
interface eno1 # 网卡名
virtual_router_id 51 # 组内唯一标识
priority 100 # 优先等级
advert_int 1
authentication { # 组内安全认证
auth_type PASS
auth_pass admin
}
virtual_ipaddress { # VIP 设置
192.168.1.8/24
}
}
检测后端程序
以nginx为例
cat /server/scripts/check_list
nginxpid=$(ps -C nginx --no-header|wc -l)
#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
if [ $nginxpid -eq 0 ];then
systemctl start nginx
sleep 3
#2.等待3秒后再次获取一次Nginx状态
nginxpid=$(ps -C nginx --no-header|wc -l)
#3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_script check {
script "/server/scripts/check_list"
interval 10
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.8/24
}
track_script {
check
}
}
发生主从切换通知
notify_master /server/scripts/tobe_master.sh //当切换为MASTER时将触发
notify_backup /server/scripts/tobe_slave.sh // 当切换为BACKUP时将触发