LVS负载均衡DR模式
在LVS(Linux Virtual Server)负载均衡中的DR(Direct Routing)模式下,数据包的流向如下:
- 客户端发送请求到负载均衡器(LVS)的虚拟IP(VIP)。
- 负载均衡器(LVS)接收到请求后,根据负载均衡算法选择一个后端服务器(Real Server)。
- 负载均衡器(LVS)将请求的目标MAC地址修改为所选后端服务器(Real Server)的MAC地址,并将数据包转发给后端服务器。
- 后端服务器接收到请求后,处理请求并生成响应。
- 后端服务器将响应发送回负载均衡器(LVS)。
- 负载均衡器(LVS)接收到响应后,将响应的源MAC地址修改为负载均衡器(LVS)的MAC地址,并将响应转发给客户端。
- 客户端接收到响应并处理。
在DR模式下,负载均衡器(LVS)只负责将请求转发给后端服务器,并将响应转发回客户端,而不会修改数据包的IP地址。这意味着后端服务器和客户端直接通信,负载均衡器(LVS)只在请求和响应的转发过程中起到中间转发的作用,减少了负载均衡器的处理负担,提高了性能和吞吐量。
需要注意的是,在DR模式下,后端服务器必须配置正确的网络路由,以确保响应数据包能够正确返回给客户端。此外,负载均衡器(LVS)和后端服务器之间需要通过网络隔离,以避免数据包循环和冲突。
DR模式中需要解决的问题:

问题一:
在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。
当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播。
只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。
解决方式:
对节点服务器进行处理,使其不响应针对VIP的ARP请求。
使用虚拟接口lo:0承载VIP地址,设置内核参数arp_ignore=1
作用:系统只响应目的IP为本地lP的ARP请求。

问题二:
Real Server返回报文(源IP是VIP)经网关路由器转发,重新封装报文时,需要先获取路由器的MAC地址。
发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址
解决方式:
使用Real Server 的物理网卡地址(即RIP)作为响应报文的IP,这样就不会导致网关服务器的ARP缓存表的紊乱。
设置内核参数arp_announce=2 使系统不使用IP包的源地址(VIP)来作为本机进行ARP请求的源IP地址,而选择发送接口的IP地址。

