【分布式技术】KeepAlived高可用架构科普
KeepAlived高可用架构
- Keepalived 架构详解
- 一、核心架构组件
- 二、VRRP 协议详解
- 1. **VRRP 核心概念**
- 2. **VRRP 工作流程**
- 3. **VRRP 通信机制**
- 三、高可用架构模型
- 四、健康检查机制
- 五、配置文件详解
- 配置文件关键参数说明:
- 六、高可用实现流程
- 七、脑裂问题与解决方案
- 1. **脑裂的常见原因**
- 2. **脑裂的解决方案**
- 八、应用场景与最佳实践
- 九、总结
Keepalived 架构详解
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol) 的高可用性(High Availability, HA)解决方案,主要用于保障服务的持续性和可靠性。它的核心目标是通过自动故障转移(Failover)和健康检查机制,确保在服务器或服务出现故障时,能够无缝切换到备用节点,从而实现服务的不间断运行。
一、核心架构组件
Keepalived 的架构主要由以下三个核心模块组成:
-
Core 模块
- 功能:负责 Keepalived 的主进程启动、全局配置文件的加载与解析,以及基础服务的初始化。
- 作用:作为整个系统的控制中枢,管理其他模块的运行状态和生命周期。
-
Check 模块
- 功能:提供健康检查(Health Check)功能,支持对本地服务(如 Nginx、HAProxy)或远程服务(如 TCP/HTTP 端口)的监控。
- 作用:通过周期性检查服务的可用性,判断节点是否正常运行,并触发故障转移或通知机制。
-
VRRP 模块
- 功能:实现 VRRP 协议的核心逻辑,包括虚拟 IP(VIP)的分配、主备节点的选举、心跳检测等。
- 作用:通过 VRRP 协议动态管理主备节点的状态,确保虚拟 IP 的高可用性。
二、VRRP 协议详解
VRRP(Virtual Router Redundancy Protocol)是 Keepalived 实现高可用性的关键技术,其核心思想是通过多台设备共享一个虚拟 IP 地址,形成一个虚拟路由器组(Virtual Router Group),从而实现冗余和故障转移。
1. VRRP 核心概念
- 虚拟路由器(Virtual Router):由一组物理路由器(或服务器)组成,共享同一个虚拟 IP 和 MAC 地址。
- 虚拟 IP(VIP):对外提供服务的 IP 地址,客户端通过 VIP 访问服务。
- Master(主节点):当前负责处理流量的节点,定期发送 VRRP 广告报文(Advertisement)。
- Backup(备份节点):待命节点,监听 Master 的广告报文,若超时未收到则接管 VIP。
- Priority(优先级):节点的优先级(0-255),决定选举时的主备顺序。优先级越高,越容易成为 Master。
- Advert Int(广告间隔):Master 发送广告报文的时间间隔(默认 1 秒)。
- Preempt(抢占模式):若启用,Backup 在优先级高于当前 Master 时可强制接管;否则需等待 Master 失效。
2. VRRP 工作流程
- 初始化阶段:所有节点广播自己的优先级,选举出初始的 Master。
- 正常运行阶段:Master 定期发送广告报文(默认 1 秒),Backup 监听这些报文。
- 故障检测阶段:Backup 连续 3 次未收到 Master 的广告报文,判定 Master 失效。
- 故障转移阶段:Backup 通过优先级选举新的 Master,并绑定 VIP。
- 恢复阶段:原 Master 恢复后,根据抢占模式决定是否重新成为 Master。
3. VRRP 通信机制
- 组播地址:VRRP 使用组播地址
224.0.0.18
(IPv4)或FF02::12
(IPv6)发送广告报文。 - 协议号:VRRP 的 IP 协议号为 112。
- 认证方式:
- 无认证:不加密,仅用于测试环境。
- 简单密码认证(PASS):通过明文密码验证报文合法性。
- IPSEC 认证(AH):通过 IPSEC 技术加密通信。
三、高可用架构模型
Keepalived 支持两种典型的高可用架构模型:
-
主备模式(Active-Passive)
- 特点:一个 Master 节点负责处理流量,Backup 节点处于待命状态。
- 适用场景:适用于对资源利用率要求较低的场景,如数据库主从复制。
- 优点:配置简单,故障转移快速。
- 缺点:Backup 节点资源闲置,资源利用率低。
-
双主模式(Active-Active)
- 特点:多个 Master 节点同时处理流量,彼此互为备份。
- 适用场景:适用于负载均衡场景(如 Nginx + Keepalived)。
- 优点:资源利用率高,可承载更高并发流量。
- 缺点:配置复杂,需额外处理资源冲突问题(如脑裂)。
四、健康检查机制
Keepalived 的健康检查模块(Check 模块)通过以下方式确保服务的可用性:
-
本地服务检查
- 脚本检查:通过自定义脚本(如
check_nginx.sh
)检查本地服务的运行状态。 - 进程检查:检查关键进程(如 Nginx、HAProxy)是否存活。
- 脚本检查:通过自定义脚本(如
-
远程服务检查
- TCP 检查:通过 TCP 连接检测目标端口是否开放。
- HTTP 检查:发送 HTTP 请求并验证响应码(如 200 OK)。
- SMTP 检查:检查邮件服务器的可用性。
-
权重调整
- Weight(权重):根据检查结果动态调整节点的优先级。例如,检查失败时降低节点的优先级,避免其被选为 Master。
五、配置文件详解
Keepalived 的配置文件(/etc/keepalived/keepalived.conf
)通常包含以下部分:
global_defs {notification_email {admin@example.com}notification_email_from keepalived@example.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_MASTER # 本节点的唯一标识
}vrrp_instance VI_1 {state MASTER # 初始角色:MASTER 或 BACKUPinterface eth0 # 监听的网络接口virtual_router_id 51 # 虚拟路由器 ID(0-255)priority 100 # 优先级(100 > 90)advert_int 1 # 广告间隔(秒)authentication {auth_type PASS # 认证类型auth_pass 1234 # 认证密码}virtual_ipaddress {192.168.1.100/24 # 虚拟 IP 地址}track_script {chk_nginx # 引用健康检查脚本}
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh" # 健康检查脚本路径interval 2 # 检查间隔(秒)weight -20 # 检查失败时优先级降低的值fall 2 # 连续失败 2 次判定故障rise 1 # 连续成功 1 次判定恢复
}
配置文件关键参数说明:
- state:初始角色(MASTER/BACKUP)。
- virtual_router_id:虚拟路由器的唯一标识符,主备节点需相同。
- priority:节点优先级,数值越大越容易成为 Master。
- advert_int:广告报文发送间隔,单位为秒。
- virtual_ipaddress:虚拟 IP 地址,客户端通过此 IP 访问服务。
- track_script:引用健康检查脚本,用于动态调整节点状态。
六、高可用实现流程
-
初始化阶段
- 所有节点启动 Keepalived,广播自己的优先级。
- 根据优先级选举出初始的 Master。
-
正常运行阶段
- Master 定期发送 VRRP 广告报文(默认 1 秒)。
- Backup 监听广告报文,确认 Master 的状态。
-
故障检测阶段
- Backup 连续 3 次未收到广告报文,判定 Master 失效。
- Backup 通过优先级选举新的 Master,并绑定 VIP。
-
故障恢复阶段
- 原 Master 恢复后,根据抢占模式(Preempt)决定是否重新成为 Master。
- 如果启用抢占模式,高优先级节点会重新接管 VIP。
七、脑裂问题与解决方案
脑裂(Split-Brain) 是 Keepalived 高可用架构中最严重的故障之一,指主备节点因网络分区或配置错误同时认为对方失效,导致两个节点都尝试接管 VIP,造成服务冲突。
1. 脑裂的常见原因
- 网络分区:主备节点之间的网络中断,导致通信失败。
- 优先级配置错误:多个节点优先级相同,无法正确选举 Master。
- 系统资源不足:节点因资源耗尽无法处理 VRRP 报文。
2. 脑裂的解决方案
- 网络冗余:通过多网卡、多路由等方式提高网络可靠性。
- 仲裁机制:引入第三方仲裁节点(如共享存储或数据库)判断主备状态。
- 合理配置优先级:确保每个节点的优先级唯一,避免平票。
- 设置抢占模式:根据业务需求选择是否启用抢占模式。
八、应用场景与最佳实践
-
Web 服务高可用
- 配合 Nginx 或 HAProxy 实现负载均衡和故障转移。
- 示例配置:两台 Nginx 服务器 + Keepalived 实现双主模式。
-
数据库高可用
- 与 MySQL 主从复制结合,通过 Keepalived 实现主从切换。
- 注意:需确保数据同步机制完善,避免脑裂导致数据不一致。
-
云原生环境集成
- 在 Kubernetes 中通过 Keepalived 实现 Ingress 控制器的高可用。
- 示例:使用 MetalLB + Keepalived 提供稳定的外部 IP。
-
性能监控与调优
- 定期检查 VRRP 广告报文的频率和延迟。
- 优化健康检查脚本的执行效率,避免误判。
九、总结
Keepalived 通过 VRRP 协议和健康检查机制,实现了高效的高可用架构。其核心优势在于:
- 简单易用:通过配置文件即可完成主备切换。
- 灵活扩展:支持多种健康检查方式和负载均衡策略。
- 稳定性高:通过抢占模式和优先级机制确保服务连续性。
然而,使用 Keepalived 时需注意:
- 网络可靠性:避免因网络问题导致脑裂。
- 合理配置优先级:确保主备节点的优先级唯一。
- 健康检查准确性:避免因误判导致不必要的故障转移。
通过合理的设计和配置,Keepalived 能够为关键业务系统提供可靠的高可用保障。
相关文章:
【分布式技术】KeepAlived高可用架构科普
KeepAlived高可用架构 Keepalived 架构详解一、核心架构组件二、VRRP 协议详解1. **VRRP 核心概念**2. **VRRP 工作流程**3. **VRRP 通信机制** 三、高可用架构模型四、健康检查机制五、配置文件详解配置文件关键参数说明: 六、高可用实现流程七、脑裂问题与解决方案…...

如何配置mvn镜像源为华为云
如何配置mvn镜像源为华为云 # 查找mvn 配置文件 mvn -X help:effective-settings | grep settings.xml# 配置mvn镜像源为华为云,/home/apache-maven-3.9.5/conf/settings.xml文件路径需要根据上一步中查询结果调整 cat > /home/apache-maven-3.9.5/conf/setting…...
Linux平台排查CPU占用高的进程和线程指南
基础排查工具 1. top命令 - 实时进程监控 top操作指令: 按 P:按CPU使用率排序按 1:显示每个CPU核心的使用情况按 H:切换显示线程视图按 M:按内存使用排序按 q:退出 2. htop命令 - 增强版top(…...

多模态大语言模型arxiv论文略读(105)
UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文标题:UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文作者:Zhaowei…...
简述MySQL 超大分页怎么处理 ?
针对MySQL超大分页(深度分页)的性能问题,核心优化方案如下: 1. 子查询 覆盖索引(延迟关联) 原理: 子查询仅扫描覆盖索引(如主键),避免回表操作…...

Pyhton中的命名空间包(Namespace Package)您了解吗?
在 Python 中,命名空间包(Namespace Package) 是一种特殊的包结构,它允许将模块分散在多个独立的目录中,但这些目录在逻辑上属于同一个包命名空间。命名空间包的核心特点是:没有 __init__.py 文件ÿ…...
Java设计模式之备忘录模式详解
Java设计模式之备忘录模式详解 一、备忘录模式核心思想 核心目标:捕获对象内部状态并在需要时恢复,同时不破坏对象的封装性。如同游戏存档系统,允许玩家保存当前进度并在需要时回退到之前的状态。 二、备忘录模式类图(Mermaid&am…...

Azure DevOps Server 2022.2 补丁(Patch 5)
微软Azure DevOps Server的产品组在4月8日发布了2022.2 的第5个补丁。下载路径为:https://aka.ms/devops2022.2patch5 这个补丁的主要功能是修改了代理(Agent)二进制安装文件的下载路径;之前,微软使用这个CND(域名为vstsagentpackage.azuree…...

手摸手还原vue3中reactive的get陷阱以及receiver的作用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、实例是什么?二、new Prxoy三、实现代码1.引入代码2.读入数据 总结 前言 receiver不是为解决get陷阱而生,而是为解决Proxy中的this绑…...
小明的Java面试奇遇之互联网保险系统架构与性能优化
一、文章标题 小明的Java面试奇遇之互联网保险系统架构与性能优化🚀 二、文章标签 Java,Spring Boot,MyBatis,Redis,Kafka,JVM,多线程,互联网保险,系统架构,性能优化 三、文章概述 本文模拟了程序员小明在应聘互联网保险系统开发岗位时,参与的一场深…...

C++学习-入门到精通【13】标准库的容器和迭代器
C学习-入门到精通【13】标准库的容器和迭代器 目录 C学习-入门到精通【13】标准库的容器和迭代器一、标准模板库简介1.容器简介2.STL容器总览3.近容器4.STL容器的通用函数5.首类容器的通用typedef6.对容器元素的要求 二、迭代器简介1.使用istream_iterator输入,使用…...

C# 面向对象特性
面向对象编程的三大基本特性是:封装、继承和多态。下面将详细介绍这三大特性在C#中的体现方式。 封装 定义:把对象的数据和操作代码组合在同一个结构中,这就是对象的封装性。 体现方式: 使用访问修饰符控制成员的可见性 通过属…...

ElasticStack技术之logstash介绍
一、什么是Logstash Logstash 是 Elastic Stack(ELK Stack)中的一个开源数据处理管道工具,主要用于收集、解析、过滤和传输数据。它支持多种输入源,如文件、网络、数据库等,能够灵活地对数据进行处理,比如…...
前端与后端
实例一 处理登录页面请求 # 处理登录页面请求 app.route(/c, methods[GET, POST]) # /c是网页地址 def login(): usernameaa passwordbb print(username,password) if request.method POST: username request.form.get(yhm) password requ…...

CI/CD 持续集成、持续交付、持续部署
CI/CD 是 持续集成(Continuous Integration) 和 持续交付/持续部署(Continuous Delivery/Deployment) 的缩写,代表现代软件开发中通过自动化流程快速、可靠地构建、测试和发布代码的实践。其核心目标是 减少人工干预、…...
代码随想录60期day54
岛屿dfs #include<iostream> #include<vector> using namespace std;int dir[4][2] {0,1,1,0,-1,0,0,-1};void dfs(const vector<vector<int>>&grid,vector<vecotr<bool>>&visited,int x,int y){for(int i 0 ; i < 4; i){in…...

关于easyx头文件
一、窗口创建 (1)几种创建方式 #include<easyx.h>//easyx的头文件 #include<iostream> using namespace std;int main() {//创建一个500*500的窗口//参数为:长度,宽度,是否显示黑框(无参为不…...
Java 中执行命令并使用指定配置文件的最佳实践
在Java开发中,有时需要从Java应用程序中执行系统命令,并使用指定的配置文件来控制这些命令的行为。本文将详细介绍在Java中执行命令并使用指定配置文件的最佳实践,包括如何设置环境变量、重定向输入输出以及处理可能出现的异常。 一、基本实…...

django入门-orm数据库操作
一:下载数据库依赖项mysqlclient pip install mysqlclient 二:django配置文件配置数据库链接 路径:mysite2\mysite2\settings.py DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: data, # 数据库名称USER: root, …...
食品电商突围战!品融电商全平台代运营,助您抢占天猫京东抖音红利!
食品电商突围战!品融电商全平台代运营,助您抢占天猫京东抖音红利! 一、食品电商的黄金时代:机遇与挑战并存 随着消费升级和线上渗透率的持续攀升,食品行业正迎来前所未有的发展机遇。2023年ÿ…...
Termux下如何使用MATLAB
实际上,termux 目前无法运行MATLAB,但是可以运行MATLAB的平替octave ,可以完全在终端环境运行,方便运算和查看模型拟合结果等,完全兼容MATLAB命令。 食用方法: //pkg install wget wget https://its-poin…...

STM32外部中断(EXTI)以及旋转编码器的简介
一、外部中断机制概述 中断是指当主程序执行期间出现特定触发条件(即中断源)时,CPU将暂停当前任务,转而执行相应的中断服务程序(ISR),待处理完成后恢复原程序的运行流程。该机制通过事件驱动…...

双擎驱动:华为云数字人与DeepSeek大模型的智能交互升级方案
一、技术融合概述 华为云数字人 华为云数字人,全称:数字内容生产线 MetaStudio。数字内容生产线,提供数字人视频制作、视频直播、智能交互、企业代言等多种服务能力,使能千行百业降本增效。另外,数字内容生产线&#…...
Unity Version Control UVC报错:Not connected. Trying to re-connect…
问题背景 今天备份项目的时候遇到了这个问题,起因是Unity停用了原始的Plastic SCM的项目管理功能,我使用新的Unity Version Control系统时遇到了无法新建workspace的问题,即使新建之后进入Unity也无法连接到仓库,点击重试也无反应…...
场景题-1
场景题-1 订单到期关闭 1、DelayQueue 无界阻塞队列,用于放置实现了Delayed接口的对象,基于PriorityQueue实现,可用于实现在指定的延迟时间之后处理元素。订单创建后放入队列中,然后使用一个常驻任务不停地执行扫描取出超时订单…...
Java复习Day26
Lambda表达式简介 Lambda表达式是Java 8的重要特性,允许使用简洁的表达式代替功能接口。它类似于方法,包含参数列表和执行主体(可以是表达式或代码块)。Lambda可以视为匿名内部类的语法糖,也被称为闭包。 优点 代码…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.5 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第5章析因设计引导5.7节思考题5.5 R语言解题。主要涉及方差分析,正态假设检验,残差分析,交互作用图。 dataframe <-data.frame( wrapc(17,20,12,9,…...
阿里云百炼全解析:一站式大模型开发平台的架构与行业实践
目录 大模型开发范式的革新平台核心架构与技术解析全生命周期开发工作流企业级安全与合规体系行业应用场景与最佳实践未来演进与技术展望1. 大模型开发范式的革新 1.1 从碎片化到平台化的演进 传统大模型开发面临三大核心挑战:算力管理复杂、工具链割裂、安全合规风险高。阿…...

字节新出的MCP应用DeepSearch,有点意思。
大家好,我是苍何。 悄悄告诉你个事,昨天我去杭州参加字节火山方舟举办的开发者见面会了,你别说,还真有点刘姥姥进大观园的感觉🐶 现场真实体验完这次新发布的产品和模型,激动的忍不住想给大家做一波分享。…...
Agentic Voice Stack 热门项目
以下是当前在 Agentic Voice Stack 工作流领域较为热门的开源项目,涵盖语音交互、多模态控制、工作流编排等核心能力,综合多个权威来源整理而成: 🎙️ 一、语音交互层(Speech-to-Speech & Text-to-Spe…...