Keepalived 入门详解:高可用集群部署最佳实践!

1. 什么是 Keepalived?

在分布式集群中,单点故障(SPOF) 是影响系统稳定性的重要问题。Keepalived 作为一款高可用服务软件,可以有效防止集群单点故障,保障系统的高可用性。

Keepalived 最初是为 LVS(Linux Virtual Server)设计,用于管理和监控 LVS 集群节点。后来加入 VRRP(Virtual Router Redundancy Protocol)功能,不仅具备负载均衡能力,还可用于高可用解决方案。在 VRRP 虚拟路由器中,多个物理路由器通过竞选确定 MASTER 角色,负责路由工作,其他为 BACKUP。MASTER 角色可动态切换,确保高可用性。

1.1 Keepalived 的作用

  • 高可用(HA) :通过 VRRP(虚拟路由冗余协议) ,实现主备切换,保障 IP 高可用性。
  • 负载均衡(LB) :最初为 LVS(Linux Virtual Server) 设计,可用于管理 LVS 集群。

1.2 Keepalived 与 VRRP 机制

在 VRRP 模式下,一个 VIP(虚拟 IP) 被多个物理服务器共享,但只有一台 Master 负责转发流量,其他的 Backup 处于待命状态:

  • Master 负责转发流量
  • Backup 监听 Master 状态
  • Master 故障时,Backup 自动接管 VIP,提供不中断的服务

VRRP 的通信采用 IP 多播(多播地址 224.0.0.18) ,客户端完全透明,不需要修改路由配置。

💡 你可能会问 VRRP 怎么实现的?
VRRP 通过竞选协议来实现虚拟路由的功能,所有的协议报文都是通过 IP 多播(Multicast)包(多播地址 224.0.0.18)形式发送的。虚拟路由是由 VRID(范围 0-255) 和一组 IP 地址组成,对外表现为一个周知的 MAC 地址:00-00-5E-00-01-【VRID】 (这就是为什么后面的配置 virtual_router_id 为什么只能是 0 - 255)。在一个虚拟路由中,不管谁是 MASTER,对外都是相同的 MAC 和 IP(虚拟VIP)。客户端主机并不需要因为 MASTER 的改变而修改自己的路由配置,即对客户端来说这种主备切换是无感知的。


2. Keepalived 如何工作?

2.1 Keepalived 高可用架构

Keepalived 是主备高可用功能正常运行的基础,它负责主机和备机的心跳检测和浮动 IP 切换等底层核心工作,如果检测到异常,会自动发生主备切换,浮动会漂移到备机,备机提升为主机继续提供服务(可支持一主多备架构)。其中数据库和 Redis 是通过主从复制机制进行数据同步保持主备数据的一致性,详情可见前面两篇文章。
在这里插入图片描述
在这里插入图片描述

  • 主机(MASTER)与备机(BACKUP)

    • 主机 负责数据库和 Redis 的读写,并接管 Keepalived 管理的 VRRP 虚拟 IP(即可通过 VIP 访问主机)。
    • 备机 处于待命状态,仅可通过真实 IP 进行只读访问(例如数据同步、健康检查)。
  • VIP(虚拟 IP)

    • 业务访问 Redis 和数据库时,优先通过 VIP 连接,确保主机可用性。
    • Keepalived 监控主机健康状态,若主机故障,则 VIP 自动切换到备机,保证服务不中断。
  • 故障切换(Failover)

    • 当 Keepalived 发现主机故障时,VRRP 机制将 VIP 切换到备机,备机接管数据库和 Redis 的读写。
    • 原主机恢复后,可能需要重新竞选 MASTER,也可以设定优先级策略,避免频繁切换。

2.2 Master 与 Backup 的竞选机制

  • 初始化阶段

    • 多台 VRRP 路由器启动,并加入同一个 VRRP 组。
    • 每台路由器都有一个 优先级(Priority)
  • 竞选 MASTER

    • 所有路由器发送 VRRP 多播报文(224.0.0.18) 宣告自己的优先级。
    • 优先级最高的设备当选 MASTER,其余设备成为 BACKUP
    • 如果优先级相同,则 IP 地址最高的设备 成为 MASTER。
  • 正常运行

    • MASTER 定期发送 VRRP 广播,告诉 BACKUP:“我还在正常工作”。
    • BACKUP 设备一直监听 MASTER 的 VRRP 报文,如果收到,则继续保持 BACKUP 状态。
  • MASTER 故障(主备切换)

    • 如果 BACKUP 在一定时间内收不到 MASTER 的 VRRP 报文(注意防火墙原因导致配置失败),就认为 MASTER 故障。
    • BACKUP 设备重新发起竞选,选出新的 MASTER,继续提供服务。
  • 原 MASTER 恢复(可选)

    • 如果原 MASTER 恢复上线,它可配置是否重新加入竞选或者按照备节点部署:

      • 如果它的优先级比当前 MASTER 高,它会重新当选 MASTER,并接管流量。
      • 如果优先级低,则继续作为 BACKUP 设备。

3. Keepalived 安装与部署

3.1 安装 Keepalived

Keepalived 可在大部分 Linux 发行版中直接安装:

yum install -y keepalived 

3.2 部署环境准备

测试两台主机(一主一备)环境:

主机:192.168.121.23
备机:192.168.121.24
浮动IP:192.168.121.155

提前将防火墙 VRRP 协议对端放开:

# 防火墙设置(主备机都需要执行)
sed -i "/-A INPUT -j REJECT --reject-with icmp-host-prohibited/i -A INPUT -d 224.0.0.0/8 -i ens33 -p vrrp -j ACCEPT" /etc/sysconfig/iptables
sed -i "/-A INPUT -j REJECT --reject-with icmp-host-prohibited/i -A OUTPUT -d 224.0.0.0/8 -o ens33 -p vrrp -j ACCEPT" /etc/sysconfig/iptables
# 防火墙重启
service iptables restart

3.3 配置 Keepalived

Keepalived 采用模块化设计,不同模块实现不同功能,主要由 core、check 和 vrrp 三个模块组成:

  1. core(核心模块):

    • 负责 Keepalived 主进程的启动和维护。
    • 解析并加载全局配置文件,管理整体运行逻辑。
  2. check(健康检查模块):

    • 负责对后端服务(如 LVS、IPVS)进行健康检查。
    • 提供多种健康检查方式,并解析对应的健康检查配置。
  3. vrrp(VRRP 模块):

    • 运行 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)子进程。
    • 负责管理虚拟 IP(VIP)的选举和切换,实现高可用故障转移。
主机配置

主机 keepalived 配置文件 keepalived.conf 配置示例:

! Configuration File for keepalivedglobal_defs {notification_email {root@localhost.localdomain}notification_email_from ha@localhost.localdomainsmtp_server 127.0.0.1smtp_connect_timeout 30router_id r_id
}vrrp_script check_run {script /opt/keepalived/ha/ha_service_check.shinterval 3  # 检测时间间隔 单位sfall 3      # 连续失败次数达到 3 次后执行下面的操作#weight -60 #
}vrrp_instance VI_1 {state BACKUP#nopreempt    # 配置是否抢占、和priority配合使用interface ens33    # 网卡track_interface {ens33}virtual_router_id 155    # 匹配号priority 150    # 优先级advert_int 2    # VRRP 通告频率 单位秒authentication {auth_type PASSauth_pass P@sSw0rd}track_script {check_run}notify_fault  /opt/keepalived/ha/ha_notify_fault.shnotify_master /opt/keepalived/ha/ha_notify_master.shnotify_backup /opt/keepalived/ha/ha_notify_backup.shvirtual_ipaddress {192.168.121.155/19 dev ens33 scope global}
}

📌 重点参数解析:

  • state MASTER:表示当前节点是主服务器(另一台应为 BACKUP
  • priority 100:优先级(值越大,越容易成为 Master)
  • virtual_router_id:虚拟路由 ID,所有 VRRP 设备需一致
  • virtual_ipaddress:虚拟 IP(VIP),提供高可用
  • track_script:执行的检测脚本
  • nopreempt:如果存在,则表示不抢占,和优先级参数(priority)一起配合使用
  • advert_int:检查间隔,单位秒。

💡 关键点:

  • priority 可用于控制主备切换的优先级
  • virtual_router_id 必须一致,否则主备不会识别

备机配置

和主机基本保持一致,角色都是设置为 BACKUP,只是主机优先级设置为 150,备机优先级设置为 100。在这种情况下,当发生主备切换后,即使之前的主节点恢复运行,它也不会抢占备用节点成为新的主节点。原来的备用节点将继续作为主节点提供服务,直到发生故障或手动切换。这种行为确保了在主节点失效后,备用节点能够稳定地接管服务,并且在主节点恢复运行时不会引起不必要的主从切换,保持系统的稳定性。

! Configuration File for keepalivedglobal_defs {notification_email {root@localhost.localdomain}notification_email_from ha@localhost.localdomainsmtp_server 127.0.0.1smtp_connect_timeout 30router_id r_id
}vrrp_script check_run {script /opt/keepalived/ha/ha_service_check.shinterval 3 # 检测时间间隔 单位sfall 3      # 连续失败次数达到 3 次后执行下面的操作#weight -60
}vrrp_instance VI_1 {state BACKUP#nopreempt    # 配置是否抢占interface ens33    # 网卡track_interface {ens33}virtual_router_id 155    # 匹配号priority 100    # 优先级advert_int 2    # VRRP 通告频率 单位秒authentication {auth_type PASSauth_pass P@sSw0rd}track_script {check_run}notify_fault  /opt/keepalived/ha/ha_notify_fault.shnotify_master /opt/keepalived/ha/ha_notify_master.shnotify_backup /opt/keepalived/ha/ha_notify_backup.shvirtual_ipaddress {192.168.121.155/19 dev ens33 scope global}
}

3.4 主备切换通知及检测机制

在主备配置完成后,或发生主备切换时,Keepalived 可触发通知,并执行相应的脚本,确保高可用性。

通知脚本触发机制

在以下两种情况下,Keepalived 会执行通知脚本:

  1. 主备状态发生切换(包括 Keepalived 启动时的角色确定)。
  2. 异常情况触发(如检测到 Redis/数据库服务故障、关键进程异常等)。

通知脚本可用于告警通知、日志记录、服务切换等操作。


3.5 主备状态检测脚本配置

Keepalived 通过 vrrp_script 定义健康检查规则,检测异常并触发相应的主备切换流程。

vrrp_script check_run {script /opt/keepalived/ha/ha_service_check.sh  # 健康检测脚本interval 3  # 检测间隔时间,单位:秒fall 3      # 连续失败 3 次后,触发主备切换
}

检测机制说明

  • 检测间隔:每 3 秒执行一次检测。
  • 失败阈值:当检测到连续 3 次失败,触发 notify_fault 事件,执行 /opt/keepalived/ha/ha_notify_fault.sh,停止 keepalived,进入故障状态。

3.6 自定义触发主备切换

除因宕机、Keepalived 进程异常退出导致的主备切换外,还支持自定义触发条件。例如,可在检测到以下异常情况时触发切换:

  1. 关键 Java 进程异常,导致服务不可用。
  2. Redis 或 数据库宕机,影响数据读写。
  3. 磁盘剩余空间低于 10% ,可能导致系统无法正常运行。

健康检查脚本 /opt/keepalived/ha/ha_service_check.sh 示例

#!/bin/bash
# 主备检测脚本
# 省略检测逻辑...
#if(数据库异常) exit 1
exit 0  # 0 代表检测通过,其他值代表失败

异常检测流程

  1. 每 3 秒检测一次interval 3)。
  2. 连续 3 次失败fall 3),触发 notify_fault,执行 /opt/keepalived/ha/ha_notify_fault.sh

3.7 故障处理(notify_fault)

当检测到故障(如 Redis/数据库 异常)并连续 3 次失败,Keepalived 触发 notify_fault 事件,执行 /opt/keepalived/ha/ha_notify_fault.sh 进行故障处理。

#!/bin/bash
# 故障通知脚本
echo "检测到异常...做切换" >> $HA_LOG_FILE
service stop keepalived
# 其他逻辑...

主机的 keepalived 停止则备机的 keepalived 会自动切换为新的主机,接管虚拟VIP。


3.8 主备切换流程

初始状态及切换逻辑

在该方案中,主机(Master)和备机(Backup)在初始化时,state 参数均设置为 BACKUP,这样:

  • 第一次启动时,主机会自动晋升为 Master,执行 /opt/keepalived/ha/ha_notify_master.sh
  • 主机宕机后,备机检测到主机失联,自动晋升为 Master,执行 /opt/keepalived/ha/ha_notify_master.sh

注意:角色切换不会修改 keepalived.conf 配置文件的 state 参数值,避免配置被错误覆盖。


3.9 主备切换相关脚本

主机晋升(notify_master)

当节点晋升为 Master 时,Keepalived 触发 notify_master,执行 /opt/keepalived/ha/ha_notify_master.sh,示例如下:

#!/bin/bash
# 主机晋升脚本
echo "当前节点晋升为主机(Master)"
# 省略具体逻辑...
exit 0

切换为备机(notify_backup)

当节点降级为 Backup 时,Keepalived 触发 notify_backup,执行 /opt/keepalived/ha/ha_notify_backup.sh,示例如下:

#!/bin/bash
# 备机降级脚本
echo "当前节点降级为备机(Backup)"
# 省略具体逻辑...
exit 0

4. 测试 Keepalived 主备切换

4.1 启动 Keepalived

service start keepalived

4.2 验证 VIP 绑定情况

ip addr

如果发现 vip 存在则表示配置成功。

4.3 模拟主机故障,观察 VIP 漂移

# 停止 Master(在主机上执行)
service stop keepalived# 在 Backup 上检查 VIP 是否接管(在备机上执行)
ip addr

若 vip 已转移到 Backup 服务器,则主备切换成功!


5. Keepalived 进阶功能

5.1 结合 LVS 负载均衡

Keepalived 可用于管理 LVS(Linux Virtual Server) ,实现高可用负载均衡。

5.2 结合 Nginx 实现高可用

可结合 Keepalived + Nginx 方案,构建高可用的 Web 负载均衡架构。


6. 总结

Keepalived 适用于哪些场景?

  • 服务器高可用(防止单点故障)
  • LVS 负载均衡管理
  • Nginx / HAProxy 高可用方案

使用 Keepalived 的核心步骤

  1. 安装 Keepalived
  2. 配置 VRRP(设置 VIP、优先级)
  3. 测试主备切换(模拟 Master 故障,观察 VIP 迁移)

📢 结语

如果你正在构建一个高可用架构,Keepalived 绝对是一个简单易用、高效可靠的解决方案

📌 你用过 Keepalived 吗?在评论区分享你的使用经验吧!

🌟 你的支持是我持续创作的动力,欢迎点赞、收藏、分享!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28021.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔找不到php扩展swoole,服务器编译安装

1. 在php7.4中安装swoole,但找不到这个扩展安装 2. 服务器下载源码解压安装 http://pecl.php.net/package/swoole 下载4.8.0版本 解压到/www/server/php/74/下 3. 发现报错问题; 更新一下依赖 yum update yum -y install gcc gcc-c autoconf libjpe…

计算机毕业设计SpringBoot+Vue.js常规应急物资管理系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

国产编辑器EverEdit - 超级丰富的标签样式设置!

1 设置-高级-标签 1.1 设置说明 选择主菜单工具 -> 设置 -> 常规,在弹出的选项窗口中选择标签分类,如下图所示: 1.1.1 多文档标签样式 默认 平坦 渐变填充 1.1.2 停靠窗格标签样式 默认 平坦 渐变填充 1.1.3 激活Tab的…

二、QT和驱动模块实现智能家居----2、编译支持QT的系统

因为我们的Linux内核文件不支持QT系统(当然如果你的支持,完全跳过这篇文章),所以我们要从网上下载很多软件包,这里直接用百问网的软件包,非常方便。 一:Ubuntu 配置 1 设置交叉编译工具链 以…

【分享】网间数据摆渡系统,如何打破传输瓶颈,实现安全流转?

在数字化浪潮中,企业对数据安全愈发重视,网络隔离成为保护核心数据的重要手段。内外网隔离、办公网与研发网隔离等措施,虽为数据筑牢了防线,却也给数据传输带来了诸多难题。传统的数据传输方式在安全性、效率、管理等方面暴露出明…

Graph RAG 迎来记忆革命:“海马体”机制让问答更精准!

