【无标题】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本地解析 ![](https://i-blog.csdnimg.cn/direct/ac9805698d3643dd930b8b6cbf589b73.png) 设置时间同步 ka2查看 ![](https://i-blog.csdnimg.cn/direct/f83df578059044e99ffb7d779d02f9c9.png) #### 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 ![](https://i-blog.csdnimg.cn/direct/a655cf1f1cbb4a8f878af085d4c5af24.png) Ka2 ![](https://i-blog.csdnimg.cn/direct/3e1a83fddfca469ebd26db9d5648359e.png) 记得要使用 当KA1 故障时 ![](https://i-blog.csdnimg.cn/direct/cb820b3ec251401ea410d49d6f4929e4.png) 在KA2中看vip是否被迁移到当前主机(ipconfig) ### Keepalived的子文件设定 Ka1(改两个文件) ![](https://i-blog.csdnimg.cn/direct/640f9160c24b4da285dff7a81eabc36c.png) ![](https://i-blog.csdnimg.cn/direct/651298688d524290a493022c76816a92.png) 非抢占模式(文件修改后要使用systemctl stop keepalived.service) Ka1 \[root@KA1 log\]# vim /etc/keepalived/conf.d/webvip.conf ![](https://i-blog.csdnimg.cn/direct/e5b115efbb7b41dbb2e812c48a883677.png) Ka2 ![](https://i-blog.csdnimg.cn/direct/4dd5b26aad294482abeba8e6f77e8027.png) 测试 \[root@KA6 xia\]# systemctl start keepalived.service \[root@KA1 log\]# systemctl start keepalived.service ![](https://i-blog.csdnimg.cn/direct/913f6b208bd449569a00e1ec0fc71c36.png) ![](https://i-blog.csdnimg.cn/direct/38c054fefea64b06955861445824cc5b.png) keepalived的单播模式 ![](https://i-blog.csdnimg.cn/direct/dd3519c4f35545b2aa71c43d3da900ee.png) ![](https://i-blog.csdnimg.cn/direct/51b4f684fbd2476594515ace09f24573.png) ka2 ![](https://i-blog.csdnimg.cn/direct/63eb44391f3d4e92844b9028131c5894.png) 测试 \[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 ![](https://i-blog.csdnimg.cn/direct/55e728ee3077443ea6cd107671631e75.png) \[root@KA1 log\]# systemctl start keepalived.service ![](https://i-blog.csdnimg.cn/direct/1bbef8bfb3134da9a1b9d1279c148e89.png)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 ![](https://i-blog.csdnimg.cn/direct/8ecf4bacc48446d3a1a00a006ca730d3.png) \[root@rs1/2 system-connections\]# vim /etc/sysctl.conf ![](https://i-blog.csdnimg.cn/direct/5622ab400fdf45e88c56f5167a2d214c.png) \[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 ![](https://i-blog.csdnimg.cn/direct/426fa8a123df4bde8956085d61277d0f.png) 测试 \[root@KA1 \~\]# watch -n 1 ipvsadm -Ln ![](https://i-blog.csdnimg.cn/direct/27708794c49f47eb97895f8aeae93414.png) 在RS1中关闭wen服务 \[root@rs1 system-connections\]# systemctl stop httpd.service ![](https://i-blog.csdnimg.cn/direct/8a2dd351e7a442c38b8b9324c45a65aa.png) \[root@KA1 \~\]# systemctl stop keepalived.service ![](https://i-blog.csdnimg.cn/direct/da54433650834af5b6d59053c53a9fa8.png) 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 ![](https://i-blog.csdnimg.cn/direct/71a6ff39cc074f1f95f6abc623ba1f57.png) \[root@KA1 \~\]# systemctl restart haproxy.service ![](https://i-blog.csdnimg.cn/direct/e8a8ce90ab1e4c109441830d886b9490.png) \[root@KA1 \~\]# systemctl stop haproxy.service ![](https://i-blog.csdnimg.cn/direct/857c9ac131c64745b079014f59a31ee5.png)

相关推荐
勇闯逆流河1 小时前
【Linux】基础开发工具(软件包、vim)
linux·运维·服务器
先做个垃圾出来………1 小时前
Python常见文件操作
linux·数据库·python
tod1131 小时前
OS 核心知识点全解析(一)
linux·开发语言·面试经验
czxyvX1 小时前
020-Linux-应用层自定义协议与序列化
linux·网络
vortex52 小时前
只能进入、不能查看的目录权限
linux
IP搭子来一个2 小时前
独享IP和共享IP怎么选?全面对比解析
运维·网络·tcp/ip
科技块儿2 小时前
如何用离线库秒筛“数据中心”IP段并自动封号?
网络·网络协议·tcp/ip
tiantianuser2 小时前
RDMA设计50: 如何验证网络嗅探功能?
网络·fpga开发·rdma·高速传输·cmac·roce v2
代码游侠2 小时前
STM32开发——基础外设
linux·运维·arm开发·stm32·单片机·嵌入式硬件·学习