Keepalived 是 Linux 下一款同时实现 高可用 (HA) 和 负载均衡 (LB) 的核心软件,通常用于构建高可靠的服务集群(如 Nginx、MySQL、LVS 等)。
一、核心两大功能
1. 高可用 (High Availability, HA)
核心原理:基于 VRRP 协议实现 IP 漂移
- VRRP (虚拟路由冗余协议) :将多台物理机组成一个虚拟路由器 ,共享一个 VIP (虚拟 IP)。
- 角色 :
- Master (主节点) :绑定 VIP,对外提供服务,每秒发送 VRRP 心跳包(组播地址
224.0.0.18)。 - Backup (备节点):监听心跳,不绑定 VIP,处于待命状态。
- Master (主节点) :绑定 VIP,对外提供服务,每秒发送 VRRP 心跳包(组播地址
- 故障切换 :
- 备节点 3 秒 未收到心跳,判定主节点故障。
- 优先级最高的备节点升级为 Master,绑定 VIP。
- 发送 免费 ARP 广播,刷新全网 ARP 表,流量立即导向新主节点。
- 切换时间通常 < 5 秒,对用户完全透明。
2. 负载均衡 (Load Balancing, LB)
核心原理:集成 Linux 内核 IPVS (LVS) 模块,实现四层负载均衡
- IPVS (IP Virtual Server) :工作在 传输层 (L4),基于内核态转发,性能极高。
- 工作模式 :
- NAT (网络地址转换):请求与响应都经过负载均衡器。
- DR (直接路由) :仅请求经负载均衡器,响应由后端服务器直接返回客户端(生产最常用)。
- TUN (IP 隧道):跨网段部署。
- 常用调度算法 :
rr(轮询):平均分配。wrr(加权轮询):按服务器性能权重分配。lc(最少连接):分给连接数最少的服务器。sh(源地址哈希):同一 IP 固定分配到同一服务器(会话保持)。
二、典型架构:Keepalived + Nginx / LVS
架构图示意:
plaintext
用户 → [VIP (192.168.1.100)]
↓
[LB节点1 (Master)] ↔ [LB节点2 (Backup)] (Keepalived 主备)
↓ (负载分发)
[Web Server 1] [Web Server 2] [Web Server 3] (后端真实服务器)
作用:
- 高可用:任意一台 LB 节点宕机,VIP 自动漂移,服务不中断。
- 负载均衡:LB 节点将请求均匀分发到后端 Web 服务器。
- 健康检查:自动剔除宕机的后端服务器,恢复后自动加回。
三、核心配置文件 (keepalived.conf)
1. 高可用 (VRRP) 配置(主节点)
conf
global_defs {
router_id LVS_DEVEL # 集群内唯一ID
}
vrrp_instance VI_1 {
state MASTER # 角色:主节点
interface eth0 # 绑定网卡
virtual_router_id 51 # 集群ID,主备必须一致
priority 150 # 优先级(主>备)
advert_int 1 # 心跳间隔1秒
# 虚拟IP
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
# 健康检查脚本(如检查Nginx是否存活)
track_script {
chk_nginx
}
}
# 自定义检查脚本
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2 # 每2秒检查一次
weight -20 # 失败则优先级-20,触发切换
}
2. 负载均衡 (IPVS) 配置
conf
# 定义虚拟服务(VIP:端口)
virtual_server 192.168.1.100 80 {
delay_loop 6 # 健康检查间隔
lb_algo rr # 调度算法:轮询
lb_kind DR # 模式:直接路由
persistence_timeout 0 # 会话保持时间
# 后端真实服务器
real_server 192.168.1.11 80 {
weight 1 # 权重
TCP_CHECK { # 健康检查:TCP端口
connect_timeout 3
}
}
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
四、关键特性总结
- 双功能合一 :一套软件同时解决单点故障 和流量分发。
- 服务级高可用:通过脚本检查服务进程(如 Nginx),而非仅检查主机存活。
- 无缝切换:基于 ARP 广播,客户端无感知。
- 高性能:四层负载均衡(IPVS)性能远超七层(Nginx)。
五、常用命令
bash
运行
# 安装
yum install keepalived -y
# 启动/停止/状态
systemctl start/stop/status keepalived
# 查看VIP
ip addr show eth0
# 查看IPVS规则
ipvsadm -Ln