【无标题】Keepalived

核心知识总结

Keepalived 是VRRP(虚拟路由冗余协议)的软件实现,核心解决服务单点故障问题,实现集群高可用(HA),原生为 LVS 设计,也可适配 HAProxy、Nginx、MySQL 等服务,其核心是通过 VIP 漂移实现故障自动切换,降低系统 MTTR(平均故障恢复时间),提升 SLA(服务等级协议)可用性。

核心基础概念

• VRRP 核心术语:虚拟路由器(VRID 唯一标识,0-255)、VIP(对外提供服务的虚拟 IP)、VMAC(虚拟 MAC)、Master(主节点,高优先级)、Backup(备节点,低优先级);

• VRRP 工作模式:抢占式(默认,主节点恢复后抢占 VIP)、非抢占式(主节点恢复不抢占,避免网络抖动);

• 通信方式:默认多播(224.0.0.18),可改为单播(减少网络拥塞);

• Keepalived 核心组件:VRRP Stack(VIP 消息通告)、Checkers(后端服务健康检测)、IPVS Wrapper(生成 LVS 规则)、WatchDog(监控自身进程)。

Keepalived 核心功能

  1. 基于 VRRP 实现VIP 地址漂移,主节点故障后备节点自动接管 VIP;

  2. 为 LVS 集群自动生成 IPVS 规则,并对后端 RS(真实服务器)做健康检测;

  3. 通过VRRP Script调用外部脚本,实现对 HAProxy/Nginx/MySQL 等非 LVS 服务的健康检测和故障切换;

  4. 支持主备(单主)和双主架构,提升服务器资源利用率;

  5. 故障切换时可触发通知脚本(如邮件告警),实现运维可视化

核心配置结构

Keepalived 主配置文件/etc/keepalived/keepalived.conf分为 3 部分,所有配置均围绕此结构展开:

  1. global_defs:全局配置,含邮件告警、router_id、VRRP 全局参数(如关闭 vrrp_strict);

  2. vrrp_instance:VRRP 实例配置,核心定义 VIP、主备状态、优先级、认证方式、通信规则;

  3. virtual_server/real_server:LVS 相关配置,定义虚拟服务、后端 RS、健康检测规则(适配 LVS 场景)。

关键特性

非抢占模式:需将所有节点 state 设为 BACKUP,添加nopreempt,解决抢占式的网络抖动问题;

单播配置:关闭vrrp_strict,配置unicast_src_ip(本机 IP)和unicast_peer(对端 IP),替代多播;

健康检测:对 LVS 直接通过TCP_CHECK/HTTP_GET检测,对其他服务通过vrrp_script调用外部脚本;

双主架构:配置多个 VRRP 实例,两个节点互为主备,分别接管不同 VIP,提升资源利用率。

主要实验

实验环境配置(rh1 rh2 ka1 ka2)

root@rs1 \~# vmset.sh eth0 172.25.254.10 rs1

root@rs1 \~# dnf install httpd -y

root@rs1 \~# echo RS1 - 172.25.254.10 > /var/www/html/index.html

root@rs1 \~# systemctl enable --now httpd

root@rs2 \~# vmset.sh eth0 172.25.254.20 rs2

root@rs2 \~# dnf install httpd -y

root@rs2 \~# echo RS2 - 172.25.254.20 > /var/www/html/index.html

root@rs2 \~# systemctl enable --now httpd

root@KA1 \~# vmset.sh eth0 172.25.254.50 KA1

root@KA2 \~# vmset.sh eth0 172.25.254.60 KA6

ka1本地解析

设置时间同步 ka2查看

Keepalived虚拟路由配置

ka1

root@KA1 xia# mount /dev/sr0 /mnt

mount: /mnt: WARNING: source write-protected, mounted read-only.

root@KA1 xia# dnf install keepalived.x86_64 -y

ka2

root@KA6 xia# mount /dev/sr0 /mnt

mount: /mnt: WARNING: source write-protected, mounted read-only.

root@KA6 xia# dnf install keepalived.x86_64 -y

Ka1

Ka2

记得要使用

当KA1 故障时

在KA2中看vip是否被迁移到当前主机(ipconfig)

Keepalived的子文件设定

Ka1(改两个文件)

非抢占模式(文件修改后要使用systemctl stop keepalived.service)

Ka1

root@KA1 log# vim /etc/keepalived/conf.d/webvip.conf

Ka2

测试

root@KA6 xia# systemctl start keepalived.service

root@KA1 log# systemctl start keepalived.service

keepalived的单播模式

ka2

测试

root@KA1 xia# tcpdump -i eth0 -nn src host 172.25.254.50 and dst 172.25.254.60

root@KA2 xia# tcpdump -i eth0 -nn src host 172.25.254.60 and dst 172.25.254.50

root@KA1 log# systemctl stop keepalived.service

root@KA1 log# systemctl start keepalived.service

IPVS的高可用性

root@rs1/2 xia# cd /etc/NetworkManager/system-connections/

root@rs1/2 system-connections# ls

eth0.nmconnection

root@rs1/2 system-connections# cp eth0.nmconnection lo.nmconnection -p

root@rs1/2 system-connections# vim lo.nmconnection

root@rs1/2 system-connections# vim /etc/sysctl.conf

root@rs1/2 system-connections# sysctl -p

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

#安装ipvsadm

root@KA1/KA2 \~# dnf install ipvsadm -y

ka1ka2

测试

root@KA1 \~# watch -n 1 ipvsadm -Ln

在RS1中关闭wen服务

root@rs1 system-connections# systemctl stop httpd.service

root@KA1 \~# systemctl stop keepalived.service

Keepalived + HAProxy 是生产环境最常用的高可用负载均衡架构:

  1. HAProxy:实现七层负载均衡、会话保持、后端 RS 健康检测;

  2. Keepalived:为 HAProxy 提供 VIP 漂移,解决 HAProxy 单点故障;

  3. 核心流程:客户端访问 VIP → Keepalived 将 VIP 绑定到主 HAProxy 节点 → HAProxy 将请求转发到后端 RS → 主 HAProxy 故障 → Keepalived 漂移 VIP 到备 HAProxy 节点 → 服务不中断。

实验

root@KA1 \~# vim /etc/keepalived/scripts/haproxy_check.sh

root@KA1 \~# systemctl restart haproxy.service

root@KA1 \~# systemctl stop haproxy.service

相关推荐
tntxia19 小时前
linux curl命令详解_curl详解
linux
扛枪的书生1 天前
Linux 网络管理器用法速查
linux
顺风尿一寸1 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode1 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫1 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao3 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐4 天前
Linux内存扩容指南
linux
zylyehuo5 天前
Linux 彻底且安全地删除文件
linux
用户805533698035 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297915 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux