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

news2025/4/17 21:54:54

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 keepalived

global_defs {
        notification_email {
                root@localhost.localdomain
        }
        notification_email_from ha@localhost.localdomain
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id r_id
}

vrrp_script check_run {
   script /opt/keepalived/ha/ha_service_check.sh
   interval 3  # 检测时间间隔 单位s
   fall 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 PASS
                auth_pass P@sSw0rd
        }

        track_script {
                check_run
        }

        notify_fault  /opt/keepalived/ha/ha_notify_fault.sh
        notify_master /opt/keepalived/ha/ha_notify_master.sh
        notify_backup /opt/keepalived/ha/ha_notify_backup.sh

        virtual_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 keepalived

global_defs {
        notification_email {
                root@localhost.localdomain
        }
        notification_email_from ha@localhost.localdomain
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id r_id
}

vrrp_script check_run {
   script /opt/keepalived/ha/ha_service_check.sh
   interval 3 # 检测时间间隔 单位s
   fall 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 PASS
                auth_pass P@sSw0rd
        }

        track_script {
                check_run
        }

        notify_fault  /opt/keepalived/ha/ha_notify_fault.sh
        notify_master /opt/keepalived/ha/ha_notify_master.sh
        notify_backup /opt/keepalived/ha/ha_notify_backup.sh

        virtual_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.coloradmin.cn/o/2310041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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…

开发博客系统

前言 准备工作 数据库表分为实体表和关系表 第一,建数据库表 然后导入前端页面 创建公共模块 就是统一返回值,异常那些东西 自己造一个自定义异常 普通类 mapper 获取全部博客 我们只需要返回id,title,content,us…

微信小程序上如何使用图形验证码

1、php服务器生成图片验证码的代码片段如下: 注意红框部分的代码,生成的是ArrayBuffer类型的二进制图片 2、显示验证码 显示验证码,不要直接image组件加上src显示,那样拿不到cookie,没有办法做图形验证码的验证&…

IntelliJ IDEA 构建项目时内存溢出问题

问题现象 在使用 IntelliJ IDEA 构建 Java 项目时,遇到了以下错误: java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space这是一个典型的 Java 堆内存不足错误,表…

大模型微调与RAG检索增强技术深度解析

一、引言 随着人工智能技术的飞速发展,大模型(如BERT、GPT等)在自然语言处理、计算机视觉等领域取得了显著成效。然而,这些预训练好的大模型往往难以直接应用于特定业务场景,因此,大模型微调(F…

[liorf_localization_imuPreintegration-2] process has died

使用liorf,编译没报错,但是roslaunch报错如下: 解决方法: step1: 如果你之前没有安装 GTSAM,可以尝试安装它 step2: 检查是否缺少依赖库 ldd /home/zz/1210/devel/lib/liorf_localization/liorf_localization_imuPr…

2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)

首先到官网上下载安装包:http://www.mysql.com 点击下载,拉到最下面,点击社区版下载 windows用户点击下面适用于windows的安装程序 点击下载,网络条件好可以点第一个,怕下着下着断了点第二个离线下载 双击下载好的安装…

【Python/Pytorch】-- 创建3090Ti显卡所需环境

文章目录 文章目录 01 服务器上,存在三个anaconda,如何选择合适的,创建python环境?02 conda、anaconda、cuda、cudnn区别03 用到一些指令04 如何指定cuda的版本?05 conda跟pip的区别?06 pycharm控制台07 服…

如何在无图形化界面的服务器上下载百度网盘的超大文件(10GB以上)?

目录 登录百度网盘账号 进入特定的文件夹 下载 完整教程 登录百度网盘账号 第一次登录的时候会展示: Please visit: https://openapi.baidu.com/oauth/2.0/authorize?client_idxxx And authorize this app Paste the Authorization Code here within 10 minut…

Linux磁盘情况查询

一、查询系统整体磁盘使用情况 1、基本语法 df -h 2、示例 二、查询指定目录的磁盘占用情况 1、基本语法 du -h 查询指定目录的磁盘占用情况,默认为当前目录 2、常用选项 选项 说明 -h 以人类可读的格式显示磁盘使用情况(例如,KB、…

【3D格式转换SDK】HOOPS Exchange技术概览(二):3D数据处理高级功能

​ 在当今数字化工程领域,HOOPS Exchange作为一款强大的SDK,为3D工程应用程序的开发提供了关键支持。本文将深入剖析其基本组件、特定功能以及数据结构,带您全面了解这一驱动3D数据处理的核心工具。 一、概述 HOOPS Exchange专注于访问和重…

利用Adobe Acrobat 实现PPT中图片分辨率的提升

1. 下载适用于 Windows 的 64 位 Acrobat 注册方式参考:https://ca.whu.edu.cn/knowledge.html?type1 2. 将ppt中需要提高分辨率的图片复制粘贴到新建的pptx问价中,然后执行“文件—>导出---->创建PDF、XPS文档” 3. 我们会发现保存下来的distrib…

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…

解决局域网访问Dify却仅显示nginx页面的问题

为什么dify在本机可以正常访问,局域网通过ip访问却只看到欢迎使用nginx的提示,如果访问服务器ip/apps则直接提示404 Not Found。这是怎么回事该如何解决呢?文章中将一步步解决这些问题。 前言 之前在服务器部署了dify,也在服务器…

从小米汽车召回看智驾“命门”:智能化时代 — 时间就是安全

2025年1月,小米因车辆“授时同步异常”召回3万余辆小米SU7,成为其造车历程中的首个重大安全事件。 从小米SU7召回事件剖析,授时同步何以成为智能驾驶的命门? 2024年11月,多名车主反馈SU7标准版的智能泊车辅助功能出现…

OpenAI 最后一代非推理模型:OpenAI 发布 GPT-4.5预览版

最后一代非推理大模型 在人工智能领域,OpenAI 一直以其创新的技术和卓越的产品引领着行业的发展。近期,OpenAI 正式发布了 GPT-4.5 研究预览版。不仅如此,官方还宣称 GPT-4.5 被定位为 “最后一代非推理模型”,这一消息再次引起了…

ioday2----->标准io函数

思维导图: 练习: 1将当前的时间写入到time. txt的文件中,如果ctrlc退出之后,在再次执行支持断点续写 1.2022-04-26 19:10:20 2.2022-04-26 19:10:21 3.2022-04-26 19:10:22 //按下ctrlc停止,再次执行程序 4.2022…

C++第六节:stack和queue

本节目标: stack的介绍与使用queue的介绍与使用priority_queue的介绍与使用容器适配器模拟实现与结语 1 stack(堆)的介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,只能从容器的一端进行元素的插…

华宇“ITSS咨询服务标准助力政务服务区块链解决方案设计”案例成功入选ITSS典型应用案例库

近日,华宇“ITSS咨询服务标准助力政务服务区块链解决方案设计”案例经专家评审后成功入选由全国信息技术标准化技术委员会信息技术服务分技术委员会和中国电子工业标准化技术协会信息技术服务分会(以下简称“ITSS分会”)联合组织建立的“信息…

从0到1构建AI深度学习视频分析系统--基于YOLO 目标检测的动作序列检查系统:(0)系统设计与工具链说明

文章大纲 系统简介Version 1Version2环境摄像机数据流websocket 发送图像帧RTSP 视频流树莓派windows消息队列参考文献项目地址提示词系统简介 Version 1 Version2 环境 # 配置 conda 源 # 配置conda安装源 conda config --add channels https://mirrors.tuna.tsinghua.edu.c…