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 模式的特点:
(1)Director Server 和 Real Server 必须在同一个物理网络中。
(2)Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
(3)Director Server作为群集的访问入口,但不作为网关使用。
(4)所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
(5)Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server。
(6)Real Server 上的 lo 接口配置 VIP 的 IP 地址。

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/

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

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

相关文章

基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

使用基于C的OpenCV库来绘制多边形&#xff0c;并且为多边形的不同边使用不同的颜色&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件&#xff1a; #include <opencv2/opencv.hpp&g…

Bryntum Scheduler Pro 5.5.1 Crack

BRYNTUM 调度程序专业版,专业的日程安排小部件 Bryntum Scheduler Pro 5.5.1 一个专业有大脑的调度UI组件。Scheduler Pro 可帮助您安排任务&#xff0c;同时考虑资源和任务的可用性。 连接您的任务 让 Scheduler Pro 处理剩下的事情。它将根据您定义的链接安排您的任务并遵守任…

BNC连接器市场分析:全球BNC连接器市场规模不断增长

产品定义及统计范围 BNC&#xff08;Bayonet-Neill-Concelman&#xff09;连接器是一种通常用于视频和音频信号传输的电连接器。它是以其两位发明者Paul Neill和Carl Concelman的名字命名的&#xff0c;他们在20世纪40年代末开发了这种连接器。BNC连接器是一种设计用于同轴电缆…

ansible 修改远程主机nginx配置文件

安装ansible brew install ansible 或者 pip3 install ansible 添加远程主机 设置秘钥 mac登录远程主机 ssh -p 5700 root192.168.123.211 ssh localhost #设置双机信任 ssh-kyegen -t rsa #设置主机两边的ssh配置文件 vi /etc/ssh/sshd_config/ PermitRootL…

UniApp 制作高德地图插件

1、下载Uni插件项目 在Uni官网下载Uni插件项目&#xff0c;并参考官网插件项目创建插件项目. 开发者须知 | uni小程序SDK 如果下载下来项目运行不了可以参考下面链接进行处理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官网下载对应SD…

207. 课程表

思路 首先要完全理解题意&#xff0c;这道题的[a,b]并不是b满足了a就可以真正的学习a这门课了&#xff0c;因为a还有可能需要其他选修课的条件。类似下图。   这题的思路在于使用合适的数据结构来存储&#xff0c;这里用hash表来存储如果1这门课可以修了之后&#xff0c;可以…

docker pull 设置代理 centos

On CentOS the configuration file for Docker is at: /etc/sysconfig/docker 用 root 权限打开 text editor sudo gedit 注意 加引号 Adding the below line helped me to get the Docker daemon working behind a proxy server: HTTP_PROXY“http://<proxy_host>:&…

linux下shell编写软件看门狗

遇到一个问题&#xff0c;就是软件崩溃&#xff0c;可以让软件自动重启&#xff0c;而且数据库必须是软件崩溃之前的 #!/bin/sh while true do /app/app/record -qws cp -pr /msata/db/db_record.db /data/log/db_record.db mv /msata/db/db_record1.db /msata/db/db_record.d…

ubuntu20.04磁盘满了 /dev/mapper/ubuntu--vg-ubuntu--lv 占用 100%

问题 执行 mysql 大文件导入任务&#xff0c;最后快完成了&#xff0c;查看结果发现错了&#xff01;悲催&#xff01;都执行了 两天了 The table ‘XXXXXX’ is full &#xff1f; 磁盘满了&#xff1f; 刚好之前另一个 centos 服务器上也出现过磁盘满了&#xff0c;因此&a…

神经网络基础-神经网络补充概念-30-搭建神经网络块

概念 搭建神经网络块是一种常见的做法&#xff0c;它可以帮助你更好地组织和复用网络结构。神经网络块可以是一些相对独立的模块&#xff0c;例如卷积块、全连接块等&#xff0c;用于构建更复杂的网络架构。 代码实现 import numpy as np import tensorflow as tf from tens…

LeetCode 38题:外观数列

题目 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) "1"countAnd…

Linux后门大全-inetd后门(一)

环境 靶机&#xff1a;Ubuntu 16.04.7 LTS &#xff08;最好使用相同的版本或更老的版本&#xff0c;inetd是非常老的系统服务管理工具&#xff09; 192.17.0.4 攻击机&#xff1a; 安装inetd apt update apt-get install openbsd-inetd #检查是否安装成功,如果文件存在就安…

【使用群晖远程链接drive挂载电脑硬盘】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

《TCP IP网络编程》第十六章

第 16 章 关于 I/O 流分离的其他内容 16.1 分离 I/O 流 「分离 I/O 流」是一种常用表达。有 I/O 工具可区分二者&#xff0c;无论采用哪种方法&#xff0c;都可以认为是分离了 I/O 流。 2次 I/O 流分离&#xff1a; 第一种是第 10 章的「TCP I/O 过程」分离。通 shutdown(soc…

C++STL——deque容器详解

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.deque容器的基本概念二.deque容器常用操作①deque构造函数②deque元素操作③deque赋值操作④deque交换操作⑤deque大小操作⑥deque插入和删除…

el-form组件相关的一些基础使用

el-checkbox 01.description 多选单选框 02.场景举例 需要对每一条数据展示她的某些状态是否存在 03.代码展示 <el-checkbox v-model"query.isAutoAccptncsign" true-label1 false-label0 :disabled"ifReview?true:false">自动发起承兑应答</…

直方图均衡化和自适应直方图均衡化

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 均衡化是数字图像处理中常用的一种技术&#xff0c;用于增强图像的视觉效果和对比度。&#xff0c;今天我们将实现对同一张图像的直方图均衡化和自适应直方图均衡化处理&#xff0c;学习一下两者的的基本原理和实现过程&a…

MFC中的窗体绘制事件函数:OnCtlColor、OnPaint、OnNcPaint、OnDrawItem、OnEraseBkgnd、OnDraw

文章目录 CWnd::OnCtlColorCWnd::OnPaintCWnd::OnNcPaintCWnd::OnDrawItemCWnd::OnEraseBkgndCWnd::InvalidateRectCView::OnDraw 参考&#xff1a;https://learn.microsoft.com/ CWnd::OnCtlColor 即将绘制子控件时&#xff0c;框架会调用此成员函数。 afx_msg HBRUSH OnCt…

React 高阶组件(HOC)

React 高阶组件(HOC) 高阶组件不是 React API 的一部分&#xff0c;而是一种用来复用组件逻辑而衍生出来的一种技术。 什么是高阶组件 高阶组件就是一个函数&#xff0c;且该函数接受一个组件作为参数&#xff0c;并返回一个新的组件。基本上&#xff0c;这是从 React 的组成…

Mongodb 更新集合的方法到底有几种 (中) ?

更新方法 Mongodb 使用以下几种方法来更新文档 &#xff0c; Mongodb V5.0 使用 mongosh 客户端&#xff1a; db.collection.updateOne(<filter>, <update>, <options>) db.collection.updateMany(<filter>, <update>, <options>) db.c…