随着生成式 AI 技术的快速发展,RAG(Retrieval-Augmented Generation)和 Agent 成为企业应用大模型的最直接途径。然而,传统的 RAG 系统在准确性和动态学习能力上存在明显不足,尤其是在处理复杂上下文和关联性任务时表现不佳。近期,一篇论文提出了 HippoRAG 2,这一新型 R…

现在创业的风口有哪些?

1. 人工智能与机器学习 生成式AI:如ChatGPT等工具,广泛应用于内容创作、客服等领域。 AI辅助工具:涵盖医疗、金融、法律等行业,提升效率。 自动化:企业通过AI优化流程,减少人力成本。 2. 绿色科技与可持…

任务9:交换机基础及配置

CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog 一、交换机基础 交换机的概念:交换机是一种网络设备,用于连接多台计算机或网络设备,实现数据包在局域网内的快速交换。交换机基于MAC地址来转发数据包&#x…

阿里万相,正式开源

大家好,我是小悟。 阿里万相正式开源啦。这就像是AI界突然开启了一扇通往宝藏的大门,而且还是免费向所有人敞开的那种。 你想想看,在这个科技飞速发展的时代,AI就像是拥有神奇魔法的魔法师,不断地给我们带来各种意想…

计算机毕业设计SpringBoot+Vue.js相亲网站(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

15-YOLOV8OBB损失函数详解

一、YOLO OBB支持的OBB 在Ultralytics YOLO 模型中,OBB 由YOLO OBB 格式中的四个角点表示。这样可以更准确地检测到物体,因为边界框可以旋转以更好地适应物体。其坐标在 0 和 1 之间归一化: class_index x1 y1 x2 y2 x3 y3 x4 y4 YOLO 在内部处理损失和输出是xywhr 格式,x…

硬件学习笔记--47 LDO相关基础知识介绍

目录 1.LDO主要功能介绍 2.LDO相关参数介绍 3.使用方法 4.优、缺点 1.LDO主要功能介绍 LDO(Low Dropout Regulator)是一种线性稳压器,用于将输入电压转换为稳定的输出电压。其主要功能包括: 1)稳压功能&#xff1…

10分钟从零开始搭建机器人管理系统(飞算AI)

1. 安装插件 https://www.feisuanyz.com/ 2. Intellij IDEA中运行 创建一个BS架构的机器人远程操控系统,具备机器人状态及位置实时更新,可以实现机器人远程遥控,可以对机器人工作日志进行统计分析,以及其它管理系统的常用功能3…

基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 EM算法 E步:期望步 M步:最大化步 4.2 GMM模型 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 程序运行配置环境: 人工智能算法…

DeepSeek DeepEP学习(一)low latency dispatch

背景 为了优化延迟,low lantency使用卡间直接收发cast成fp8的数据的方式,而不是使用normal算子的第一步执行机间同号卡网络发送,再通过nvlink进行转发的两阶段方式。进一步地,normal算子的dispatch包含了notify_dispatch传输meta…

SparkStreaming之04:调优

SparkStreaming调优 一 、要点 4.1 SparkStreaming运行原理 深入理解 4.2 调优策略 4.2.1 调整BlockReceiver的数量 案例演示: object MultiReceiverNetworkWordCount {def main(args: Array[String]) {val sparkConf new SparkConf().setAppName("Networ…

性能测试监控工具jmeter+grafana

1、什么是性能测试监控体系? 为什么要有监控体系? 原因: 1、项目-日益复杂(内部除了代码外,还有中间件,数据库) 2、一个系统,背后可能有多个软/硬件组合支撑,影响性能的因…

【机器学习】Logistic回归#1基于Scikit-Learn的简单Logistic回归

主要参考学习资料: 《机器学习算法的数学解析与Python实现》莫凡 著 前置知识:线性代数-Python 目录 问题背景数学模型类别表示Logistic函数假设函数损失函数训练步骤 代码实现特点 问题背景 分类问题是一类预测非连续(离散)值的…

频域分析:利用傅里叶变换(Fourier Transform)对图像进行深度解析

在图像处理和计算机视觉领域,傅里叶变换(Fourier Transform)是一项基础而强大的工具。它将时域信号(如图像)转化为频域信号,为我们提供了图像的频率特性,这对于图像的分析、压缩、去噪和特征提取…

WPF+WebView 基础

1、基于.NET8&#xff0c;通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…