Keepalived 核心知识点

Keepalived 是基于VRRP 虚拟路由冗余协议的软件实现,核心用于解决单点故障、实现服务高可用,原生为 IPVS 服务设计,也可适配 Nginx/HAProxy 等应用

一、前置基础:高可用集群与 VRRP

1. 高可用核心概念

  • 集群类型:负载均衡(LB:LVS/HAProxy/Nginx)、高可用(HA:解决 SPoF 单点故障,如数据库 / Redis)、高性能计算(HPC);
  • 系统可用性 :公式A = MTBF/(MTBF+MTTR),核心通过降低 MTTR(平均故障恢复时间) 提升可用性,常用指标 99.9%/99.99%/99.999%;
  • 故障类型:硬件故障(设计缺陷、损耗、不可抗力)、软件故障(设计缺陷、bug);
  • 高可用实现:建立冗余机制,分主备(active/passive)、双主(active/active),通过心跳检测实现状态切换。

2. VRRP 核心要点

VRRP 解决静态网关单点风险,分物理层(路由器 / 三层交换机)和软件层(Keepalived)实现,核心术语与机制:

  • 核心术语:虚拟路由器(VRID 唯一标识,0-255)、VIP(虚拟 IP)、VMAC(00-00-5e-00-01-VRID)、master(主设备)、backup(备用设备)、priority(优先级,值越高越优先);
  • 工作机制 :主设备周期性发送通告(心跳) ,含优先级等信息;支持抢占式 / 非抢占式,安全认证分无认证、简单字符认证、MD5;
  • 工作模式:主备(单虚拟路由器)、双主(两个虚拟路由器互为主备)。

二、Keepalived 基础:架构与部署

1. 核心功能

  1. 基于 VRRP 实现VIP 地址漂移,完成主备切换;
  2. 为 VIP 节点自动生成 IPVS 规则;
  3. 检测 IPVS 集群后端 RS(真实服务器)健康状态;
  4. 提供脚本调用接口,支持 Nginx/HAProxy 等第三方服务高可用。

2. 架构组成(用户空间)

核心组件:vrrp stack(VIP 消息通告)、checkers(RS 健康检测)、IPVS wrapper(生成 IPVS 规则)、WatchDog(监控进程)、SMTP(邮件通知);辅助组件:配置解析器、IO 复用器、内存管理组件,对接内核空间 IPVS/NETLINK。

3. 部署基础

  • 环境准备:节点时间同步(ntp/chrony)、关闭防火墙 / SELinux,可选主机名解析、SSH 密钥认证;
  • 相关文件 :主程序/usr/sbin/keepalived、主配置/etc/keepalived/keepalived.conf、系统服务/lib/systemd/system/keepalived.service
  • 安装 :RHEL/CentOS 通过dnf install keepalived -y安装,启动后通过ps axf | grep keepalived验证。

三、Keepalived 核心配置

配置文件分三部分:全局配置(global_defs)VRRP 实例配置(vrrp_instance)LVS 配置(virtual_server),核心配置语法与要点:

1. 全局配置(global_defs)

定义邮件通知、路由器标识、VRRP 优化参数,关键配置:

  • 邮件配置:故障切换时的发送 / 接收邮箱、SMTP 服务器;
  • router_id:节点唯一标识,建议用主机名;
  • vrrp_skip_check_adv_addr:跳过相同路由器的通告报文检查,提升性能;
  • vrrp_strict:严格遵循 VRRP 协议,禁用建议(会限制 VIP、单播、IPv6);
  • vrrp_garp_interval/vrrp_gna_interval:免费 ARP/NA 报文间隔,用于更新网络设备缓存。

2. VRRP 实例配置(vrrp_instance)

定义虚拟路由器核心参数,主备节点需保证virtual_router_idauth_pass一致,关键配置:

  • state:MASTER(主)/BACKUP(备),非抢占模式下需全部设为 BACKUP;
  • interface:绑定的物理网卡(如 eth0);
  • priority:优先级(1-254),主节点高于备节点;
  • advert_int:心跳通告间隔,默认 1s;
  • authentication:认证类型(PASS 推荐,AH 不推荐),密钥仅前 8 位有效;
  • virtual_ipaddress:配置 VIP,支持多 IP、指定网卡 / 标签;
  • 语法检测:keepalived -t -f /etc/keepalived/keepalived.conf

