当前位置: 首页 > 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 模式的特点:
(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/

相关文章:

LVS负载均衡DR(直接路由)模式

在LVS(Linux Virtual Server)负载均衡中的DR(Direct Routing)模式下,数据包的流向如下: 客户端发送请求到负载均衡器(LVS)的虚拟IP(VIP)。负载均衡器&#x…...

14 anaconda+pycharm环境管理以及源管理

文章目录 环境管理博主使用的环境环境设置conda常用指令pycharm与环境的连接(新2023版本后)设置国内镜像(源管理)常用操作 环境管理 博主使用的环境 Anaconda3-2023.03-Windows-x86_64 pycharm-professional-2023.2 环境设置 …...

【C语言程序设计】C语言基本数据类型与表达式(思考题)

思考题 1、C语言的主要特点有哪些? ①简单紧凑、灵活方便,②是结构化的语言,③运算符丰富,④是一种高效的语言,⑤可直接对硬件进行操作,⑥具有较好的可移植性。 高效性:C语言是一种高级编程语言…...

Linux 网络发包流程

哈喽大家好,我是咸鱼 之前咸鱼在《Linux 网络收包流程》一文中介绍了 Linux 是如何实现网络接收数据包的 简单回顾一下: 数据到达网卡之后,网卡通过 DMA 将数据放到内存分配好的一块 ring buffer 中,然后触发硬中断CPU 收到硬中…...

Python web实战之Django的AJAX支持详解

关键词:Web开发、Django、AJAX、前端交互、动态网页 今天和大家分享Django的AJAX支持。AJAX可实现在网页上动态加载内容、无刷新更新数据的需求。 1. AJAX简介 AJAX(Asynchronous JavaScript and XML)是一种在网页上实现异步通信的技术。通过…...

spring boot实现实体类参数自定义校验

安装依赖项 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>1、新建实体类 Data public class UserEntity {private String name;private Integer age;…...

网络安全威胁与防御策略

第一章&#xff1a;引言 随着数字化时代的快速发展&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;网络的广泛应用也引发了一系列严峻的网络安全威胁。恶意软件、网络攻击、数据泄露等问题层出不穷&#xff0c;给个人和企业带来了巨大的风险。本文…...

C++:哈希表——模拟散列表

模拟散列表 维护一个集合&#xff0c;支持如下几种操作&#xff1a; 1.“I x”&#xff0c;插入一个数x 2.“Q x”&#xff0c;询问数x是否在集合中出现过 现在要进行N次操作&#xff0c;对于每个询问操作输出对应的结果 输入格式 第一行包含整数N&#xff0c;表示操作数量 …...

项目配置中心介绍

目录 什么是配置中心 为什么要有配置中心 配置中心的做法&#xff08;读取和通知&#xff09; 配置中心优点: 常用的配置中心中间件 什么是配置中心 配置中心就是用来管理项目当中所有配置的系统&#xff0c;也是微服务系统当中不可或缺的一部分。项目的配置文件不放到本地…...

14-案例:购物车

综合案例-购物车 需求说明: 1. 渲染功能 v-if/v-else v-for :class 2. 删除功能 点击传参 filter过滤覆盖原数组 3. 修改个数 点击传参 find找对象 4. 全选反选 计算属性computed 完整写法 get/set 5. 统计 选中的 总价 和 数量 计算属性conputed reduce条件求和 6. 持久化到本…...

上海市青少年算法2023年2月月赛(丙组)

上海市青少年算法2023年2月月赛(丙组)T1 格式改写 题目描述 给定一个仅由拉丁字符组成字符序列,需要改写一些字符的大小写,使得序列全部变成大写或全部变成小写,请统计最少修改多少个字符才能完成这项任务。 输入格式 一个字符序列:保证仅由拉丁字符构成 输出格式 单个整…...

jetpack5.0.2 已经安装了 cudnn 和 tensorrt

在平台 jetson Xavier NX 中想使用 cudnn 和 tensorrt。然后自己下载了相应包并解压&#xff0c;拷贝&#xff0c;编译 安装 cudnn 1.下载对应包文件&#xff0c;例如&#xff1a;cudnn-linux-sbsa-8.4.1.50_cuda11.6-archive.tar.xz 2.解压&#xff0c;移动到解压目录&#…...

我的编程语言学习笔记

前言 作为一名编程初学者&#xff0c;我深知学习编程需要不断积累和记录。在这篇博客文章中&#xff0c;我将分享一些我在学习C/C编程语言过程中记录的常用代码、特定函数、复杂概念以及特定功能。希望能与大家一起切磋进步&#xff01; 常用代码&#xff1a; 1. 输入输出操作…...

一个DW的计算

一个DW的计算 1- 题目: 已知一个DW1.1 要求: 从DW中取出指定的位的值1.1.1 分析1.1.2 实现1.1.3 简化实现1.1.4 验证 2- 题目: 已知一个DW2.1 要求: 从DW中的指定的P和S,取出指定的位的值2.1.1 分析2.1.2 实现 1- 题目: 已知一个DW 有图中所示一行信息&#xff0c;表示一个DW(…...

java.net.BindException Address already in use: NET_Bind解决

java.net.BindException Address already in use: NET_Bind 两种解决方法 两种解决方法 (1) kill 占用此端口的线程 查看报错的端口 netstat -ano | findstr 16825tasklist | findstr 1092 如果占用的程序不重要直接kill taskkill /f /pid 16825 (2) 修改启动端口 找一个没…...

JMM内存模型之happens-before阐述

文章目录 一、happens-before的定义二、happens-before的规则1. 程序顺序规则&#xff1a;2. 监视器锁规则&#xff1a;3. volatile变量规则&#xff1a;4. 传递性&#xff1a;5. start()规则&#xff1a;6. join()规则&#xff1a; 一、happens-before的定义 如果一个操作hap…...

大数据课程I2——Kafka的架构

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的架构; ⚪ 掌握Kafka的Topic与Partition; 一、Kafka核心概念及操作 1. producer生产者,可以是一个测试线程,也可以是某种技术框架(比如flume)。 2. producer向kafka生…...

vscode如何汉化

首先我们到vscode官网下载 链接如下&#xff1a; Visual Studio Code - Code Editing. Redefined 根据自己需要的版本下载就好 下载并且安装完毕之后 运行vscode 然后按快捷键 CTRLSHIFTX 打开安装扩展界面 搜索简体中文 安装就可以了 谢谢大家观看...

matlab保存图片

仅作为记录&#xff0c;大佬请跳过。 文章目录 用界面中的“另存为”用saveas 用界面中的“另存为” 即可。 参考 感谢大佬博主文章&#xff1a;传送门 用saveas 必须在编辑器中的plot之后用saveas&#xff08;也就是不能在命令行中单独使用——比如在编辑器中plot&#xf…...

产业园区数字孪生3d可视化全景展示方案

随着数字经济的发展&#xff0c;数字技术给企业发展带来了机遇的同时&#xff0c;也为企业管理带来挑战。比如园区运维&#xff0c;不仅体量大&#xff0c;复杂的运维管理系统&#xff0c;落地难度也较高。那么如何通过数字化手段重塑园区运营&#xff0c;打通园区各业务数据孤…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...