目录
Keepalived基础概念
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol) 协议的高可用性解决方案,主要用于实现网络服务的故障转移(Failover)和负载均衡。其核心目标是通过虚拟 IP(VIP)漂移和健康检查机制,确保服务的高可用性。以下是对其原理的详细分步解析:
一、核心原理:VRRP 协议
VRRP 的作用
解决静态默认路由的单点故障问题。通过将多个物理路由器组合成一个虚拟路由器(Virtual Router),对外提供统一的虚拟 IP(VIP)。客户端仅需将流量发送到 VIP,实际流量由当前主节点(Master)处理。角色与选举机制
- Master 节点:负责转发流量,定期发送 VRRP 通告(Advertisement)以宣告存活。
- Backup 节点:监听 Master 的通告,若超时未收到则发起选举。
- 选举依据:优先级(
priority
,范围 1-254)。优先级高的节点成为 Master,默认优先级为 100。
协议细节
- 通告间隔:默认为 1 秒,可通过
advert_int
配置。 - 故障检测:若 Backup 节点在
3 × advert_int + skew_time
内未收到通告,则判定 Master 失效。 - 状态切换:Backup 节点接管 VIP 并成为新的 Master。
- 通告间隔:默认为 1 秒,可通过
二、健康检查机制
Keepalived 通过健康检查(Health Checking)监控后端服务的状态,触发 VIP 转移。
检查类型
- TCP 检查:检测端口是否可达。
- HTTP/HTTPS 检查:发送请求并验证状态码或响应内容。
- SSL 检查:验证 SSL 证书有效性。
- 自定义脚本:执行脚本,返回值决定服务状态(0 为正常,非 0 为异常)。
优先级动态调整
- 若健康检查失败,节点自动降低优先级(如
priority - 20
)。 - 优先级变化触发 VRRP 重新选举,使更健康的节点成为 Master。
- 若健康检查失败,节点自动降低优先级(如
三、Keepalived 架构
核心组件
- VRRP Stack:处理 VRRP 协议的状态机、选举、通告。
- Health Checker:执行健康检查,动态调整节点优先级。
- SMTP 通知:支持发送邮件告警(可选)。
虚拟服务器(Virtual Server)
- 结合 LVS(Linux Virtual Server)实现负载均衡。
- 定义 VIP、端口、负载均衡算法(如轮询、加权最小连接)和后端真实服务器(Real Server)。
四、工作流程
节点启动
- 读取配置文件
keepalived.conf
,初始化 VRRP 实例和健康检查。 - 加入 VRRP 组,根据优先级选举初始 Master。
- 读取配置文件
Master 节点行为
- 绑定 VIP 到网卡。
- 周期性发送 VRRP 通告。
- 执行健康检查,若失败则降低自身优先级。
Backup 节点行为
- 监听 VRRP 通告。
- 若 Master 失效,发起选举并接管 VIP。
故障转移过程
- Backup 节点检测到 Master 失效(超时或优先级降低)。
- 发送免费 ARP(Gratuitous ARP)更新网络设备的 ARP 缓存,将 VIP 映射到新 Master 的 MAC 地址。
五、配置文件解析
vrrp_instance VI_1 {
state BACKUP # 初始角色(MASTER/BACKUP)
interface eth0 # 绑定网卡
virtual_router_id 51# 虚拟路由器 ID(同一组需相同)
priority 100 # 初始优先级
advert_int 1 # 通告间隔(秒)
authentication { # 认证(明文或加密)
auth_type PASS
auth_pass 1234
}
virtual_ipaddress { # 虚拟 IP 列表
192.168.1.100/24
}
track_script { # 关联健康检查脚本
chk_nginx
}
}
virtual_server 192.168.1.100 80 { # 定义虚拟服务器(LVS)
delay_loop 6 # 健康检查间隔
lb_algo rr # 负载均衡算法(轮询)
lb_kind NAT # LVS 模式(NAT/DR/TUN)
protocol TCP # 协议类型
real_server 192.168.1.10 80 {
weight 1 # 权重
TCP_CHECK { # TCP 检查配置
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
六、高级特性
脑裂(Split-Brain)处理
- 通过多播/单播冗余、多检测脚本(如 ping 网关)避免网络分区问题。
- 配置
nopreempt
(非抢占模式)防止优先级恢复后反复切换。
单播模式
- 在不支持多播的网络中,配置单播通信:
unicast_src_ip <LOCAL_IP> unicast_peer { <PEER_IP> }
- 在不支持多播的网络中,配置单播通信:
安全性
- VRRP 支持明文或加密认证,防止非法节点加入:
authentication { auth_type AH # 使用 IPSec 加密 auth_pass <KEY> }
- VRRP 支持明文或加密认证,防止非法节点加入:
七、典型应用场景
- Web 服务高可用
- 双机热备:主节点故障时 VIP 漂移到备节点。
- 数据库主从切换
- 结合健康检查(如 MySQL 探活),触发主从角色切换。
- 负载均衡器容灾
- 结合 LVS 实现负载均衡集群的高可用。
八、日志与调试
- 日志路径:
/var/log/messages
或journalctl -u keepalived
。 - 调试模式:启动时添加
-D
参数显示详细日志。
LVS+Keepalived高可用基础部署
一、LVS + Keepalived 核心原理
LVS(Linux Virtual Server)
- 基于内核的负载均衡技术,支持 NAT/DR/TUN 三种模式。
- 分发流量到后端 Real Server,实现高并发处理。
Keepalived
- 基于 VRRP 协议 实现主备切换,通过健康检查监控 LVS 和后端服务。
- 主节点故障时,VIP 自动漂移到备节点,保障服务连续性。
协作流程
- LVS 负责流量分发,Keepalived 负责故障检测和 VIP 管理。
- 健康检查失败时,Keepalived 降低节点优先级,触发主备切换。
二、部署环境准备
节点角色
- 主节点(Master):
192.168.1.10
- 备节点(Backup):
192.168.1.11
- 虚拟 IP(VIP):
192.168.1.100
- 后端 Real Server:
192.168.1.20
、192.168.1.21
- 主节点(Master):
软件安装
# 所有节点安装 LVS 和 Keepalived yum install -y ipvsadm keepalived # CentOS apt install -y ipvsadm keepalived # Ubuntu
三、配置 Keepalived(主/备节点)
主节点配置 (
/etc/keepalived/keepalived.conf
)global_defs { router_id LVS_MASTER } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.1.100/24 } } virtual_server 192.168.1.100 80 { delay_loop 6 lb_algo rr lb_kind DR # 直接路由模式 protocol TCP real_server 192.168.1.20 80 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } }
备节点配置
仅需修改state
和priority
:state BACKUP priority 90
四、配置 LVS 直接路由(DR 模式)
Real Server 配置(每台后端服务器)
# 配置 VIP 本地回环(防止 VIP 冲突) echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 1 > /proc/sys/net/ipv4/conf/default/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/default/arp_announce # 添加 VIP 到 lo 网卡 ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up
启动服务
systemctl start keepalived systemctl enable keepalived ipvsadm -Ln # 查看 LVS 规则
五、验证与故障排查
VIP 漂移测试
- 主节点执行
systemctl stop keepalived
,观察备节点是否接管 VIP。 - 使用
ip addr show eth0
检查 VIP 绑定。
- 主节点执行
日志检查
tail -f /var/log/messages # CentOS journalctl -u keepalived # Ubuntu
LVS 状态监控
watch ipvsadm -Ln # 实时查看连接分发状态
六、关键注意事项
ARP 抑制
DR 模式需关闭 Real Server 的 VIP 响应,避免 ARP 冲突。脑裂问题
通过多检测脚本(如 ping 网关)或启用单播模式避免网络分区。性能调优
- 调整
net.ipv4.vs.conntrack
参数提升 LVS 连接追踪能力。 - 使用
wr
(加权轮询)或wlc
(加权最小连接)算法优化负载均衡。
- 调整