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实现数据库故障切换。

相关推荐
郝学胜-神的一滴27 分钟前
Python 鸭子类型:优雅的多态哲学,让代码更自由
linux·服务器·开发语言·python·网络协议
北冥湖畔的燕雀27 分钟前
POSIX信号量操作全解析
linux·运维·服务器
feng_you_ying_li2 小时前
linux之重定向原理与缓冲区基本介绍
linux
雷工笔记2 小时前
MES 系统 设备保养管理模块详细设计方案
运维·数据库
晚风_END4 小时前
Linux|操作系统|zfs文件系统的使用详解
linux·运维·服务器·数据库·postgresql·性能优化·宽度优先
科研前沿9 小时前
镜像视界 CameraGraph™+多智能体:构建自感知自决策的全域空间认知网络技术方案
大数据·运维·人工智能·数码相机·计算机视觉
暴力求解9 小时前
Linux---线程基础
linux·运维·服务器
JAVA面经实录9179 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
晚风_END9 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发
GanGanGanGan_9 小时前
Rocky Linux 9 + XFCE 编译安装 fcitx5 + Rime 教程
linux·centos