目录

一、核心组件与作用

1. LVS(Linux Virtual Server)

2. Keepalived

二、DR 模式下的 LVS + Keepalived 工作原理

1. 整体架构

2. 数据包流向(DR 模式)

三、部署步骤(DR 模式)

3.1 环境规划

3.2 主 / 备 LVS 节点配置(以主节点为例)

(1)基础环境准备

(2)配置 VIP(主 / 备节点均需配置)

(3)配置 Keepalived(主节点)

(4)优化内核参数(主 / 备节点均需配置)

(5)启动服务

3.3 后端 RS 配置(RS1 和 RS2 均需配置)

(1)绑定 VIP 到 lo 接口

(2)优化 ARP 策略(避免 MAC 冲突)

(3)部署 Web 服务

四、测试与验证

五、核心优势与注意事项

优势

注意事项

六、与其他方案对比(LVS+Keepalived vs Nginx/HAProxy)

三种模式的选择依据


一、核心组件与作用

1. LVS(Linux Virtual Server)

  • 定位:内核级四层负载均衡器,通过虚拟 IP(VIP)将客户端请求分发到后端真实服务器(Real Server,RS)。
  • 核心功能
    • 基于不同模式(DR/NAT/TUN)实现流量转发,其中 DR 模式因高性能成为主流选择。
    • 支持多种调度算法(如轮询 rr、加权轮询 wrr 等),实现请求的均衡分发。
  • 优势:工作在内核态,转发效率极高,适合高并发场景(百万级并发支撑)。

2. Keepalived

  • 定位:基于 VRRP 协议的高可用工具,为 LVS 提供故障转移和健康检查能力。
  • 核心功能
    • VIP 漂移:监控 LVS 主节点状态,故障时自动将 VIP 切换到备用节点,避免单点故障。
    • 健康检查:检测后端 RS 状态,自动剔除故障节点,确保请求仅分发到正常服务。
    • 集群管理:直接集成 LVS 配置,统一管理负载均衡规则。

二、DR 模式下的 LVS + Keepalived 工作原理

1. 整体架构

  • 角色分工
    • 主 LVS 节点(MASTER):承载 VIP,处理并分发客户端请求,发送 VRRP 心跳给备节点。
    • 备 LVS 节点(BACKUP):监听主节点心跳,主节点故障时接管 VIP,继续提供负载均衡。
    • 后端 RS:部署 Web 等服务,通过 lo 接口绑定 VIP,直接响应客户端(不经过 LVS)。
  • VIP 流转:正常时 VIP 在主 LVS 节点,主节点故障后 VIP 自动漂移到备节点。

2. 数据包流向(DR 模式)

  1. 客户端 → 主 LVS 节点:客户端请求发送到 VIP,数据包到达主 LVS 内核空间。
  2. LVS → 后端 RS:LVS 仅修改数据包的目标 MAC 地址(改为目标 RS 的 MAC),IP 地址不变(源 CIP,目标 VIP),通过二层网络发送到 RS。
  3. RS → 客户端:RS 通过 lo 接口的 VIP 处理请求,响应数据包直接发送给客户端(源 VIP,目标 CIP),不经过 LVS。

三、部署步骤(DR 模式)

3.1 环境规划

角色IP 地址核心配置
主 LVS(MASTER)192.168.10.80绑定 VIP 192.168.10.180
备 LVS(BACKUP)192.168.10.23备用节点,主节点故障时接管 VIP
后端 RS1192.168.10.16部署 Web 服务,lo 接口绑定 VIP
后端 RS2192.168.10.17部署 Web 服务,lo 接口绑定 VIP
客户端192.168.10.100访问 VIP 192.168.10.180

3.2 主 / 备 LVS 节点配置(以主节点为例)

