从原理到实践:LVS+Keepalived构建高可用负载均衡集群

文章目录

  • 从原理到实践:LVS+Keepalived构建高可用负载均衡集群
    • 一、为什么需要LVS+Keepalived?
    • 二、核心原理:Keepalived与VRRP协议
      • 1. VRRP的核心思想
      • 2. Keepalived的三大功能
    • 三、LVS+Keepalived集群拓扑设计
    • 四、实战部署:LVS+Keepalived集群搭建
      • 阶段1:环境准备
      • 阶段2:配置主从调度器(核心步骤)
        • 1. 主调度器配置(192.168.10.73)
        • 2. 从调度器配置(192.168.10.74)
        • 3. 启动Keepalived服务
      • 阶段3:配置Web节点(DR模式必需)
    • 五、集群测试与验证
      • 1. 负载均衡测试
      • 2. 高可用(故障切换)测试
        • (1)主调度器故障测试
        • (2)Web节点故障测试
      • 3. 日志查看
    • 六、常见问题与解决方案
    • 七、总结

在企业级应用部署中,“单点故障”是悬在运维人员头顶的“达摩克利斯之剑”——单台服务器一旦宕机,服务中断、业务停滞、用户流失等问题便会接踵而至。为解决这一痛点,LVS(Linux Virtual Server)与Keepalived的组合成为了构建高可用负载均衡集群的经典方案。本文将从原理剖析入手,一步步带大家掌握LVS+Keepalived集群的部署与实战技巧。

一、为什么需要LVS+Keepalived?

在传统的单服务器或单纯LVS部署中,存在两大核心隐患:

  1. 单点故障风险:无论是单独的Web服务器,还是LVS调度器,一旦出现硬件故障或软件崩溃,整个服务链路便会中断。
  2. 负载与可用性失衡:单纯的LVS能实现负载均衡,但调度器本身没有冗余机制;单纯的双机热备能解决单点问题,却无法分担访问压力。

而LVS+Keepalived的组合恰好弥补了这些不足:

  • LVS:作为四层负载均衡器,负责将客户端请求高效分发到后端服务器池,支撑高并发访问。
  • Keepalived:基于VRRP协议实现调度器的热备冗余,同时提供节点健康检查,确保集群“零中断”运行。

二、核心原理:Keepalived与VRRP协议

想要用好LVS+Keepalived,首先要理解其核心——VRRP(虚拟路由冗余协议) ,这是Keepalived实现高可用的底层逻辑。

1. VRRP的核心思想

VRRP将多台服务器(或路由器)组成一个“热备组”,通过一个虚拟IP(VIP) 对外提供服务。热备组内有明确的角色分工:

  • 主节点(MASTER):优先级最高的节点,负责处理客户端请求,同时定期向备节点发送“心跳”消息。
  • 备节点(BACKUP):处于待命状态,持续监听主节点的心跳;一旦检测到主节点失效,立即通过优先级选举接替VIP,成为新的主节点。

这种“虚拟IP漂移”机制,能在主节点故障时实现毫秒级切换,对客户端完全透明。

2. Keepalived的三大功能

Keepalived并非只为LVS设计,但其与LVS的适配性堪称完美,核心功能可概括为三点:

  1. 故障自动切换(Failover):基于VRRP实现主备调度器的无缝切换,避免调度器单点故障。
  2. 节点健康检查(Health Checking):定期检测后端真实服务器(如Web节点)的状态,自动剔除故障节点,待节点恢复后再重新加入集群。
  3. LVS集群管理:可直接调用ipvsadm工具配置LVS虚拟服务器、管理后端节点,无需手动执行复杂命令。

三、LVS+Keepalived集群拓扑设计

一个标准的LVS+Keepalived集群至少包含以下角色(以Web服务为例),拓扑结构如下:

[Internet] → [外网交换机] → [主调度器(MASTER)/从调度器(BACKUP)] → [内网交换机]↓[Web服务器池(节点1~节点N)] ← [NFS共享存储]

