一、高可用集群基础

核心概念与指标

  • 集群类型

    • LB(负载均衡):如 LVS、HAProxy、Nginx,提升吞吐量;
    • HA(高可用):保障核心服务(数据库、Redis)连续性;
    • SPoF(单点故障):需通过冗余设计消除的风险点。
  • 可用性指标

    • 计算公式:A = MTBF / (MTBF + MTTR)(MTBF 为平均无故障时间,MTTR 为平均修复时间);
    • 常见标准:99.9%(年停机≤8.76 小时)、99.99%(≤52.56 分钟)、99.999%(≤5.26 分钟)。
  • 故障应对思路

    • 缩短 MTTR(故障恢复时间);
    • 冗余机制:主备(active/passive)或双主(active/active)模式。

二、VRRP 协议与 Keepalived

VRRP 核心机制

  • 作用:将多节点虚拟为单一 "虚拟路由器",解决网关单点故障;
  • 关键术语
    • VRID(0-255):虚拟路由器唯一标识;
    • VIP(虚拟 IP):对外服务的 IP;
    • 角色:master(主节点,提供服务)、backup(备节点,待机接管);
    • 优先级:决定主备切换的权重(0-255)。
  • 工作方式:主节点广播心跳,备节点监听,故障时自动切换。

Keepalived 功能

  • VRRP 协议的软件实现,核心功能包括:
    • VIP 地址漂移管理;
    • 后端服务器健康检查;
    • 自动生成 IPVS 负载均衡规则;
    • 支持 Nginx、HAProxy 等高可用切换。

三、实战部署

环境与基础配置

  • 节点信息

    主机名IP 地址角色
    KA1172.25.254.50Keepalived 主节点
    KA2172.25.254.60Keepalived 备节点
    rs11/22172.25.254.10/20后端 Web 服务器
  • 部署步骤

    1. 后端服务器安装 httpd 并启动;
    2. KA1/KA2 安装 Keepalived:dnf install keepalived -y
    3. 配置主节点(KA1):设置 MASTER 角色、VRID、优先级及 VIP;
    4. 配置备节点(KA2):角色设为 BACKUP,优先级低于主节点;
    5. 启动服务:systemctl enable --now keepalived

四、Keepalived 实战部署:从单主到双主

4.1 环境准备

本次实战涉及 4 台主机,网络配置如下:

主机名IP 地址角色
KA1172.25.254.50Keepalived 主节点
KA2172.25.254.60Keepalived 备节点
rs11172.25.254.10后端 Web 服务器(httpd)
rs22172.25.254.20后端 Web 服务器(httpd)

4.2 基础部署步骤

  1. 部署后端服务:在 rs11 和 rs22 安装 httpd 并启动:

    bash

    dnf install httpd -y
    systemctl enable --now httpd
    
  2. 安装 Keepalived:在 KA1 和 KA2 执行:

    bash

    dnf install keepalived -y
    
  3. 配置主节点(KA1):编辑/etc/keepalived/keepalived.conf

    conf

    global_defs {notification_email { 3036573531@qq.com }  # 通知邮箱notification_email_from 3036573431@qq.comsmtp_server 127.0.0.1router_id LVS_DEVEL  # 节点标识
    }# 健康检查脚本(以HAProxy为例)
    vrrp_script CHECK_HAPROXY {script "/etc/keepalived/scripts/haproxy.sh"  # 检查脚本路径interval 1  # 检查间隔(秒)weight -30  # 检查失败时优先级降低值fall 2      # 连续失败次数阈值rise 2      # 恢复成功次数阈值
    }vrrp_instance WEB_VIP {state MASTER  # 角色:主节点interface eth0  # 绑定网卡virtual_router_id 51  # VRID(需与备节点一致)priority 100  # 优先级(高于备节点)advert_int 1  # 心跳间隔(秒)authentication {auth_type PASS  # 认证方式auth_pass 1111  # 认证密码}track_script { CHECK_HAPROXY }  # 关联健康检查virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0  # VIP配置}
    }
    
  4. 配置备节点(KA2):与主节点类似,仅需修改state BACKUPpriority 80

  5. 启动服务

    bash

    systemctl enable --now keepalived.service
    

