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

LVS负载均衡DR模式

在LVS(Linux Virtual Server)负载均衡中的DR(Direct Routing)模式下,数据包的流向如下:

  1. 客户端发送请求到负载均衡器(LVS)的虚拟IP(VIP)。
  2. 负载均衡器(LVS)接收到请求后,根据负载均衡算法选择一个后端服务器(Real Server)。
  3. 负载均衡器(LVS)将请求的目标MAC地址修改为所选后端服务器(Real Server)的MAC地址,并将数据包转发给后端服务器。
  4. 后端服务器接收到请求后,处理请求并生成响应。
  5. 后端服务器将响应发送回负载均衡器(LVS)。
  6. 负载均衡器(LVS)接收到响应后,将响应的源MAC地址修改为负载均衡器(LVS)的MAC地址,并将响应转发给客户端。
  7. 客户端接收到响应并处理。

在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 01)配置虚拟 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除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多&#xff0c…...

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的批量插入有多种写法&#xff0c;下面我将列出一些常见的批量插入写法 方式列表 使用XML配置文件进行批量插入&#xff1a;在XML映射文件中使用<insert>标签&#xff0c;并通过foreach标签迭代批量数据&#xff0c;然后在SQL语句中使用VALUES关键字。使用Java注…...

前端框架学习-React(一)

React 应用程序是由组件组成的。 react 程序是用的jsx语法&#xff0c;使用这种语法的代码需要由babel进行解析&#xff0c;解析成js代码。 jsx语法&#xff1a; 只能返回一个根元素 所有的标签都必须闭合&#xff08;自闭和或使用一对标签的方式闭合&#xff09; 使用驼峰式…...

Android Studio实现解析HTML获取图片URL将图片保存到本地

目录 效果activity_main.xmlMainActivityImageItemImageAdapter 效果 项目本来是要做成图片保存到手机然后读取数据后瀑布流展示&#xff0c;但是有问题&#xff0c;目前只能做到保存到手机 activity_main.xml <?xml version"1.0" encoding"utf-8"?…...

单例模式的理论与实践

本文实践代码仓库&#xff1a;https://github.com/goSilver/my_practice 文章目录 一、定义二、作用三、实现3.1 饿汉式3.2 懒汉式3.3 双重检查3.4 静态内部类3.5 枚举 四、总结4.1 单例存在哪些问题&#xff1f;4.2 单例有什么替代解决方案&#xff1f; 一、定义 单例模式是一…...

深入了解MongoDB:灵活的文档型数据库与应用案例

什么是MongoDB ? MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…...

【HarmonyOS北向开发】-01 HarmonyOS概述

飞书原文链接-【HarmonyOS北向开发】-01 HarmonyOS概述https://fvcs2dhq8qs.feishu.cn/docx/TDf2d2KMaoPSUUxnvg2cASDdnCe?fromfrom_copylink...

Node.js入门

安装 前往官网下载即可&#xff1a;https://nodejs.org/zh-cn 安装之后检查是否成功并查看版本&#xff0c;winr --> 输入cmd --> 确认 --> 进入命令提示符窗口 --> 输入 node -v --> 出现以下就代表成功了&#xff0c;这也是node的版本号 什么是Node.js Nod…...

指针、数组、sizeof、strlen相关知识与练习题目

目录 前提回顾&#x1f50d;&#xff1a; 关于一维数组&#x1f92e;&#xff1a; 关于二维数组&#x1f600;&#xff1a; sizeof与strlen&#x1f415;&#xff1a; sizeof&#x1f3c0;&#xff1a; strlen&#x1f413;&#xff1a; 相关练习&#x1f4da;&#xff1a…...

分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测&#xff0c;运行环境Matlab2023b及以上…...

MyBatis动态SQL:打造灵活可变的数据库操作

目录 if标签trim标签where标签set标签foreach标签 动态SQL就是根据不同的条件或需求动态地生成查询语句&#xff0c;比如动态搜索条件、动态表或列名、动态排序等。 if标签 在我们填写一些信息时&#xff0c;有些信息是必填字段&#xff0c;有的则是非必填的&#xff0c;这些…...

nginx代理请求到内网不同服务器

需求&#xff1a;之前用的是frp做的内网穿透&#xff0c;但是每次电脑断电重启&#xff0c;路由或者端口会冲突&#xff0c;现在使用汉土云盒替换frp。 需要把公网ip映射到任意一台内网服务器上&#xff0c;然后在这台内网服务器上用Nginx做代理即可访问内网其它服务器&#xf…...

【C# 基础精讲】文件读取和写入

文件读取和写入是计算机程序中常见的操作&#xff0c;用于从文件中读取数据或将数据写入文件。在C#中&#xff0c;使用System.IO命名空间中的类来进行文件读写操作。本文将详细介绍如何在C#中进行文件读取和写入&#xff0c;包括读取文本文件、写入文本文件、读取二进制文件和写…...

设计模式——经典单例

0、核心要素 // 构造、析构函数私有化&#xff08;一个进程只允许一个对象存在&#xff09; // 对象私有化、静态化&#xff08;因为接口静态函数&#xff09; // 对象调用接口静态化&#xff08;因为静态函数脱离了类对象&#xff0c;可以直接调用&#xff09; 一、懒汉 唯…...

【HarmonyOS】鸿蒙应用获取华为帐号手机号码步骤(API7及以下)

【写在前面】 本文主要介绍使用API7及以下版本开发HarmonyOS应用时&#xff0c;通过华为帐号SDK和云侧接口获取手机号码的主要开发步骤&#xff0c;注意&#xff1a;开发过程中集成的华为帐号SDK仅支持API7及以下版本的HarmonyOS应用。 【前提准备】 1、HarmonyOS应用已申请获…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...