各组件说明:

  • 调度器(2台):主调度器(如192.168.10.73)、从调度器(如192.168.10.74),共享VIP(如192.168.10.72)。
  • Web节点(N台):运行Web服务,通过NFS共享存储保证内容一致性(如节点IP:192.168.10.77~80)。
  • NFS服务器(1台):存储Web站点文件,避免各节点内容不一致问题(如IP:192.168.10.250)。

四、实战部署:LVS+Keepalived集群搭建

以下部署基于CentOS 7系统,假设已配置好基础网络、关闭防火墙(或开放必要端口)及SELinux。

阶段1:环境准备

  1. 安装依赖工具:所有节点均需安装基础工具,调度器额外安装ipvsadm和Keepalived。

    # 所有节点安装基础工具
    yum install -y net-tools vim# 主从调度器安装ipvsadm和Keepalived
    yum install -y ipvsadm keepalived
    
  2. 配置NFS共享(仅NFS服务器操作):

    # 安装NFS服务
    yum install -y nfs-utils rpcbind# 创建共享目录并授权
    mkdir -p /var/www/html
    chmod 777 /var/www/html# 配置exports文件
    echo "/var/www/html 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports# 启动服务并设置开机自启
    systemctl start rpcbind nfs
    systemctl enable rpcbind nfs
    
  3. 挂载NFS到Web节点(所有Web节点操作):

    # 创建Web目录并挂载NFS
    mkdir -p /var/www/html
    mount -t nfs 192.168.10.250:/var/www/html /var/www/html# 设置开机自动挂载
    echo "192.168.10.250:/var/www/html /var/www/html nfs defaults 0 0" >> /etc/fstab
    
  4. 部署Web服务(所有Web节点操作):

    # 安装Apache
    yum install -y httpd# 为每个节点创建差异化测试页面(便于后续验证负载均衡)
    echo "Web Node 1 (192.168.10.77)" > /var/www/html/index.html  # 节点1
    echo "Web Node 2 (192.168.10.78)" > /var/www/html/index.html  # 节点2
    # 其余节点同理# 启动Apache并设置开机自启
    systemctl start httpd
    systemctl enable httpd
    

阶段2:配置主从调度器(核心步骤)

Keepalived的配置核心是/etc/keepalived/keepalived.conf,主从调度器的配置差异仅在于router_idstatepriority三个参数。

1. 主调度器配置(192.168.10.73)

编辑主配置文件:

vim /etc/keepalived/keepalived.conf

配置内容如下:

