Keepalived
Keepalived
Keepalived 是一款基于 VRRP(Virtual Router Redundancy Protocol) 协议的高可用性解决方案,通过虚拟 IP(VIP)动态切换实现服务器冗余,确保服务在故障时自动迁移。其核心功能包括:
- VRRP 协议:多台服务器共享 VIP,主节点故障时备份节点接管。
- 健康检查:监控后端服务(如 Nginx、MySQL)状态,自动剔除异常节点。
- 通知机制:支持脚本回调,实现故障告警或自动化操作。
1.安装配置
1.1 主服务器配置
1.安装keepalived
#进入安装包hos-base的linux/keepalived目录,执行:
rpm -ivh *.rpm --nodeps
2.修改配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf,填入以下内容:
global_defs {
router_id hos-1
}
vrrp_instance VI_1 {
state MASTER
# 该实例绑定的网卡名称,根据实际修改
interface ens33
virtual_router_id 21
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 修改为医院提供的虚拟vip
virtual_ipaddress {
192.168.100.149
}
}
3.启动、开机自启keepalived服务
systemctl start keepalived
systemctl enable keepalived
4.查看vip服务状态和vip
systemctl status keepalived
ip addr
1.2 从服务器配置
1:安装keepalived,参考主服务器
2:修改配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf,填入以下内容:
global_defs {
router_id hos-2
}
vrrp_instance VI_1 {
state BACKUP
# 该实例绑定的网卡名称,根据实际修改
interface ens33
# 和主节点一致
virtual_router_id 21
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 修改为医院提供的虚拟vip,和主节点一致
virtual_ipaddress {
192.168.100.149
}
}
3:启动、开机自启keepalived服务,参考主服务器
4:查看keepalived服务状态,参考主服务器
2.常见问题
2.1 脑裂(主、从服务器同时占用VIP)
如果各服务器keepalived配置正确,且防火墙已经关闭,则可能是因为网络ARP广播被禁用导致的,可以通过使用单播方式解决:
在主、从配置文件的vrrp_instance中分别加入以下配置:
unicast_src_ip 192.168.0.101 #本机ip
unicast_peer {
192.168.0.102 #另一台服务器ip
}
完整的配置文件参考如下,其中:
- 192.168.0.100是vip;
- 192.168.0.101是主服务器;
- 192.168.0.102是从服务器。
#######################
## 主服务器配置文件:##
#######################
global_defs {
router_id hos-1
}
vrrp_instance VI_1 {
state MASTER
# 该实例绑定的网卡名称,根据实际修改
interface ens33
virtual_router_id 21
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 修改为医院提供的虚拟vip
virtual_ipaddress {
192.168.0.100
}
unicast_src_ip 192.168.0.101 #本机ip
unicast_peer {
192.168.0.102 #对端ip
}
}
#######################
## 从服务器配置文件:##
#######################
global_defs {
router_id hos-2
}
vrrp_instance VI_1 {
state BACKUP
# 该实例绑定的网卡名称,根据实际修改
interface ens33
# 和主节点一致
virtual_router_id 21
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 修改为医院提供的虚拟vip,和主节点一致
virtual_ipaddress {
192.168.0.100
}
unicast_src_ip 192.168.0.102 #本机ip
unicast_peer {
192.168.0.101 #对端ip
}
}