(1)基础环境准备
# 关闭防火墙和 SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config# 安装工具
yum -y install ipvsadm keepalived
modprobe ip_vs  # 加载 LVS 内核模块
(2)配置 VIP(主 / 备节点均需配置)
# 创建虚拟网卡配置文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0# 编辑配置(子网掩码必须为 255.255.255.255)
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
IPV6INIT=no# 启动虚拟网卡
ifup ens33:0
(3)配置 Keepalived(主节点)
vim /etc/keepalived/keepalived.conf
global_defs {router_id LVS_01  # 主节点标识,备节点改为 LVS_02
}# VRRP 实例(控制 VIP 漂移)
vrrp_instance VI_1 {state MASTER       # 备节点改为 BACKUPinterface ens33    # 绑定 VIP 的物理网卡virtual_router_id 10  # 主备节点需一致priority 100       # 主节点优先级高于备节点(备节点设为 90)advert_int 1       # 心跳间隔 1 秒authentication {auth_type PASSauth_pass abc123  # 主备节点认证密码需一致}virtual_ipaddress {192.168.10.180  # VIP 地址}
}# LVS 负载均衡配置
virtual_server 192.168.10.180 80 {delay_loop 6       # 健康检查间隔 6 秒lb_algo rr         # 调度算法:轮询lb_kind DR         # 模式:DRpersistence_timeout 50  # 会话保持超时 50 秒(同一客户端 50 秒内固定访问同一 RS)protocol TCP# 后端 RS1 配置real_server 192.168.10.16 80 {weight 1      # 权重(越高分配越多请求)TCP_CHECK {   # TCP 健康检查connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}# 后端 RS2 配置real_server 192.168.10.17 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
(4)优化内核参数(主 / 备节点均需配置)

send_redirects:控制当前服务器是否发送 ICMP 重定向报文。

  • 取值 1(默认):允许发送 ICMP 重定向报文。
  • 取值 0:禁止发送 ICMP 重定向报文。

关闭 ICMP 重定向的核心目的是 避免客户端绕开负载均衡器直接访问后端服务器,具体原因如下:

  1. DR 模式的特殊网络路径

    • 负载均衡器(Director)通过修改 MAC 地址将请求转发给后端服务器。
    • 后端服务器处理后,直接通过自己的物理网卡向客户端发送响应(源 IP 是 VIP)。

    此时,服务器(后端或 Director)可能会认为 “客户端到 VIP 的最优路径是直接访问后端服务器”,从而发送 ICMP 重定向报文给客户端,导致客户端后续请求直接发给后端服务器(绕过 Director),破坏负载均衡策略。

  2. 防止路由混乱
    LVS 集群中,VIP 同时存在于 Director 和后端服务器(DR 模式),网络拓扑相对特殊。ICMP 重定向可能会让客户端或中间设备(如交换机)学习到错误的路由规则,导致请求分发异常。

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0  控制 ICMP 重定向
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p  # 生效配置
(5)启动服务

ip_vs 是 Linux 内核中实现 LVS(Linux Virtual Server,Linux 虚拟服务器)的核心模块,全称为 IP Virtual Server。它是由章文嵩博士主导开发的内核级负载均衡组件,通过在 Linux 内核中直接处理网络数据包,实现了高性能、高可用的 Layer 4(传输层)负载均衡。

ip_vs 的核心作用

 ip_vs 运行在 Linux 内核的网络协议栈中,主要负责:

  1. 接收客户端请求:监听虚拟 IP(VIP)上的服务端口(如 80、443)。
  2. 负载均衡调度:根据配置的算法(如轮询、权重、IP 哈希等),从后端真实服务器(Real Server)池中选择合适的节点。
  3. 转发数据包:根据 LVS 的工作模式(NAT/DR/TUN),对数据包进行地址转换、MAC 地址修改或隧道封装,将请求转发到选定的后端服务器。
  4. 维护连接状态:跟踪客户端与后端服务器的连接,确保同一客户端的请求能被正确转发(如 IP 哈希算法)。

ip_vs 的工作原理

  1. 内核态处理ip_vs 直接在内核态工作,避免了用户态与内核态之间的数据拷贝,因此性能远高于基于用户态的负载均衡工具(如 Nginx 作为四层负载均衡时)。
  2. 依赖 IPVS 管理工具ip_vs 本身是内核模块,需要通过用户态工具(如 ipvsadm 或 keepalived)进行配置(如定义 VIP、后端服务器、负载策略等)。
  3. 支持多种转发模式:如前文提到的 NAT、DR、TUN 三种模式,通过不同的数据包处理方式适配不同的网络场景。

ip_vs 与 LVS 的关系

  • LVS 是整体架构:包含内核中的 ip_vs 模块(负责实际转发)和用户态管理工具(如 ipvsadm,负责配置规则)。
  • ip_vs 是 LVS 的核心:没有 ip_vs 模块,LVS 就无法实现负载均衡功能;用户态工具仅用于配置和管理 ip_vs 的规则。

使用场景

ip_vs 适用于需要高性能四层负载均衡的场景,例如:

  • 大规模 Web 服务集群的入口流量分发。
  • 数据库读写分离的连接转发。
  • 高并发 TCP/UDP 服务的负载均衡(如游戏服务器、视频流服务)。
systemctl start keepalived
systemctl enable keepalivedipvsadm -ln  # 验证 LVS 规则(显示 RR 算法和 DR 模式)
#清除规则
ipvsadm -C
#添加虚拟服务器(VIP),使用轮询算法(rr)
ipvsadm -A -t 192.168.10.180:80 -s rr
#添加后端真实服务器(DR 模式)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
#保存规则到配置文件
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

3.3 后端 RS 配置(RS1 和 RS2 均需配置)

(1)绑定 VIP 到 lo 接口
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180  # 与 LVS 的 VIP 一致
NETMASK=255.255.255.255
IPV6INIT=no# 启动接口并添加路由
ifup lo:0
route add -host 192.168.10.180 dev lo:0  # 确保 VIP 路由指向 lo 接口
(2)优化 ARP 策略(避免 MAC 冲突)

各参数含义

1. arp_ignore:控制是否响应 ARP 请求

  • 作用:决定当服务器收到一个 ARP 请求(询问某个 IP 对应的 MAC 地址)时,是否返回自己的 MAC 地址。
  • 取值含义
    • 0(默认):只要本地配置了该 IP,就响应 ARP 请求(返回自己的 MAC)。
    • 1:仅当 ARP 请求的目标 IP 配置在接收请求的网络接口上时,才响应;如果 IP 配置在非接收接口(如 lo 回环接口),则不响应。

2. arp_announce:控制发送 ARP 通告时的源 IP 选择

  • 作用:当服务器主动发送 ARP 通告(告知网络中其他设备 “我拥有某个 IP”)时,决定使用哪个 IP 作为源 IP。
  • 取值含义
    • 0(默认):允许使用任意网络接口上的 IP 作为源 IP 发送 ARP 通告。
    • 1:尽量使用与目标 IP 同网段的本地 IP 作为源 IP。
    • 2:强制使用发送接口上的 IP 作为源 IP,不允许使用其他接口(如 lo)上的 IP。
vim /etc/sysctl.conf
# 禁止 RS 响应非本地物理 IP 的 ARP 请求
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
(3)部署 Web 服务
yum -y install httpd
systemctl start httpd && systemctl enable httpd# RS1 页面内容
echo 'this is kgc web!' > /var/www/html/index.html
# RS2 页面内容
echo 'this is benet web!' > /var/www/html/index.html

四、测试与验证

  1. 负载均衡测试:客户端访问 http://192.168.10.180,刷新页面(间隔超过 50 秒),应轮询显示 RS1 和 RS2 的页面。
  2. 高可用测试
    • 停止主 LVS 节点的 Keepalived:systemctl stop keepalived
    • 在备节点执行 ip addr,确认 VIP 已漂移到备节点。
    • 客户端继续访问 VIP,服务正常(由备节点分发请求)。
    • 重启主节点 Keepalived,VIP 自动回归(默认抢占模式)。

五、核心优势与注意事项

优势

  • 高性能:DR 模式下 LVS 仅修改 MAC 地址,转发效率极高,适合高并发。
  • 高可用:Keepalived 实现 VIP 漂移,避免 LVS 节点单点故障。
  • 灵活性:支持多种调度算法,可根据 RS 性能调整权重。

注意事项

  • 网络要求:LVS 节点与 RS 必须在同一物理网段(DR 模式限制)。
  • ARP 策略:RS 必须配置 arp_ignore 和 arp_announce,否则会导致 VIP 冲突。
  • 会话保持persistence_timeout 需根据业务场景调整(如静态页面可设为 0)。
  • 脑裂防护:通过双心跳线、仲裁 IP(如网关)避免主备节点同时争抢 VIP。

六、与其他方案对比(LVS+Keepalived vs Nginx/HAProxy)

特性LVS + KeepalivedNginxHAProxy
工作层级四层(内核态)四层 + 七层(应用态)四层 + 七层(应用态)
性能最高(百万级并发)高(十万级并发)高(接近 Nginx)
健康检查依赖 Keepalived 脚本 / TCP 检查简单 HTTP/TCP 检查强大(支持多种协议)
适用场景超大规模集群、高并发中小型集群、需七层转发(如 URL 路由)高可用集群、复杂健康检查需求

三种模式的选择依据

模式核心适用场景与 Keepalived 结合的优势典型业务场景
DR同网段、高并发、高性能要求性能最优,适合大规模集群,Keepalived 保障 VIP 高可用电商、门户等高流量网站
NAT跨网段、小规模集群、需隐藏后端 IP部署灵活,适合简单网络,Keepalived 简化故障转移小型应用、内部服务
TUN跨地域、分布式部署,需避免 NAT 瓶颈支持广域网负载均衡,Keepalived 确保隧道节点高可用跨数据中心集群、分布式服务

通过 LVS + Keepalived 的组合,可构建兼具高性能和高可用性的负载均衡架构,是企业级核心服务的理想选择。

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

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

相关文章

知识沉淀过于碎片化如何形成体系化框架

要将过于碎片化的知识沉淀转变为体系化的框架,必须采取一套自上而下设计与自下而上归集相结合的系统性方法,其核心路径在于首先进行战略性诊断与顶层蓝图设计、其次构建统一且可扩展的知识架构(分类与标签体系)、然后实施系统性的…

XLua教程之C#调用Lua

上一篇文章 XLua教程之入门篇-CSDN博客 在C#脚本中访问lua全局数据,特别是table以及function,代价比较大,建议尽量少做相关操作。 LuaEnv.Global.Get 用于获取一个全局变量,但是无法获取局部变量(用local修饰) 全局基本类型变量…

C++ 标准库中的哈希函数:从std::hash到自定义哈希器

C 标准库中的哈希函数:从 std::hash 到自定义哈希器 1. 引言 在上一篇中,我们介绍了哈希表为什么能够实现 O(1) 查找。 核心秘密在于:哈希函数。 在 C 标准库中,哈希表容器(如 unordered_map、unordered_set&#xff0…

在图形 / 游戏开发中,为何 Pixels Per Unit(PPU)数值越小,物体在屏幕上显示的尺寸越大?

1. 什么是 PPU? PPU(Pixels Per Unit)指的是 多少像素对应游戏世界中的一个单位(Unit)。 在 Unity 等游戏引擎中,1 Unit 通常被视为世界空间的基本长度,比如 1 米。2. PPU 与物体大小的关系PPU …

【ZYNQ开发篇】Petalinux和电脑端的静态ip地址配置

使用Petalinux工具为ZYNQ板卡搭建嵌入式Linux操作系统,成功搭建后,用户通常会使用客户端软件对ZYNQ板卡上的Linux系统进行访问,软件需要知道ZYNQ板卡的ip地址才能进行访问,如果ip地址是动态变化的,软件每次访问都要重新…

AVL树知识总结

AVL树概念性质一颗AVL树或是空树,或者具有一下性质的二叉搜索树:左右都是AVL树,左右子树高度差的绝对值不超过1AVL树有n个结果,高度保持在O(logN) 搜索时间复杂度O(logN)模拟实现插入定义&#…

返利app的跨域问题解决方案:CORS与反向代理在前后端分离架构中的应用

返利app的跨域问题解决方案:CORS与反向代理在前后端分离架构中的应用 大家好,我是阿可,微赚淘客系统及省赚客APP创始人,是个冬天不穿秋裤,天冷也要风度的程序猿! 在返利APP的前后端分离架构中,跨…

【dl】python基础 深度学习中需要用到的python基础

直接在jupyter写笔记然后导出md格式真的太好用了本文笔记来自小破站视频BV1K14y1c75ePython 基础 1. 变量 1.1 三种基本变量类型 # 字符串 str str_v "123"# 数字 int或float num_v 11 float_v 12.0# 布尔型 bool bool_v True1.1.1 字符串 f字符串:在…

Vue FullPage.js 完整使用指南:Vue 3 官方全屏滚动解决方案

概述 vue-fullpage.js 是 FullPage.js 的官方 Vue.js 3 包装器,为 Vue 3 应用提供了强大的全屏滚动功能。该插件基于成熟的 FullPage.js 库,支持多种滚动效果和丰富的配置选项,特别适用于企业级数据大屏、产品展示、单页应用等场景。 官方信…

软件工程实践一:Git 使用教程(含分支与 Gitee)

文章目录目标一、快速上手1. Windows 安装 Git2. 初始化 / 克隆二、核心概念速览三、常用命令清单1) 查看状态与差异2) 添加与提交3) 历史与回溯4) 撤销与恢复(Git 2.23 推荐新命令)5) 忽略文件四、分支与合并(Branch & Merge&#xff09…

css`min()` 、`max()`、 `clamp()`

min() 用来计算多个数值中最小的那个,非常适合做自适应。 width: min(50vw, 500px) 50vw 表示 视口宽度的 50% 500px 表示 500px min(50vw, 500px) 表示会取两者中 最小的那个 作为最终的宽度,。 使用场景 限制某个元素宽度不超过某个值; 响…

【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT工具替代

目录 HEG 安装 验证 HEG 安装与否 设置环境变量(建议) 命令行接口(Command Line Interface) hegtool 工具 hegtool 用法 Header File 格式 功能1:`gdtif` 工具 – MISR 数据处理 `gdtif` 使用方式 参数文件格式(Parameter File Format) 功能2:`resample` 工具 – 重采样…

PyTorch 神经网络

神经网络是一种模仿人脑神经元链接的计算模型, 由多层节点组成, 用于学习数据之间的复杂模式和关系。神经网络通过调整神经元之间的连接权重来优化预测结果,这个过程可以涉及到向前传播,损失计算,反向传播和参数更新。…

详细解析苹果iOS应用上架到App Store的完整步骤与指南

📱苹果商店上架全流程详解 👩‍💻想要将你的App上架到苹果商店?跟随这份指南,一步步操作吧! 1️⃣ 申请开发者账号:访问苹果开发者网站,注册并支付99美元年费,获取开发者…

三维GIS开发实战!Cesium + CZML 实现火箭飞行与分离的 3D 动态模拟

CZML是一种基于JSON的数据格式,专门用于在Cesium中描述3D场景和时间动态数据。本文将详细介绍了CZML的特点(JSON格式、时间动态性、层次结构等)和基本组件,并给出了一个火箭发射的实例。通过搭建Cesium开发环境(使用vi…

Spring Boot 深入剖析:BootstrapRegistry 与 BeanDefinitionRegistry 的对比

在 Spring Boot 的启动过程中,BootstrapRegistry 和 BeanDefinitionRegistry 是两个名为“Registry”却扮演着截然不同角色的核心接口。理解它们的差异是深入掌握 Spring Boot 启动机制和进行高级定制开发的关键。BootstrapRegistry public static ConfigurableAppl…

贪心算法应用:速率单调调度(RMS)问题详解

Java中的贪心算法应用:速率单调调度(RMS)问题详解 1. 速率单调调度(RMS)概述 速率单调调度(Rate Monotonic Scheduling, RMS)是一种广泛应用于实时系统中的静态优先级调度算法,属于贪心算法在任务调度领域的经典应用。 1.1 基本概念 RMS基于以下原则&…

Cesium4--地形(OSGB到3DTiles)

1 OSBG OSGB(OpenSceneGraph Binary)是基于 OpenSceneGraph(OSG) 三维渲染引擎的二进制三维场景数据格式,广泛用于存储和传输倾斜摄影测量、BIM、点云等大规模三维模型,尤其在国产地理信息与智慧城市项目中…

多语言共享贩卖机投资理财共享售卖机投资理财系统

多语言共享贩卖机投资理财/共享售卖机分红/充电宝/充电桩投资理财系统 采用thinkphp内核开发,支持注册赠金、多级分销,功能很基础 修复后台用户列表管理 可自定义理财商品 多种语言还可以添加任意语言 源码开源 多级分销 注册赠金等

[Windows] PDF 专业压缩工具 v3.0

[Windows] PDF 专业压缩工具 v3.0 链接:https://pan.xunlei.com/s/VOZwtC_5lCF-UF6gkoHuxWMoA1?pwdchg8# PDF 压缩工具 3.0 新版功能特点 - 不受页数限制! 一、核心压缩功能 1.多模式智能压缩 支持 4 种压缩模式:平衡模式&#xff08…