配置步骤:
-----------------DR模式 LVS负载均衡群集部署-----------------------------------
配置所需主机:
DR 服务器:20.0.0.102
Web 服务器1:20.0.0.103
Web 服务器2:20.0.0.104
vip:20.0.0.12
NFS共享服务器:20.0.0.101
一.配置负载调度器(20.0.0.102)
systemctl stop firewalld.service #关闭防火墙
setenforce 0 #将selinx 安全机制调为0
modprobe ip_vs #加载ip_vs内核模块,启用IPVS(IP Virtual Server)功能。
cat /proc/net/ip_vs #显示当前系统中的IPVS配置。列出IPVS的相关信息,如虚拟服务器、真实服务器和负载均衡算法等。
yum -y install ipvsadm #使用yum包管理器安装ipvsadm工具。ipvsadm是一个命令行工具,用于配置和管理IPVS。
(1)配置虚拟 IP 地址(VIP:20.0.0.12)
cd /etc/sysconfig/network-scripts/:切换到网络配置文件目录。cp ifcfg-ens33 ifcfg-ens33:0:复制名为ifcfg-ens33的网络配置文件为ifcfg-ens33:0。这将创建一个名为ens33:0的虚拟网络接口配置文件。vim ifcfg-ens33:0:使用vim编辑器打开ifcfg-ens33:0配置文件。在ifcfg-ens33:0配置文件中,添加以下内容:DEVICE=ens33:0
ONBOOT=yes
IPADDR=20.0.0.12
NETMASK=255.255.255.255
这些配置将设置虚拟网络接口ens33:0的设备名称、启动时自动激活、IP地址和子网掩码。ifup ens33:0:激活ens33:0虚拟网络接口。这将使配置的IP地址生效。ifconfig ens33:0:显示ens33:0虚拟网络接口的详细信息,包括IP地址、子网掩码等。
(2)调整 proc 响应参数
#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。
vim /etc/sysctl.conf 使用vim编辑器打开sysctl.conf文件
在sysctl.conf文件中,添加以下内容:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
以上这些配置将禁用IP转发和发送重定向sysctl -p 重新加载sysctl.conf文件中的配置。使新的配置生效
(3)配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm 将当前的IPVS配置保存到/etc/sysconfig/ipvsadm文件中。这将创建一个名为ipvsadm的配置文件,其中包含当前的IPVS规则
systemctl start ipvsadm 启动ipvsadm服务。这将加载之前保存的IPVS配置,并开始使用IPVS进行负载均衡。
ipvsadm -C 清空当前的IPVS配置。删除所有的虚拟服务器和真实服务器配置。
ipvsadm -A -t 20.0.0.12:80 -s rr 添加一个名为20.0.0.12:80的虚拟服务器,并使用轮询(round-robin)算法进行负载均衡。这将创建一个新的虚拟服务器配置
ipvsadm -a -t 20.0.0.12:80 -r 20.0.0.103:80 -g
ipvsadm -a -t 20.0.0.12:80 -r 20.0.0.104:80 -g 将真实服务器20.0.0.104:80添加到虚拟服务器20.0.0.12:80的后端组中。这将进一步扩展负载均衡,将流量分发到多个真实服务器,并使用源IP散列(source IP hash)算法进行负载均衡。请注意,如果您使用的是隧道模式,应将-g替换为-i。
ipvsadm 显示当前的IPVS配置。这将列出所有的虚拟服务器、真实服务器和负载均衡算法等详细信息ipvsadm -ln #查看节点状态,Route代表 DR模式
二.部署共享存储(NFS服务器:20.0.0.101)
systemctl stop firewalld.service
setenforce 0yum -y install nfs-utils rpcbind 用yum包管理器安装nfs-utils和rpcbind软件包。这些软件包提供了NFS(Network File System)和RPC(Remote Procedure Call)的相关工具和服务。
mkdir /opt/kgc /opt/benet 创建/opt/kgc和/opt/benet目录。这些目录将用于共享文件系统
chmod 777 /opt/kgc /opt/benet 将/opt/kgc和/opt/benet目录的权限设置为777。这将允许任何用户对这些目录进行读取、写入和执行操作。vim /etc/exports 使用vim编辑器打开/etc/exports文件。这个文件用于配置NFS共享。
在/etc/exports文件中,添加以下内容:
/usr/share *(ro,sync)
/opt/kgc 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)
这些配置将定义NFS共享的目录和访问权限。第一行将/usr/share目录以只读方式共享给所有主机。第二行将/opt/kgc目录以读写方式共享给20.0.0.0/24网段的主机。第三行将/opt/benet目录以读写方式共享给20.0.0.0/24网段的主机。systemctl start nfs.service 启动nfs服务。这将启动NFS服务器,并开始共享配置的目录。
systemctl start rpcbind.service 启动rpcbind服务。这将启动RPC绑定服务,以便NFS服务器可以与客户端进行通信。
三.配置节点服务器(20.0.0.103、20.0.0.104)
systemctl stop firewalld.service
setenforce 0
(1)配置虚拟 IP 地址(VIP:20.0.0.12)
#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
cd /etc/sysconfig/network-scripts/ 切换到/etc/sysconfig/network-scripts/目录
cp ifcfg-lo ifcfg-lo:0 复制ifcfg-lo文件为ifcfg-lo:0。这将创建一个名为ifcfg-lo:0的新文件,用于配置虚拟接口
vim ifcfg-lo:0 使用vim编辑器打开ifcfg-lo:0文件。
在ifcfg-lo:0文件中,添加以下内容:DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.12
NETMASK=255.255.255.255 #注意:子网掩码必须全为 1
以上这些配置将定义虚拟接口lo:0的设备名称、启动时自动激活、IP地址和子网掩码。ifup lo:0 激活虚拟接口lo:0。这将启用新配置的虚拟接口。
ifconfig lo:0 显示虚拟接口lo:0的配置信息。这将列出虚拟接口的IP地址、子网掩码等详细信息
route add -host 20.0.0.12 dev lo:0 添加一个路由规则,将主机20.0.0.12的流量通过虚拟接口lo:0发送。这将确保流量正确地通过虚拟接口。vim /etc/rc.local 使用vim编辑器打开/etc/rc.local文件
在/etc/rc.local文件中,添加以下内容:
/sbin/route add -host 20.0.0.12 dev lo:0chmod +x /etc/rc.d/rc.local 将/etc/rc.local文件设置为可执行。这将确保在系统启动时自动执行其中的命令。(2)调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突
vim /etc/sysctl.conf 使用vim编辑器打开/etc/sysctl.conf文件
......
在/etc/sysctl.conf文件中,添加以下内容:
net.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
以上这些配置将设置系统的ARP参数,以确保系统只响应目的IP为本地IP的ARP请求,并使用发送接口的IP地址作为ARP请求的源地址。
sysctl -p 重新加载sysctl.conf文件中的配置。这将使新的ARP参数生效或者
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore:将虚拟接口lo的arp_ignore参数设置为1。echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce:将虚拟接口lo的arp_announce参数设置为2。echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore:将所有接口的arp_ignore参数设置为1。echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce:将所有接口的arp_announce参数设置为2。sysctl -p:重新加载sysctl.conf文件中的配置。这将使新的ARP参数生效。yum -y install nfs-utils rpcbind httpd:使用yum包管理器安装nfs-utils、rpcbind和httpd软件包。这些软件包提供了NFS、RPC和HTTP服务的相关工具和服务。systemctl start rpcbind:启动rpcbind服务。这将启动RPC绑定服务,以便NFS服务器可以与客户端进行通信。systemctl start httpd:启动httpd服务。这将启动Apache HTTP服务器。--20.0.0.103---mount.nfs 20.0.0.101:/opt/kgc /var/www/html 将20.0.0.101主机上的/opt/kgc目录挂载到本地的/var/www/html目录。这将使20.0.0.103主机上的Apache HTTP服务器可以访问/opt/kgc目录中的文件
echo 'this is kgc web!' > /var/www/html/index.html 将一条消息写入/var/www/html/index.html文件,以显示在浏览器中。--20.0.0.104---
mount.nfs 20.0.0.101:/opt/benet /var/www/html 将20.0.0.101主机上的/opt/benet目录挂载到本地的/var/www/html目录。这将使20.0.0.104主机上的Apache HTTP服务器可以访问/opt/benet目录中的文件
echo 'this is benet web!' > /var/www/html/index.html 将一条消息写入/var/www/html/index.html文件,以显示在浏览器中。
4.测试 LVS 群集
在客户端使用浏览器访问 http://20.0.0.12/
相关文章:
LVS负载均衡DR模式
在LVS(Linux Virtual Server)负载均衡中的DR(Direct Routing)模式下,数据包的流向如下: 客户端发送请求到负载均衡器(LVS)的虚拟IP(VIP)。负载均衡器&#x…...
ArcGIS Pro基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例全流程科研能力提升
目录 第一章 入门篇 GIS理论及ArcGIS Pro基础 第二章 基础篇 ArcGIS数据管理与转换 第三章 数据编辑与查询、拓扑检查 第四章 制图篇 地图符号与版面设计 第五章 空间分析篇 ArcGIS矢量空间分析及应用 第六章 ArcGIS栅格空间分析及应用 第七章 影像篇 遥感影像处理 第八…...
Spring Clould 配置中心 - Nacos
视频地址:微服务(SpringCloudRabbitMQDockerRedis搜索分布式) Nacos配置管理-Nacos实现配置管理(P24、P25) Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,…...
1609.奇偶数
目录 一、题目 二、代码 三、完整测试代码 一、题目 1609. 奇偶树 - 力扣(LeetCode) 二、代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0),…...
c++--异常
1.什么是异常 对于C语言来说,处理错误的机制有: 1.终止程序:如assert,缺陷,如发生内存错误,除0之外发生程序终止,用户无法接受。 2.返回错误码:对于大型程序来说,需要…...
ArcGIS 利用cartogram插件制作变形地图
成果图 注:本图数据并不完全对,只做为测试用例 操作 首先需要下载一个插件cartogram 下载地址在这里 https://www.arcgis.com/home/item.html?idd348614c97264ae19b0311019a5f2276 下载完毕之后解压将Cartograms\HelpFiles下的所有文件复制到ArcGIS…...
Mybatis批量插入方式有哪些
MyBatis的批量插入有多种写法,下面我将列出一些常见的批量插入写法 方式列表 使用XML配置文件进行批量插入:在XML映射文件中使用<insert>标签,并通过foreach标签迭代批量数据,然后在SQL语句中使用VALUES关键字。使用Java注…...
前端框架学习-React(一)
React 应用程序是由组件组成的。 react 程序是用的jsx语法,使用这种语法的代码需要由babel进行解析,解析成js代码。 jsx语法: 只能返回一个根元素 所有的标签都必须闭合(自闭和或使用一对标签的方式闭合) 使用驼峰式…...
Android Studio实现解析HTML获取图片URL将图片保存到本地
目录 效果activity_main.xmlMainActivityImageItemImageAdapter 效果 项目本来是要做成图片保存到手机然后读取数据后瀑布流展示,但是有问题,目前只能做到保存到手机 activity_main.xml <?xml version"1.0" encoding"utf-8"?…...
单例模式的理论与实践
本文实践代码仓库:https://github.com/goSilver/my_practice 文章目录 一、定义二、作用三、实现3.1 饿汉式3.2 懒汉式3.3 双重检查3.4 静态内部类3.5 枚举 四、总结4.1 单例存在哪些问题?4.2 单例有什么替代解决方案? 一、定义 单例模式是一…...
深入了解MongoDB:灵活的文档型数据库与应用案例
什么是MongoDB ? MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…...
【HarmonyOS北向开发】-01 HarmonyOS概述
飞书原文链接-【HarmonyOS北向开发】-01 HarmonyOS概述https://fvcs2dhq8qs.feishu.cn/docx/TDf2d2KMaoPSUUxnvg2cASDdnCe?fromfrom_copylink...
Node.js入门
安装 前往官网下载即可:https://nodejs.org/zh-cn 安装之后检查是否成功并查看版本,winr --> 输入cmd --> 确认 --> 进入命令提示符窗口 --> 输入 node -v --> 出现以下就代表成功了,这也是node的版本号 什么是Node.js Nod…...
指针、数组、sizeof、strlen相关知识与练习题目
目录 前提回顾🔍: 关于一维数组🤮: 关于二维数组😀: sizeof与strlen🐕: sizeof🏀: strlen🐓: 相关练习📚:…...
分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测
分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测,运行环境Matlab2023b及以上…...
MyBatis动态SQL:打造灵活可变的数据库操作
目录 if标签trim标签where标签set标签foreach标签 动态SQL就是根据不同的条件或需求动态地生成查询语句,比如动态搜索条件、动态表或列名、动态排序等。 if标签 在我们填写一些信息时,有些信息是必填字段,有的则是非必填的,这些…...
nginx代理请求到内网不同服务器
需求:之前用的是frp做的内网穿透,但是每次电脑断电重启,路由或者端口会冲突,现在使用汉土云盒替换frp。 需要把公网ip映射到任意一台内网服务器上,然后在这台内网服务器上用Nginx做代理即可访问内网其它服务器…...
【C# 基础精讲】文件读取和写入
文件读取和写入是计算机程序中常见的操作,用于从文件中读取数据或将数据写入文件。在C#中,使用System.IO命名空间中的类来进行文件读写操作。本文将详细介绍如何在C#中进行文件读取和写入,包括读取文本文件、写入文本文件、读取二进制文件和写…...
设计模式——经典单例
0、核心要素 // 构造、析构函数私有化(一个进程只允许一个对象存在) // 对象私有化、静态化(因为接口静态函数) // 对象调用接口静态化(因为静态函数脱离了类对象,可以直接调用) 一、懒汉 唯…...
【HarmonyOS】鸿蒙应用获取华为帐号手机号码步骤(API7及以下)
【写在前面】 本文主要介绍使用API7及以下版本开发HarmonyOS应用时,通过华为帐号SDK和云侧接口获取手机号码的主要开发步骤,注意:开发过程中集成的华为帐号SDK仅支持API7及以下版本的HarmonyOS应用。 【前提准备】 1、HarmonyOS应用已申请获…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
