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

Keepalived 实战

一、高可用集群基础

核心概念与指标

  • 集群类型

    • 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.dtcms.com/a/306021.html

相关文章:

  • 《C++二叉搜索树原理剖析:从原理到高效实现教学》
  • 如何利用 Redis 的原子操作(INCR, DECR)实现分布式计数器?
  • Java 控制台用户登录系统(支持角色权限与自定义异常处理)
  • 生成模型实战 | GLOW详解与实现
  • 从理论到实践:全面解析机器学习与 scikit-learn 工具
  • 汽车、航空航天、适用工业虚拟装配解决方案
  • 关于“PromptPilot” 之4 -目标系统软件架构: AI操作系统设计
  • 第六章:进入Redis的List核心
  • 【8月优质EI会议合集|高录用|EI检索稳定】计算机、光学、通信技术、电子、建模、数学、通信工程...
  • 人工智能与家庭:智能家居的便捷与隐患
  • 移动端WebView调试实战 全面排查渲染性能与布局跳动问题
  • ISO 26262 汽车功能安全(腾讯混元)
  • MongoDB系列教程-第二章:MongoDB数据库概念和特点、数据库操作、集合操作、文档操作、规范及常见问题解决、实际应用示例
  • JXD进步25.7.30
  • Thales靶机
  • 《Vuejs设计与实现》第 12 章(组件实现原理 下)
  • 非凸科技受邀出席第九届AIFOF投资创新发展论坛
  • 前端安全防护:XSS、CSRF与SQL注入漏洞深度解析与防御
  • 亚马逊云科技:赋能企业数字化转型,解决实际发展难题
  • 【Axure高保真原型】轮播条形图
  • 让科技之光,温暖银龄岁月——智绅科技“智慧养老进社区”星城国际站温情纪实
  • 【HarmonyOS】鸿蒙应用HTTPDNS 服务集成详解
  • 【Lua】元表常用属性
  • 【MySQL】MySQL索引—B树/B+树
  • 【选型】HK32L088 与 STM32F0/L0 系列 MCU 参数对比与选型建议(ST 原厂 vs 国产芯片)
  • 【LINUX网络】使用TCP简易通信
  • STM32 外部中断 和 定时器中断
  • 使用QT/C++完成的斗地主
  • ECharts从入门到精通:解锁数据可视化的魔法世界
  • 洛谷 P11230:[CSP-J 2024 T4] 接龙 ← 图论+动态规划