一、核心基础认知
1.1 核心两大功能
-
高可用(HA):通过虚拟IP(VIP)漂移,实现主备节点自动故障切换,避免单点故障,切换过程对客户端透明,无需人工干预。
-
负载均衡(LB):整合Linux内核IPVS模块(LVS核心),实现四层流量负载分发,将客户端请求均匀分摊到后端真实服务器(Real Server)。
1.2 核心组件与模块
-
VRRP模块:实现虚拟路由冗余协议,完成主备节点选举、心跳通信、VIP漂移,是高可用核心。
-
Check模块:负责节点健康检查,支持TCP、HTTP、脚本自定义检查,剔除故障节点,保障流量只分发到健康节点。
-
Core模块:全局配置加载、进程管理、日志维护,统筹整体工作流程。
-
IPVS模块:内核级负载均衡模块,实现四层请求转发、调度算法,是负载均衡核心依赖。
1.3 关键术语
-
VIP(Virtual IP):虚拟IP,对外统一提供服务的IP,主备节点共享,故障时自动漂移。
-
Master节点:主节点,优先级高,默认绑定VIP,对外提供服务,周期性发送心跳报文。
-
Backup节点:备节点,优先级低,监听主节点心跳,主节点故障时自动升级为Master,接管VIP。
-
Real Server(RS):后端真实业务服务器,处理实际请求,负载均衡器将流量转发至此。
二、高可用核心原理(VRRP协议)
2.1 VRRP协议核心逻辑
VRRP(虚拟路由冗余协议)是Keepalived高可用的底层协议,通过组播(224.0.0.18)实现节点间通信,核心流程:
-
正常运行:Master节点绑定VIP,每隔1-3秒发送VRRP心跳通告,告知Backup节点自身正常运行。
-
故障检测:Backup节点在指定时间内(通常3倍通告间隔)未收到心跳,判定Master节点故障。
-
自动切换:Backup节点按优先级选举新Master,新节点绑定VIP,发送免费ARP更新网关/交换机ARP缓存,完成无缝切换。
-
故障恢复:原Master节点恢复后,默认抢占模式下会重新夺回VIP;非抢占模式下保持Backup身份,避免频繁切换。
2.2 高可用核心配置要点
-
virtual_router_id:虚拟路由ID,同一集群主备节点必须一致(0-255),用于区分不同集群。
-
priority:节点优先级(1-254),Master优先级高于Backup,决定选主结果。
-
advert_int:心跳通告间隔,单位秒,建议1-3秒,避免网络延迟误判。
-
nopreempt:非抢占模式,开启后主节点恢复不抢占VIP,适合生产避免服务波动。
-
认证配置:主备节点密码一致,防止非法节点加入集群。
三、负载均衡核心原理
3.1 负载均衡依托:IPVS/LVS
Keepalived本身不直接实现负载均衡,而是调用Linux内核IPVS(LVS核心模块),实现内核级四层负载均衡,性能远超七层负载均衡,核心特点:
-
工作在网络四层,只转发流量,不解析应用层数据,性能极高,支持高并发。
-
支持多种调度算法,适配不同业务场景。
-
支持三种工作模式,适配不同网络环境。
-
3.2 常用负载调度算法
rr(轮询):核心逻辑是将请求依次分发给后端Real Server,实现请求的平均分配,适用场景为后端服务器配置一致、无状态服务,能确保各节点负载均匀。
wrr(加权轮询):核心逻辑是按节点权重比例分配请求,权重越高的节点接收的请求越多,适用场景为后端服务器性能不均衡,可通过权重调整让高性能节点承担更多负载。
lc(最少连接):核心逻辑是将请求分配给当前连接数最少的Real Server,适用场景为长连接服务,如数据库、文件传输等,能避免单个节点连接过载。
wlc(加权最少连接):核心逻辑是结合节点权重与当前连接数分配请求,兼顾节点性能与连接负载,适用场景为性能不均的长连接集群,平衡各节点负载与性能发挥。
sh(源地址哈希):核心逻辑是将同一客户端IP固定分配到同一Real Server,适用场景为需要会话保持的业务,确保客户端会话连续性。
3.3 LVS三种工作模式
-
DR模式(直接路由,推荐):最常用,性能最高,负载均衡器与RS在同一网段,RS直接回传给客户端,无需经过负载均衡器,适合大规模集群。
-
NAT模式(网络地址转换):请求和响应都经过负载均衡器,配置简单,性能一般,适合小规模集群。
-
TUN模式(IP隧道):跨网段部署,RS可在不同机房,配置复杂,适合异地集群。
四、核心配置文件详解(keepalived.conf)
配置文件默认路径:/etc/keepalived/keepalived.conf,分为全局配置、VRRP实例配置、虚拟服务器配置三部分。
4.1 主备高可用基础配置(Master节点)
- ! Configuration File for keepalived global_defs { router_id HA_MASTER # 节点唯一标识,建议用主机名 } # 健康检查脚本(可选,监控业务服务) vrrp_script chk_nginx { script "/usr/local/bin/check_nginx.sh" # 自定义检查脚本 interval 2 # 检查间隔2秒 weight -20 # 检查失败,优先级降低20 } vrrp_instance VI_1 { state MASTER # 初始状态,主节点 interface eth0 # 绑定VIP的网卡 virtual_router_id 51 # 集群ID,主备一致 priority 100 # 优先级,高于备节点 advert_int 1 # 心跳间隔1秒 nopreempt # 非抢占模式,生产推荐开启 authentication { auth_type PASS auth_pass 123456 # 认证密码,主备一致 } virtual_ipaddress { 192.168.1.100/24 # 虚拟IP,可配置多个 } track_script { chk_nginx # 关联健康检查脚本 } }
4.2 Backup节点核心差异
-
state改为BACKUP
-
priority低于Master(如90)
-
其余virtual_router_id、认证、VIP、网卡配置完全一致
4.3 负载均衡虚拟服务器配置
- virtual_server 192.168.1.100 80 { # VIP+端口 delay_loop 3 # 健康检查间隔3秒 lb_algo wrr # 调度算法:加权轮询 lb_kind DR # 工作模式:DR模式 persistence_timeout 60 # 会话保持时间60秒 protocol TCP # 后端真实服务器1 real_server 192.168.1.11 80 { weight 3 # 权重 TCP_CHECK { # TCP健康检查 connect_port 80 connect_timeout 3 } } # 后端真实服务器2 real_server 192.168.1.12 80 { weight 2 TCP_CHECK { connect_port 80 connect_timeout 3 } } }
五、安装与常用命令
5.1 快速安装(CentOS/RHEL)
-
YUM安装 yum install keepalived -y # 开机自启+启动 systemctl enable --now keepalived # 查看状态 systemctl status keepalived # 查看日志 tail -f /var/log/messages | grep keepalived
5.2 常用运维操作
-
查看VIP绑定:
ip addr -
查看IPVS规则:
ipvsadm -Ln -
重启服务:
systemctl restart keepalived -
故障模拟:停止Master服务
systemctl stop keepalived,查看VIP是否漂移
六、生产实战关键要点
-
开启非抢占模式:避免主节点恢复后频繁切换,导致服务波动。
-
精细化健康检查:不止检查服务器存活,还要监控业务服务(如Nginx、MySQL),避免节点在线但业务故障。
-
防火墙放行VRRP:VRRP使用组播224.0.0.18,协议号112,需放行防火墙,否则心跳失败。
-
SELinux配置:生产环境SELinux开启时,需配置规则允许Keepalived绑定VIP、执行脚本。
-
DR模式配置:后端RS需绑定VIP到回环网卡,抑制ARP广播,避免IP冲突。
-
日志监控:实时监控Keepalived日志,及时发现心跳异常、切换故障。
七、常见问题排查
-
VIP不漂移:检查virtual_router_id、优先级、防火墙、心跳间隔是否配置正确。
-
负载均衡不生效:检查IPVS模块是否加载、调度算法、工作模式、RS健康状态。
-
频繁主备切换:网络波动导致心跳丢失,延长通告间隔、调整超时时间,开启非抢占模式。
-
RS无法接收流量:DR模式下RS回环网卡VIP配置错误,ARP抑制未生效。
八、典型应用架构
-
Nginx+Keepalived:Nginx做七层负载均衡,Keepalived实现Nginx高可用,避免Nginx单点故障。
-
LVS+Keepalived:四层负载均衡+高可用,适合高并发Web集群、API网关。
-
MySQL+Keepalived:实现MySQL主库高可用,结合MHA实现数据库故障切换。