! Configuration File for keepalived# 全局参数配置
global_defs {router_id HA_MASTER  # 主调度器标识(唯一)
}# VRRP热备实例配置
vrrp_instance VI_1 {state MASTER  # 角色:主节点interface ens33  # 承载VIP的物理网卡(根据实际网卡名修改)virtual_router_id 1  # 虚拟路由ID(主从必须一致,范围0-255)priority 100  # 优先级(主节点需高于备节点,如100)advert_int 1  # 心跳间隔(1秒)# 认证配置(主从必须一致)authentication {auth_type PASSauth_pass 123456}# 虚拟IP(VIP)virtual_ipaddress {192.168.10.72/24  # 集群对外服务的VIP}
}# LVS虚拟服务器配置(关联后端Web节点)
virtual_server 192.168.10.72 80 {delay_loop 6  # 健康检查间隔(6秒)lb_algo rr  # 负载均衡算法(rr:轮询;wrr:加权轮询;lc:最小连接)lb_kind DR  # LVS工作模式(DR:直接路由模式,性能最优)persistence_timeout 50  # 会话保持时间(50秒内同一客户端请求定向到同一节点)protocol TCP  # 协议类型# 后端Web节点1配置real_server 192.168.10.77 80 {weight 1  # 权重(数值越大,分配到的请求越多)# 健康检查方式(TCP_CHECK:端口检查)TCP_CHECK {connect_timeout 3  # 连接超时时间(3秒)retry 3  # 重试次数delay_before_retry 3  # 重试间隔}}# 后端Web节点2配置(其余节点同理)real_server 192.168.10.78 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
2. 从调度器配置(192.168.10.74)

从调度器配置与主调度器基本一致,仅需修改3处参数:

global_defs {router_id HA_BACKUP  # 从调度器标识(唯一)
}vrrp_instance VI_1 {state BACKUP  # 角色:备节点interface ens33virtual_router_id 1priority 90  # 优先级(低于主节点,如90)advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.10.72/24}
}# LVS虚拟服务器配置与主调度器完全一致,此处省略
3. 启动Keepalived服务

主从调度器均执行以下命令:

# 启动服务
systemctl start keepalived
# 设置开机自启
systemctl enable keepalived
# 查看服务状态
systemctl status keepalived

阶段3:配置Web节点(DR模式必需)

LVS-DR模式下,Web节点需要绑定VIP到回环网卡,并调整ARP响应参数,避免IP冲突:

  1. 创建配置脚本:
    vim /usr/local/sbin/lvs_dr_real.sh
    
  2. 脚本内容如下:
    #!/bin/bash
    VIP=192.168.10.72
    # 绑定VIP到回环网卡
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
    # 添加路由(避免VIP数据包通过物理网卡发送)
    route add -host $VIP dev lo:0
    # 关闭ARP响应(防止节点响应VIP的ARP请求)
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    
  3. 执行脚本并设置开机自启:
    # 赋予执行权限
    chmod +x /usr/local/sbin/lvs_dr_real.sh
    # 执行脚本
    sh /usr/local/sbin/lvs_dr_real.sh
    # 添加到rc.local实现开机自启
    echo "/usr/local/sbin/lvs_dr_real.sh" >> /etc/rc.local
    chmod +x /etc/rc.local
    

五、集群测试与验证

部署完成后,需从高可用负载均衡两个维度进行测试,确保集群功能正常。

1. 负载均衡测试

在客户端浏览器中多次访问http://192.168.10.72(VIP),观察页面内容是否在“Web Node 1”“Web Node 2”等节点间轮询切换——若切换,则说明LVS负载均衡生效。

也可通过调度器执行ipvsadm -lnc命令,查看连接记录,验证请求是否分发到各后端节点:

ipvsadm -lnc  # 查看当前连接状态

2. 高可用(故障切换)测试

(1)主调度器故障测试
  1. 在主调度器上禁用网卡(模拟故障):
    ifdown ens33
    
  2. 在从调度器上执行ip addr命令,查看是否已绑定VIP(192.168.10.72)——若绑定,则说明故障切换成功。
  3. 客户端继续访问http://192.168.10.72,确认服务是否正常可用。
  4. 恢复主调度器网卡:
    ifup ens33
    
    由于主调度器优先级更高,会重新抢占VIP,从调度器将释放VIP。
(2)Web节点故障测试
  1. 停止某台Web节点的Apache服务(模拟故障):
    systemctl stop httpd
    
  2. 在调度器上执行ipvsadm -ln命令,查看该节点是否已被标记为“Inactive”——若标记,则说明健康检查生效,故障节点已被剔除。
  3. 客户端访问VIP,确认请求是否不再分发到故障节点。
  4. 恢复Apache服务:
    systemctl start httpd
    
    调度器会自动检测到节点恢复,将其重新加入集群。

3. 日志查看

Keepalived的故障切换日志默认记录在/var/log/messages中,可通过以下命令查看切换过程:

tail -f /var/log/messages | grep Keepalived  # 实时查看Keepalived日志

六、常见问题与解决方案

  1. VIP无法漂移

    • 检查主从调度器的virtual_router_idauth_pass是否一致。
    • 确认主调度器优先级是否高于从调度器。
    • 检查防火墙是否阻止VRRP协议(VRRP使用224.0.0.18多播地址,需开放)。
  2. Web节点无法访问VIP

    • 确认Web节点的lvs_dr_real.sh脚本是否执行成功,lo:0接口是否绑定VIP。
    • 检查arp_ignorearp_announce参数是否设置正确。
  3. 负载均衡失效

    • 确认LVS工作模式(DR)与Web节点配置是否匹配。
    • 检查ipvsadm规则是否正确(可通过ipvsadm -ln查看)。

七、总结

LVS+Keepalived集群通过“LVS负载均衡+Keepalived高可用”的双重保障,完美解决了企业级应用的单点故障和高并发压力问题。其核心在于VRRP协议的虚拟IP漂移机制,以及Keepalived的健康检查能力。

在实际部署中,需注意主从调度器的配置一致性、Web节点的ARP参数调整、日志的实时监控等细节——这些细节直接决定了集群的稳定性。掌握这套方案,能为企业业务的持续运行提供坚实的技术支撑。

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

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

相关文章

iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护

近年来,在线教育直播类 App 已成为学生与培训机构的重要工具。无论是 K12 教育、职业培训,还是兴趣学习,App 中承载的课程视频、题库与互动逻辑都是极高价值的内容资产。 然而,教育直播应用同样面临多重安全风险:课程视…

第2节-过滤表中的行-BETWEEN

摘要: 在本教程中,您将学习如何在 WHERE 子句中使用 PostgreSQL 的 BETWEEN 运算符来检查某个值是否在两个值之间。 PostgreSQL BETWEEN 运算符 BETWEEN运算符是一种比较运算符,如果某个值介于两个值之间,则返回true。 以下是 BETWEEN 运算符…

Windows 11 手动下载安装配置 uv、配置国内源

Windows 11 手动下载安装配置 uv、配置国内源 本文对应的讲解视频链接:https://www.bilibili.com/video/BV1WnYTzZEpW 文章目录Windows 11 手动下载安装配置 uv、配置国内源1. 下载、安装、配置 uv2. 参考信息重要声明: uv 的安装有很多种方式&#xff…

平板热点频繁断连?三步彻底解决

平板反复断开热点连接是一个非常常见且令人烦恼的问题。这通常不是单一原因造成的,而是多种因素叠加的结果。 我们可以从热点发射设备(手机等)、平板本身、以及环境因素三个方面来排查和解决。 一、 热点发射端(通常是手机&#x…

Qt文件操作的学习(三)

一、实现简易文本编辑器 主要用到带菜单栏的窗口,而非单一窗口。QT已经写好相关操作,就不在重新造轮子了功能设计:新建文本文档,打开文件,保存文件,另存为 这次不同于之前直接可以在控件上面右击槽了&…

ArcGIS学习-20 实战-县域水文分析

水文分析任务提取区域内水流方向、汇流累积量、河网、流域、子流域前置操作环境更改加载数据检查投影坐标系河网分析洼地填充限制默认为空,认为所有洼地都是需要填充的,这里更正一下Fill_DEM需要加上后缀.tif流向分析得到流量分析得到这里的黑色代表非河…

本地 Docker 环境 Solr 配置 SSL 证书

一、简介 在本地开发环境中为 Solr 配置 SSL 证书,是提升开发与测试一致性的关键步骤。尤其是在涉及安全传输需求的场景中,本地环境的 HTTPS 配置能有效避免因环境差异导致的问题。本文将详细介绍如何利用 Docker 容器,快速为 Solr 服务配置自签名 SSL 证书,实现本地 HTTP…

MacOS 运行CosyVoice

CosyVoic主要特点:1、支持中文、英文、上海话、天津话、四川话等方言。语音非常自然。2、支持3秒语音零样本克隆,效果非常好。3、克隆时间比较长(取决于GPU性能,使用H20以满足低延迟输出),L4 克隆默认文本需…

我不是挂王-用python实现燕双鹰小游戏3

在前两个版本的更新后,越来越多内容,操作和运行也不方便,优化第三版本窗口可视化界面 本次版本更新使得可读性和可操作性大幅度增加,前面2版本可分别参考 我不是挂王-用python实现燕双鹰小游戏 和 我不是挂王-用python实现燕双鹰小游戏2 一.燕双鹰窗口可视化(燕双鹰3.0) 新燕双…

装饰(Decorator)模式可以在不修改对象外观和功能的情况下添加或者删除对象功能

试题(35)、(36)某系统中的文本显示类(TextView)和图片显示类(PictureView)都继承了组件类(Component),分别显示文本和图片内容,现需要…

深度学习基础概念【持续更新】

1. 梯度消失如果网络中某一层的激活函数(如 sigmoid 或 tanh)在输入较大的情况下有很小的梯度(比如接近零),那么当这些小的梯度通过多层反向传播时,它们会逐渐变得更小。这意味着在深层网络的前面几层&…

上下文工程:AI应用成功的关键架构与实践指南

在AI应用开发中,模型能力只决定性能上限,而上下文质量决定性能下限——上下文工程正是确保AI系统理解用户意图、生成准确响应的核心工程技术,已成为区分普通AI应用与卓越AI应用的关键因素。一、上下文工程:AI应用的新核心竞争力 1…

数据传输优化-异步不阻塞处理增强首屏体验

背景:主 project 页面中会将视频存储到云端后获得 ID ,然后用 ID 调用 后端API POST到数据库后拿到挂载页面URL,接着传入视频分享组件(由于视频分享子组件的目标是分享视频挂载页面,所以前置步骤不能少)con…

【芯片设计-信号完整性 SI 学习 1.0 -- SI 介绍】

文章目录一、SoC 设计验证阶段的 SI 测试主要工作举例二、芯片 Bringup 阶段的 SI 测试主要工作举例三、SI-PI 联合仿真主要内容举例四、整体总结一、SoC 设计验证阶段的 SI 测试 在 前硅阶段(pre-silicon),设计团队需要确保 SoC 与外设接口…

C语言链表设计及应用

链表链表节点设计链表项目链表中的传址调用检查申请空间链表尾插链表头插链表尾部删除链表头部删除链表的查找指定位置之前插入指定位置之后插入数据删除指定位置(节点)数据删除指定位置(节点)之后的数据链表的销毁前面学习了顺序…

使用 YAML 自动化 Azure DevOps 管道

1. 在 Azure DevOps 中设置 YAML 管道 开始之前,您需要拥有一个 Azure DevOps 帐户和一个 git 仓库。 要创建 YAML 管道, 1. 导航至 Azure DevOps → 选择您的项目 2. 前往“管道”→ 点击“新建管道” 3. 选择您的仓库(Azure Repos、GitHub 等) 4. 选择“Starter Pipelin…

基于Spring Boot的幼儿园管理系统

基于Spring Boot的幼儿园管理系统 源码获取:https://mbd.pub/o/bread/YZWXlZtsbQ 引言 在数字化转型的浪潮中,教育行业的信息化建设显得尤为重要。幼儿园作为基础教育的重要环节,其管理系统的现代化水平直接关系到教育质量和运营效率。本文…

【NVIDIA-B200】 ‘CUDA driver version is insufficient for CUDA runtime version‘

目录 一、错误核心原因 二、排查步骤 1. 检查当前驱动版本 2. 检查 CUDA 运行时版本 3. 验证驱动与 CUDA 的兼容性 三、解决方法 1. 确保驱动正确加载 2. 重新安装匹配的驱动与 CUDA 3. 验证环境正确性 四、关键注意事项 报错日志: bash nccl.sh ------------5.安…

Android中如何实现自动化测试

目录 前言: 一、方法介绍 1、UI Automator 3、shell脚本 二、shell脚本实现自动化测试原理和步骤 1、 原理 2、步骤 三、shell自动化测试实例 前言: 在开发项目的过程中,我们将某个阶段的需求完成并且提测,通常,在测试工程师更细致的测…

绿联科技全球化突围:业财一体化如何打通全球电商全链路数字化

绿联科技专注数码配件20年,产品覆盖全球100多个国家,年销售额突破30亿。作为"连接"领域的专家,绿联深知连接的真谛不仅在于硬件产品,更在于数据的全球化连接。在全球电商竞争日益激烈的今天,绿联率先探索业财…