4.3 核心功能配置

  • 日志分离:通过修改启动参数将日志独立存储:

    bash

    # 在/etc/sysconfig/keepalived中添加
    KEEPALIVED_OPTIONS="-D -S 6"  # 日志设备号6
    # 在/etc/rsyslog.conf中添加
    local6.* /var/log/keepalived.log  # 日志路径
    systemctl restart rsyslog keepalived
    
  • 非抢占模式:避免主节点恢复后频繁切换,在配置中添加:

    conf

    vrrp_instance WEB_VIP {...nopreempt  # 开启非抢占
    }
    
  • 单播模式:适用于跨网段部署,指定通信节点:

    conf

    vrrp_instance WEB_VIP {...unicast_src_ip 172.25.254.50  # 本地IPunicast_peer { 172.25.254.60 }  # 对端IP
    }
    
  • 邮件通知:故障时发送告警,配置脚本与触发机制:

    bash

    # 编辑通知脚本/etc/keepalived/mail.sh
    #!/bin/bash
    mail_dest='3036573431@qq.com'
    mail_subj="$HOSTNAME 状态切换为 $1"
    echo "时间: $(date) 节点 $HOSTNAME 状态变为 $1" | mail -s "$mail_subj" $mail_dest# 在vrrp_instance中关联脚本
    notify_master "/etc/keepalived/mail.sh master"
    notify_backup "/etc/keepalived/mail.sh backup"
    

4.4 双主架构实现

单主架构中备节点长期闲置,双主架构通过两个 VRID 实现资源利用率最大化:

  1. KA1 配置

    conf

    # 虚拟路由器1(主节点)
    vrrp_instance WEB_VIP {state MASTERvirtual_router_id 51priority 100virtual_ipaddress { 172.25.254.100/24 }
    }# 虚拟路由器2(备节点)
    vrrp_instance DB_VIP {state BACKUPvirtual_router_id 52priority 80virtual_ipaddress { 172.25.254.200/24 }
    }
    
  2. KA2 配置

    conf

    # 虚拟路由器1(备节点)
    vrrp_instance WEB_VIP {state BACKUPvirtual_router_id 51priority 80virtual_ipaddress { 172.25.254.100/24 }
    }# 虚拟路由器2(主节点)
    vrrp_instance DB_VIP {state MASTERvirtual_router_id 52priority 100virtual_ipaddress { 172.25.254.200/24 }
    }
    
  3. 测试验证
    • 正常状态:KA1 持有 172.25.254.100,KA2 持有 172.25.254.200;
    • 故障模拟:关闭 KA2 的 keepalived,KA1 会自动接管 172.25.254.200;
    • 恢复验证:重启 KA2 的 keepalived,VIP 会自动回切。

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

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

相关文章

窗口函数替代子查询的复杂查询简化技巧