3. 高级配置技巧

  • 日志功能 :修改/etc/sysconfig/keepalived添加-S 6,在rsyslog.conf配置local6.* /var/log/keepalived.log,重启服务生效;
  • 子配置文件 :通过include /path/*.conf拆分复杂配置,便于管理;
  • 非抢占模式 :添加nopreempt,避免主节点恢复后抢占 VIP 导致网络抖动,需所有节点 state 为 BACKUP
  • 抢占延迟preempt_delay N,主节点恢复后延迟 N 秒抢占 VIP,默认 300s;
  • VIP 单播 :替代默认多播,减少网络拥塞,配置unicast_src_ip(本机 IP)和unicast_peer(对端 IP),需禁用 vrrp_strict

四、Keepalived 企业核心应用

1. 主备架构(单主)

最基础架构,一台主节点提供服务,备节点待机,主节点故障后 VIP 漂移至备节点,核心配置差异 :备节点state=BACKUPpriority更低,其余与主节点一致。

2. 双主 / 多主架构

解决单主架构资源利用率低的问题,多 VIP 分别绑定不同节点,节点互为主备:

  • 双主:配置两个 VRRP 实例,节点 1 为实例 1 主、实例 2 备,节点 2 相反,各承载一个 VIP 服务;
  • 三主:三个节点、三个 VRRP 实例,每个节点为一个实例的主、其余实例的备,优先级依次递减。

3. 状态通知脚本

故障切换时触发脚本(如邮件通知),核心配置与步骤:

  • 脚本类型notify_master(成为主节点)、notify_backup(转为备节点)、notify_fault(故障状态);
  • 配置要点 :全局开启enable_script_security,指定script_user(如 root),在 VRRP 实例中绑定脚本;
  • 邮件配置 :安装mailx/s-nail,配置/etc/mail.rc中的 SMTP 服务器 / 账号,编写脚本实现邮件发送。

4. 实现 IPVS 高可用

Keepalived 原生支持 IPVS,配置virtual_server实现 LVS 集群高可用,核心配置:

  • 虚拟服务器virtual_server VIP PORT,定义调度算法(rr/wrr/lc 等)、集群模式(NAT/DR/TUN,DR 常用)、协议(TCP/UDP);
  • 真实服务器real_server RS_IP PORT,配置权重weight,健康检测方式;
  • 健康检测 :分传输层(TCP_CHECK,检测端口连通性)、应用层(HTTP_GET/SSL_GET,检测 URL 响应码,如 200);
  • 容错机制sorry_server,所有 RS 故障时自动切换至备用服务器。

5. 第三方应用高可用(VRRP Script)

通过自定义监控脚本实现 Nginx/HAProxy 等应用的高可用,核心两步:

  1. 定义 vrrp_script :指定监控脚本路径、检测间隔interval、权重调整weight(负值,故障时降低节点优先级)、失败 / 成功次数fall/rise
  2. 调用脚本 :在 VRRP 实例中通过track_script绑定自定义脚本,脚本返回非 0 时触发权重调整,实现 VIP 漂移。
  • 核心原理:监控应用状态,异常时降低主节点优先级,使其低于备节点,触发主备切换。

五、关键实战要点

  1. LVS-DR 模式配置 :后端 RS 需在 lo 网卡绑定 VIP,修改内核参数arp_ignore=1arp_announce=2,避免 ARP 广播冲突;
  2. 故障测试 :关闭主节点 Keepalived / 应用、断开网络,通过tcpdump抓包(多播 224.0.0.18 / 单播对端 IP)观察心跳、ipvsadm -Ln查看 IPVS 规则、ip addr查看 VIP 漂移;
  3. 常见坑点vrrp_strict与单播 / VIP ping 冲突,需禁用;配置文件括号需分行写;非抢占模式需所有节点 state 为 BACKUP;
  4. 双服务调度:双主架构可分别承载不同服务(如 ka1 调度 HTTPD、ka2 调度 MySQL),通过不同 VRRP 实例和 virtual_server 配置实现。
相关推荐
OpsEye2 小时前
监控 100 问(七):混合云环境下的 IT 监控策略
运维·it·监控·混合云
feng68_2 小时前
Nginx高性能Web服务器
linux·运维·服务器·nginx
海色的人2 小时前
ansible普通用户批量修改密码
运维
unfeeling_2 小时前
Nginx实验
运维·nginx
悠闲蜗牛�2 小时前
边缘AI推理实战:从服务器到嵌入式设备的模型部署与优化
运维·服务器·人工智能
shawnyz3 小时前
Nginx的源码编译
运维·nginx
The️3 小时前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
fengtangjiang4 小时前
国产操作系统安装tomcat
linux·运维·tomcat
牛奶咖啡134 小时前
DevOps自动化运维实践_使用再生龙对Linux系统进行备份还原
运维·自动化·devops·linux系统的备份还原·linux系统克隆备份·再生龙