keepalived高可用与负载均衡

一、核心基础认知

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)实现节点间通信,核心流程:

  1. 正常运行:Master节点绑定VIP,每隔1-3秒发送VRRP心跳通告,告知Backup节点自身正常运行。

  2. 故障检测:Backup节点在指定时间内(通常3倍通告间隔)未收到心跳,判定Master节点故障。

  3. 自动切换:Backup节点按优先级选举新Master,新节点绑定VIP,发送免费ARP更新网关/交换机ARP缓存,完成无缝切换。

  4. 故障恢复:原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抑制未生效。

八、典型应用架构

  1. Nginx+Keepalived:Nginx做七层负载均衡,Keepalived实现Nginx高可用,避免Nginx单点故障。

  2. LVS+Keepalived:四层负载均衡+高可用,适合高并发Web集群、API网关。

  3. MySQL+Keepalived:实现MySQL主库高可用,结合MHA实现数据库故障切换。

相关推荐
李李李li2 小时前
vmware各种版本下载链接-github
linux·ubuntu·开源软件
残 风2 小时前
linux(Xshell、Xterm)如何搭建隧道间接访问目标服务网站教程
linux·运维·php·信息与通信
x***r1512 小时前
WinDynamicDesktop动态壁纸软件安装教程:动态壁纸+地理位置配置(64位)
linux·运维·服务器
青花瓷2 小时前
windows下如何移动docke从C盘到F盘
运维·服务器
老卢聊运维2 小时前
CoreDNS配置详解:forward、cache、rewrite插件最佳实践指南
运维·云原生·kubernetes
IT青栀菀2 小时前
Tengine替换Nginx作为代理服务遇到的问题
运维·nginx
蓝天白云下遛狗2 小时前
关于多网卡情况下docker内部网络通讯研究
运维·docker·容器
MIXLLRED2 小时前
解决:RealSense D435 在树莓派4B(Ubuntu 22.04 + ROS2 Humble)上的权限与驱动问题完整复盘
linux·ubuntu·树莓派·realsense d400
白毛大侠2 小时前
LVS 完全入门:从零理解 Linux 虚拟服务器的三种模式
linux·服务器·lvs