一、核心概念
1. 什么是 Keepalived
- 基于 VRRP 协议 实现的高可用(HA)工具
- 主要作用:单点故障自动切换 + 配合 LVS/Nginx 做负载均衡健康检查
- 应用场景:Nginx、MySQL、LVS、业务网关等高可用集群
2. 高可用 vs 负载均衡
- 高可用(HA):保证服务不挂,一台挂了另一台顶上
- 负载均衡(LB):流量分摊到多台后端,提升并发
- Keepalived 本身不做流量转发 ,只做:
- 节点健康检查
- VIP 漂移
- 故障自动切换
二、核心原理:VRRP 协议
1. 角色
- Master(主):持有 VIP,对外提供服务
- Backup(备):监听 Master,不绑定 VIP
- 主挂了 → 备抢占 VIP → 成为新 Master
2. 关键术语
- VIP(虚拟 IP):对外统一入口,用户只访问这个 IP
- 漂移:故障时 VIP 从主节点转移到备节点
- 优先级(priority):值越大越优先成为 Master
三、安装与基础配置
1. 安装(CentOS /openEuler)
bash
运行
yum install -y keepalived
2. 配置文件路径
plaintext
/etc/keepalived/keepalived.conf
3. 主节点配置(精简版)
conf
global_defs {
router_id LVS_01 # 本节点标识,唯一即可
}
vrrp_instance VI_1 {
state MASTER # 主节点
interface eth0 # 绑定网卡
virtual_router_id 51
priority 150 # 优先级,备节点设更低
advert_int 1 # 心跳间隔1秒
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100/24 # VIP
}
}
4. 备节点配置
state BACKUPpriority 100- 其余基本一致
四、配合 Nginx 实现高可用(最常用)
目标
Nginx 挂了 → Keepalived 自动切换 VIP
1. 添加 Nginx 健康检查脚本
conf
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20 # 失败则优先级-20
}
vrrp_instance VI_1 {
...
track_script {
chk_nginx
}
}
2. 检查脚本 check_nginx.sh
bash
运行
#!/bin/bash
if ! pgrep nginx &>/dev/null; then
systemctl stop keepalived
fi
bash
运行
chmod +x /etc/keepalived/check_nginx.sh
五、配合 LVS 做负载均衡(四层 LB)
1. LVS + Keepalived 作用
- LVS:四层负载均衡(转发流量)
- Keepalived:LVS 高可用 + 自动配置 VS/RS + 健康检查
2. 典型配置片段
conf
virtual_server 192.168.1.100 80 {
delay_loop 3
lb_algo rr # 轮询
lb_kind DR # Direct Route 模式
protocol TCP
real_server 192.168.1.11 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
}
六、常用命令
bash
运行
# 启动/开机自启
systemctl start keepalived
systemctl enable keepalived
# 查看状态
systemctl status keepalived
# 查看VIP
ip addr show eth0
# 查看日志
tail -f /var/log/messages
七、面试高频考点
- **Keepalived 用什么协议?**VRRP 协议,实现主备高可用。
- **脑裂是什么?怎么解决?**心跳断了 → 主备都抢 VIP → 脑裂。解决:串口心跳、冗余网卡、防火墙放行 VRRP。
- **Nginx 高可用怎么做?**Nginx + Keepalived + 脚本检查 Nginx 进程。
- **LVS 与 Keepalived 关系?**LVS 做四层负载均衡,Keepalived 做高可用与健康检查。
- **VIP 有什么用?**给用户统一入口,故障时漂移,业务无感知。
八、总结
Keepalived = VRRP 高可用 + 服务健康检查 + 配合 LVS/Nginx 实现负载均衡高可用
- 主备切换靠 VRRP
- 流量入口靠 VIP
- 服务存活靠 检查脚本
- 负载均衡靠 LVS/Nginx