窗口函数通过单次扫描完成分析计算,能大幅简化子查询结构并提升性能,尤其在排名、累计计算等场景‌15。以下是核心优化技巧:一、排名场景替代方案‌部门工资排名‌传统子查询需自连接和聚合计数:sqlSELECT e1.name, e1.salary, (S…

深度学习:预训练和warm up的区别

“预训练(Pre-training)”和“Warm-up(预热)”是深度学习中常见的两个训练策略,它们虽然都在训练初期起作用,但本质和目的完全不同。一、预训练(Pre-training)1. 定义预训练是指&…

Apache Ignite中分布式信号量(Distributed Semaphore)的说明和使用示例

这段内容是关于 Apache Ignite 中 分布式信号量(Distributed Semaphore) 的说明和使用示例。我们来一步步解析,帮助你深入理解它的含义和用途。🔹 一、什么是 Semaphore(信号量)? 在并发编程中&…

怎么提升服务器的防攻击能力!

提升服务器的防攻击能力需要从​​架构设计、技术防护、运维管理​​等多维度入手,覆盖网络层、系统层、应用层及数据层的安全防护。以下是具体的策略和实践方法:​​一、基础安全加固:消除自身漏洞​​服务器自身的脆弱性是最常见的攻击入口…

vscode配置rust环境

1.官网下载vscode,安装 2.vscode命令行运行: Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe然后: .\rustup-init.exe3.验证 先配置path: $env:Path ";$env:USERPROFILE\.cargo\bin"查看是…

最新版 HarmonyOS NEXT 开发工具安装教程:如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器?

最新版 HarmonyOS NEXT 开发工具安装教程:如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器? 什么是 DevEco Studio? DevEco Studio 是华为为 HarmonyOS 开发的强大集成开发环境(IDE),专为开发 Harmony…

电商项目统一认证方案设计与实战

1. 微服务网关整合 OAuth2.0 设计思路分析 网关整合 OAuth2.0 有两种思路,一种是授权服务器生成令牌, 所有请求统一 在网关层验证,判断权限等操作;另一种是由各资源服务处理,网关只做请求 转发 。 比较常用的是第一种&#xf…

学习Markdown

标题一 标题二 标题三 标题四 标题五 标题六这是一段引用文本直接编写,段落换行是末尾两个以上的空格+回车 或者在段落后加一个空行 粗体语法:使用两个星号 ** 或两个下划线 __ 包围文字:这是粗体文字使用星号 这是__粗体文字__使…

剧本杀系统 App 开发:科技赋能,重塑剧本杀游戏体验

在科技飞速发展的当下,各个行业都在积极寻求与科技的融合,以实现创新和升级。剧本杀行业也不例外,剧本杀系统 App 的开发正是科技赋能的生动体现,它重塑了传统的剧本杀游戏体验,为玩家带来了全新的感受。剧本杀系统 Ap…

wvp-gb28181-pro 只用jar运行

编译前端后npm install --global yarnyarn --registryhttps://registry.npmjs.org installyarn run build,生成的前端文件,会在wvp-GB28181-pro\src\main\resources\static,因为是在resources中,打maven打包后会一起打到jar中&…

深度学习(鱼书)day06--神经网络的学习(后两节)

深度学习(鱼书)day06–神经网络的学习(后两节)一、梯度 像 这样的由全部变量的偏导数汇总而成的向量称为梯度(gradient)。 梯度实现的代码: def numerical_gradient(f, x):h 1e-4 # 0.0001grad…

学习嵌入式的第三十四天-数据结构-(2025.7.29)数据库

数据库基础概念 数据库是用于存储和管理海量数据的应用程序,提供数据增删改查及统计功能(如最大值、最小值、平均数等)。通过SQL语句操作数据,以表格形式管理存储。 数据库分类 关系型数据库 Oracle(大型&#xff0…

STM32——HAL库

总:STM32——学习总纲 一、简介 1.1 CMIS简介 所有厂家为了市场兼容性推出的标准 arm架构 1.2 HAL库简介 1.2.1 各种库优缺点 二、 STM32 Cube固件包 ST公司为CMSIS 中间层开发的pack,包含HAL。 2.1 获取方式 ST官网:st.com/content/st_c…

数据结构-图的相关定义

图-多对多Graph(V,E),图(顶点Vertex,边Edge)图可以没有边,只有一个顶点也叫图,但是单独的一条边,或者一个顶点连一条边,不能叫图有向图:无向图&am…

B 站搜一搜关键词优化:精准触达用户的流量密码

在 B 站内容生态中,搜一搜功能是用户主动获取信息的重要渠道,而关键词优化则是让你的视频在搜索结果中脱颖而出的关键。通过合理优化关键词,能提升视频曝光率,吸引精准流量,为账号发展注入强劲动力。以下从关键词挖掘、…

Python爬虫实战:研究purl库相关技术

1. 引言 随着互联网数据量的爆炸式增长,网络爬虫已成为数据采集、舆情分析和学术研究的重要工具。Python 凭借其丰富的库生态和简洁语法,成为开发爬虫的首选语言。本文提出的爬虫系统结合 requests 进行 HTTP 请求、BeautifulSoup 解析 HTML,并创新性地引入 purl 库处理复杂…

OpenCV 学习探秘之三:从图像读取到特征识别,再到机器学习等函数接口的全面实战应用与解析

一、引言 1.1介绍 OpenCV(Open Source Computer Vision Library)是一个功能强大的开源计算机视觉库,广泛应用于图像和视频处理、目标检测、机器学习等领域。本文将全面解析 OpenCV 中常用的函数接口,帮助读者快速掌握 OpenCV 的…

Umi从零搭建Ant Design Pro项目(3)集成 openapi 插件

1. 安装插件 pnpm add umijs/max-plugin-openapi pnpm add swagger-ui-dist如果不安装swagger-ui-dist,不会影响运行。但会报错。 2.配置文件export default defineConfig({// umi插件配置plugins: [umijs/max-plugin-openapi],// openAPI配置openAPI: {requestLibP…

Flutter开发实战之状态管理深入解析

第4章:状态管理深入解析 前言 想象一下,你正在开发一个购物车应用。用户在商品页面添加商品,然后去购物车页面查看,最后到结算页面付款。在这个过程中,购物车的数据需要在多个页面之间保持同步和一致。这就是状态管理要解决的核心问题。 状态管理是Flutter开发中最重要…

组件化(一):重新思考“组件”:状态、视图和逻辑的“最佳”分离实践

组件化(一):重新思考“组件”:状态、视图和逻辑的“最佳”分离实践 引子:组件的“内忧”与“外患” 至此,我们的前端内功修炼之旅已经硕果累累。我们掌握了组件化的架构思想,拥有了高效的渲染引擎,还探索…