当前位置: 首页 > article >正文

Keepalived 在不同场景下的高可用方案设计与最佳实践

一、Keepalived 典型应用场景深度解析

1. Web 服务器集群:统一入口与故障容错
1.1 场景需求
  • 核心目标:为多台 Web 服务器提供统一 VIP 入口,隐藏后端节点细节,实现故障透明切换。

  • 挑战

    • 确保用户请求在主节点故障时自动转发到备份节点。

    • 避免会话丢失(如用户登录状态),需结合会话共享(如 Redis)或粘性会话(Sticky Session)。

1.2 架构设计
  • 组件说明

    • Keepalived 节点:2 台服务器(MASTER/BACKUP)共享 VIP 192.168.1.254

    • Web 服务器:Nginx 或 Tomcat 集群,部署相同应用程序,共享静态资源(如 NFS)或使用对象存储(如 S3)。

1.3 配置要点
vrrp_instance WEB_VIP {state MASTERinterface eth0virtual_router_id 50priority 100virtual_ipaddress {192.168.1.254/24 dev eth0}track_script {check_web_service  # 检测 Web 服务端口(80/443)}
}track_script {check_web_service {script "/etc/keepalived/check_nginx.sh"  # 检测 Nginx 进程interval 2weight -20}
}
1.4 优化方案
  • 粘性会话实现:在 Nginx 中配置 ip_hash 策略,确保同一客户端 IP 的请求始终路由到同一后端服务器:
upstream web_backend {ip_hash;server 192.168.1.101:80;server 192.168.1.102:80;
}
  • 静态资源优化:使用 CDN 缓存静态文件(如图片、CSS),减少后端服务器压力,提升故障切换时的响应速度。
2. 数据库集群:主从复制与故障切换
2.1 场景需求
  • 核心目标:在 MySQL/PostgreSQL 主从集群中,通过 Keepalived 实现主库故障时的自动切换,确保业务连续性。

  • 挑战

    • 避免脑裂(Split-Brain)导致数据不一致。

    • 确保切换后从库已完成数据同步,避免数据丢失。

2.2 架构设计(以 PostgreSQL 为例)
  • 组件说明

    • 主库(MASTER):提供读写服务,VIP 绑定在主库节点。

    • 从库(BACKUP):实时复制主库数据,主库故障时提升为新主库。

    • repmgr:配合 Keepalived 实现主从切换逻辑(如流复制状态检测)。

2.3 配置要点
vrrp_instance DB_VIP {state MASTERinterface eth0virtual_router_id 51priority 100virtual_ipaddress {192.168.1.254/24 dev eth0}track_script {check_postgres_master  # 检测主库复制状态}
}track_script {check_postgres_master {script "/etc/keepalived/check_pg_master.sh"interval 2weight -50  # 优先级大幅降低,确保快速切换}
}

检测脚本示例(判断主库是否允许写入):

#!/bin/bash
# /etc/keepalived/check_pg_master.sh
is_master=$(sudo -u postgres psql -tAc "SELECT pg_is_in_recovery();")
if [ "$is_master" = "f" ]; thenexit 0  # 是主库,状态正常
elseexit 1  # 非主库,触发故障转移
fi
2.4 最佳实践
  • 切换流程优化
  1. Keepalived 检测到主库故障,降低优先级并触发选举。

  2. 备份节点接管 VIP,通过 repmgr 提升为新主库。

  3. 原主库恢复后,作为从库重新加入集群(非抢占模式)。

  • 数据一致性保障:使用 synchronous_commit 确保主从数据强一致(适用于金融场景):
# postgresql.conf
synchronous_commit = on
synchronous_standby_names = '*'
3. 负载均衡器高可用:保障流量入口稳定
3.1 场景需求
  • 核心目标:为 HAProxy、Nginx 等负载均衡器节点提供高可用性,避免单点故障导致的流量中断。

  • 挑战

    • 确保负载均衡配置在节点间同步(如 HAProxy 的 config sync)。

    • 快速检测负载均衡器进程故障(如进程崩溃或配置错误)。

3.2 架构设计(以 HAProxy 为例)
  • 组件说明

    • 负载均衡节点:2 台服务器运行 HAProxy,共享 VIP 192.168.1.254

    • 后端服务器:应用服务器集群,由 HAProxy 进行流量分发。

3.3 配置要点
vrrp_instance LB_VIP {state MASTERinterface eth0virtual_router_id 52priority 100virtual_ipaddress {192.168.1.254/24 dev eth0}track_script {check_haproxy_process  # 检测 HAProxy 进程存活}
}track_script {check_haproxy_process {script "/etc/keepalived/check_haproxy.sh"interval 1weight -30}
}

检测脚本示例(确保 HAProxy 主进程存在):

#!/bin/bash
# /etc/keepalived/check_haproxy.sh
if ! pgrep -f "haproxy -f /etc/haproxy/haproxy.cfg" >/dev/null; then# 尝试重启 HAProxysystemctl restart haproxysleep 2if ! pgrep -f "haproxy -f /etc/haproxy/haproxy.cfg" >/dev/null; thenexit 1  # 重启失败,触发故障转移fi
fi
exit 0
3.4 高级特性应用
  • 配置同步:使用 rsyncgit 实时同步负载均衡配置文件:
# 主节点配置变更后自动同步到备份节点
rsync -avz /etc/haproxy/haproxy.cfg backup_node:/etc/haproxy/
  • 动态后端管理:通过 HAProxy 的 stats socket 接口动态添加 / 删除后端服务器,配合 Keepalived 健康检查实现自动扩缩容。

二、跨场景通用最佳实践

1. 多数据中心容灾
  • 场景:主数据中心与灾备中心通过专线连接,Keepalived 组跨中心部署。

  • 配置要点

    • 主中心节点优先级 100,灾备中心节点优先级 90

    • 启用 nopreempt 模式,避免主中心网络波动导致频繁切换。

2. 云原生场景适配
  • 容器化部署:使用 keepalived-vip 插件在 Kubernetes 中实现 VIP 动态分配,配合 StatefulSet 管理有状态节点。

  • 公有云负载均衡:在 AWS/GCP 中,Keepalived 与弹性 IP(EIP)结合,实现虚拟机实例的高可用。

3. 性能与成本平衡
  • 低成本方案:在测试环境或中小规模集群中,可将 Keepalived 与业务进程部署在同一节点,减少硬件成本。

  • 性能监控:通过 Prometheus 采集 Keepalived 指标(如切换次数、延迟),设置告警阈值(如切换时间超过 5 秒)。

三、总结:选择 Keepalived 的核心场景

Keepalived 通过轻量级配置实现网络层高可用,尤其适合以下场景:

  1. 需要统一入口的无状态服务:如 Web 服务器、API 网关,通过 VIP 提供稳定访问地址。

  2. 主从架构的有状态服务:如数据库、缓存集群,结合复制机制实现故障切换。

  3. 基础设施组件冗余:如负载均衡器、DNS 服务器,保障流量路由稳定。

与云原生方案(如 Kubernetes 服务)相比,Keepalived 在传统数据中心和混合云场景中仍具有部署简单、兼容性强的优势。通过合理设计配置与检测逻辑,可在不同场景下发挥其高可用性价值。

相关文章:

Keepalived 在不同场景下的高可用方案设计与最佳实践

一、Keepalived 典型应用场景深度解析 1. Web 服务器集群:统一入口与故障容错 1.1 场景需求 核心目标:为多台 Web 服务器提供统一 VIP 入口,隐藏后端节点细节,实现故障透明切换。 挑战: 确保用户请求在主节点故障时…...

注册并创建一个微信小程序

目录 (一)前往微信公众平台,并注册一个微信小程序账号 (二)配置微信小程序 (三)创建微信小程序项目 1.流程 1.1获取小程序ID 1.2下载微信开发者工具 1.3安装微信开发者工具 2.创建项目…...

CentOS 10:启动telnet服务

参考, 鳥哥私房菜 - 第七章、網路安全與主機基本防護:限制埠口, 網路升級與 SELinux 7.3.3 埠口与服务的启动/关闭及开机时状态设定 我们知道系统的 Telnet 服务通常是以 super daemon 来控管的,请您启动您系统的 telnet 试看看。 1 要启动 …...

计算机网络——每一层的用到的设备及其作用

计算机网络基础 OSI参考模型TCP/IP协议族集线器(Hub)交换机(Switch)路由器(Router)功能特点无线路由器(家庭宽带)光猫功能 网关(Gateway)功能应用场景特点 IP…...

OpenLayers 加载鹰眼控件

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图控件是一些用来与地图进行简单交互的工具,地图库预先封装好,可以供开发者直接使用。OpenLayers具有大部分常用的控件&#x…...

Eigen与OpenCV矩阵操作全面对比:最大值、最小值、平均值

功能对比总表 功能Eigen 方法OpenCV 方法主要区别最大值mat.maxCoeff(&row, &col)cv::minMaxLoc(mat, NULL, &maxVal, NULL, &maxLoc)Eigen需要分开调用,OpenCV一次获取最小值mat.minCoeff(&row, &col)cv::minMaxLoc(mat, &minVal, NU…...

安全基础与协议分析

5.1 Web安全基础 5.1.1 Web安全基础概览(一、二) Web安全的核心目标是保护Web应用及其数据免受攻击,涵盖以下关键领域: 攻击面: 前端漏洞(XSS、CSRF)。 后端漏洞(SQL注入、RCE&a…...

【Web前端】JavaScript入门与基础(一)

JavaScript简介 JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”,指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序的“脚本”。 JavaScript 是一种嵌入式(embedded)语言。它本身提供的核心语法不算…...

第一课:医学影像研究的科学思维与问题提出

课程目标: 理解科学思维在医学影像研究中的核心地位。掌握从临床实践、文献回顾及技术进展中发现医学影像研究问题的方法。学习如何凝练、评估并清晰表述一个具有研究价值的医学影像科学问题。熟悉医学影像研究问题提出的伦理考量。课程大纲与核心内容: 引言 医学影像研究的…...

前端大文件上传性能优化实战:分片上传分析与实战

前端文件分片是大文件上传场景中的重要优化手段,其必要性和优势主要体现在以下几个方面: 一、必要性分析 1. 突破浏览器/服务器限制 浏览器限制:部分浏览器对单次上传文件大小有限制(如早期IE限制4GB) 服务器限制&a…...

数据的获取与读取篇---常见的数据格式JSON

文件格式 假如你有一份想分析的数据文件,获得文件后下一步就是用代码读取它。不同的文件格式有不同的读取方法。所以读取前了解文件格式也很重要。你可能见过非常多的文件格式,例如TXT、MP3、PDF、JPEG等等。 一般可以通过文件的后缀来分辨文件的格式,例如TXT格式,一般保存…...

【python代码】一些小实验

目录 1. 测试Resnet50 ONNX模型的推理速度 1. 测试Resnet50 ONNX模型的推理速度 ############################### # 导出resnet50 模型 # 测试onnx模型推理 cpu 和 GPU 的对比 ###############################import time import numpy as np import onnxruntime as ort im…...

Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)

前言: 最近做横向需要使用实验室服务器跑模型,之前用师兄的账号登录服务器跑yolo,3张3090一轮14秒,我本地一张4080laptop要40秒,效率还是快很多,(这么算一张4080桌面版居然算力能比肩3090&#…...

Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置

目录 应用实例 根组件 挂载应用 容器元素自己将不会被视为应用的一部分 那为什么还要在被挂载标签里面写东西呢? .mount( ) 方法应该始终在整个应用配置和资源注册完成后被调用 什么是资源注册? 什么是应用实例? 什么是根实例&#…...

超低延迟音视频直播技术的未来发展与创新

引言 音视频直播技术正在深刻改变着我们的生活和工作方式,尤其是在教育、医疗、安防、娱乐等行业。无论是全球性的体育赛事、远程医疗、在线教育,还是智慧安防、智能家居等应用场景,都离不开音视频技术的支持。为了应对越来越高的需求&#x…...

虚拟文件(VFS)

核心知识点:虚拟文件系统(VFS) 1. 通俗易懂的解释 想象一下你家里的冰箱。你把食物放进去,不用管它是放在塑料盒里、玻璃罐里还是直接用保鲜膜包着,你只需要知道它在冰箱的哪个位置(比如“蔬菜抽屉里”&a…...

Java 内存模型(JMM)深度解析:理解多线程内存可见性问题

Java 内存模型(JMM)深度解析:理解多线程内存可见性问题 在 Java 编程中,多线程的运用能够显著提升程序的执行效率,但与此同时,多线程环境下的一些问题也逐渐凸显。其中,内存可见性问题是一个关…...

转移dp简单数学数论

1.转移dp问题 昨天的练习赛上有一个很好玩的起终点问题,第一时间给出bfs的写法。 但是写到后面发现不行,还得是的dp转移的写法才能完美的解决这道题目。 每个格子可以经过可以不经过,因此它的状态空间是2^(n*m)&…...

【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理

【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理 📌 题目重现 🌟🌟 面试官:请解释Transformer自注意力机制中Query、Key、Value矩阵的核心作用,并分析为何在计算注意力分数时…...

Ubuntu24.04 LTS安装java8、mysql8.0

在 Ubuntu 24.04 上安装 OpenJDK OpenJDK 包在 Ubuntu 24.04 的默认存储库中随时可用。 打开终端并运行以下 apt 命令: sudo apt update查看是否已经安装java java --version如果未安装会有提示,直接复制命令安装即可,默认版本: sudo apt in…...

动静态库--

目录 一 静态库 1. 创建静态库 2. 使用静态库 2.1 第一种 2.2 第二种 二 动态库 1. 创建动态库 2. 使用动态库 三 静态库 VS 动态库 四 动态库加载 1. 可执行文件加载 2. 动态库加载 一 静态库 Linux静态库:.a结尾 Windows静态库:.lib结尾…...

【检索增强生成(RAG)全解析】从理论到工业级实践

目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心架构图解💡 核心工作流程🔧 关键技术模块⚖️ 技术选型对…...

git clone时出现无法访问的问题

git clone时出现无法访问的问题 问题: 由于我的git之前设置了代理,然后在这次克隆时又没有打开代理 解决方案: 1、如果不需要代理,直接取消 Git 的代理设置: git config --global --unset http.proxy git config --gl…...

Lesson 22 A glass envelope

Lesson 22 A glass envelope 词汇 dream v. 做梦,梦想 n. 梦 用法:1. have a dream 做梦    2. have a good / sweet dream 做个好梦 [口语晚安]    3. dream about 人/物 梦到……    4. dream that 句子 梦到…… 例句:他昨晚…...

文件系统·linux

目录 磁盘简介 Ext文件系统 块 分区 分组 inode 再谈inode 路径解析 路径缓存 再再看inode 挂载 小知识 磁盘简介 磁盘:一个机械设备,用于储存数据。 未被打开的文件都是存在磁盘上的,被打开的加载到内存中。 扇区:是…...

【Matlab】雷达图/蛛网图

文章目录 一、简介二、安装三、示例四、所有参数说明 一、简介 雷达图(Radar Chart)又称蛛网图(Spider Chart)是一种常见的多维数据可视化手段,能够直观地对比多个指标并揭示其整体分布特征。 雷达图以中心点为原点&…...

【信息系统项目管理师】第24章:法律法规与标准规范 - 27个经典题目及详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

使用JProfiler进行Java应用性能分析

文章目录 一、基本概念 二、Windows系统中JProfiler的安装 1、下载exe文件 2、安装JProfiler 三、JProfiler的破解 四、IDEA中配置JProfiler 1、安装JProfiler插件 2、关联本地磁盘中JProfiler软件的执行文件 3、IDEA中启动JProfiler 五、监控本地主机中的Java应用 …...

遥感解译项目Land-Cover-Semantic-Segmentation-PyTorch之一推理模型

文章目录 效果项目下载项目安装安装步骤1、安装环境2、新建虚拟环境和安装依赖测试模型效果效果 项目下载 项目地址 https://github.com/souvikmajumder26/Land-Cover-Semantic-Segmentation-PyTorch 可以直接通过git下载 git clone https://github.com/souvikmajumder26/Lan…...

最大似然估计(Maximum Likelihood Estimation, MLE)详解

一、定义 最大似然估计 是一种参数估计方法,其核心思想是: 选择能使观测数据出现概率最大的参数值作为估计值。 具体来说,假设数据 D x 1 , x 2 , … , x n D{x_1,x_2,…,x_n} Dx1​,x2​,…,xn​独立且服从某个概率分布 P ( x ∣ θ ) P(…...