Keepalived 是什么
Keepalived 是一个用于实现高可用性(High Availability, HA)的服务,是一款基于 VRRP 协议的高可用软件,常用于主备切换和虚拟IP漂移,在服务故障时自动实现故障转移。
Keepalived 的核心功能
功能 | 说明 |
---|---|
VRRP | Virtual Router Redundancy Protocol,实现主备切换,保障VIP持续可用 |
健康检查(check) | 定时检测真实服务(如 Nginx、LVS、MySQL)是否存活 |
VIP 漂移 | 将一个虚拟 IP 绑定到当前健康的主节点上,故障时自动转移到备节点 |
结合 LVS | 通常与 LVS(Linux Virtual Server)一起部署,提供高可用负载均衡 |
安装 Keepalived
sudo apt-get updatesudo apt-get install -y keepalived
查看是否安装成功
keepalived -v
开启开机自启动:
sudo systemctl enable keepalived
Keepalived 常用命令
开启开机自启动:sudo systemctl enable keepalived
禁用开机自启动:sudo systemctl disable keepalived
开启服务:sudo systemctl start keepalived
关闭服务:sudo systemctl stop keepalived
重启服务:sudo systemctl restart keepalived
查看状态:sudo systemctl status keepalived
编辑配置文件
sudo vim /etc/keepalived/keepalived.conf
配置文件参数说明
# 定义一个 VRRP 实例,VI_1 是自定义的实例名称,每一个实例代表一个高可用虚拟路由组。
vrrp_instance VI_1 {## 指定该节点的初始角色,MASTER:主节点,正常情况下负责绑定虚拟IP(VIP)。BACKUP:备用节点,在主节点不可用时接管 VIP。# Keepalived 自动通过优先级判断主备,不是硬编码的主备,所以这个只是初始角色。state MASTER## 指定绑定 VIP 的网络接口(网卡名),例如 eth0、ens33、enp0s3 等。使用 ip a 查看当前系统的网卡名。interface ens33## 虚拟路由器的 ID,用于识别一个 VRRP 实例的组。所有参与该 VRRP 实例(主备)的服务器必须一致。范围:0~255,确保不同服务之间不要冲突。virtual_router_id 51## 指定该节点的优先级。数字越大,优先级越高。主节点应配置较高的值(如 100),备用节点配置较低(如 90)。当优先级高的节点恢复时,会自动抢占 VIPpriority 100## 指定 VRRP 广播间隔时间(秒)。主节点每隔指定的秒发送一次心跳包,默认是 1 秒,一般无需修改advert_int 1## 禁用抢占# nopreempt # 即使此节点优先级更高也不抢占 MASTER## 延迟抢占 VIP# 主节点恢复后,希望它稳定运行一段时间再接管 VIP,防止主节点频繁重启时反复抢占,导致服务中断# nopreempt 和 preempt_delay 不能同时使用。如果两者都写了,以 nopreempt 为准# preempt_delay 10 # 恢复后等待10秒才尝试抢占 MASTER## 状态通知脚本(可选)# notify_master "/path/to/script" # 成为 MASTER 时执行脚本# notify_backup "/path/to/script" # 成为 BACKUP 时执行脚本# notify_fault "/path/to/script" # 出现故障时执行脚本# notify "/path/to/script" # 所有状态变更时都执行的统一脚本## 本机实际 IP 地址(作为 VRRP 包发送源 IP)unicast_src_ip 192.168.189.135## 用于将 Keepalived 的 VRRP 心跳通信改为“单播”(Unicast)模式。不配置的话默认的是“组播”(Multicast)模式。云服务器(如阿里云、腾讯云)中,出于安全限制,组播通常被禁用或不可用。unicast_peer {192.168.189.136192.168.189.137}## 用于设置主备之间的认证信息authentication {## 认证类型,一般用 PASS(明文密码)auth_type PASS## 认证密码(主备节点必须保持一致)auth_pass 123456}## 指定一个或多个虚拟IP(VIP)。VIP 是客户端访问的目标地址,当主节点故障,VIP 会自动漂移到备节点virtual_ipaddress {192.168.189.100 # 虚拟IP 1,例如用于 web 服务A192.168.189.101 # 虚拟IP 2,例如用于 web 服务B192.168.189.102 # 虚拟IP 3,例如用于 mysql 服务}
}
配置文件实操
- 主节点:192.168.189.135,优先级为 100
- 备节点:192.168.189.136,优先级为 90
- 第三节点:192.168.189.137,优先级为 80
这些参数必须在所有节点一致:vrrp_instance、virtual_router_id、advert_int、authentication、virtual_ipaddress
1. 主节点(192.168.189.135)配置
sudo vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1unicast_src_ip 192.168.189.135unicast_peer {192.168.189.136192.168.189.137}authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.189.100}
}
重启 keepalived
sudo systemctl restart keepalived
2. 备节点(192.168.189.136)配置
sudo vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1unicast_src_ip 192.168.189.136unicast_peer {192.168.189.135192.168.189.137}authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.189.100}
}
重启 keepalived
sudo systemctl restart keepalived
3. 第三节点(192.168.189.137)配置
sudo vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 80advert_int 1unicast_src_ip 192.168.189.137unicast_peer {192.168.189.135192.168.189.136}authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.189.100}
}
重启 keepalived
sudo systemctl restart keepalived
测试是否配置成功
测试步骤:查看VIP在哪个节点上?发现在主节点上,把主节点关闭后,发现VIP漂移到备用节点上了
1. 在主节点(192.168.189.135)运行:
ip a | grep 192.168.189.100
输入如下内容,表示 VIP 被绑定到此节点
inet 192.168.189.100/32 scope global ens33
2. 关闭主节点的 Keepalived 服务:
sudo systemctl stop keepalived
3. 在备节点(192.168.189.136)运行:
ip a | grep 192.168.189.100
VIP 会自动漂移到备节点。