LVS的DR模式

一、DR模式

DR模式:直接路由模式

1.1 DR模式的工作方式

调度器在整个LVS集群当中是最重要的。

在NAT模式下,调度器负责接受请求,同时根据负载均衡的算法转发流量,响应给客户端。

DR模式下,调度器依然负责接受请求,同时根据负载均衡的算法转发流量,区别在于响应直接由RS响应给客户端。

直接路由Direct Routing ,是一种二层转发模式,二层转发的是数据帧,根据MAC地址和目的MAC地址进行转发。不会修改数据包的源IP和目的IP,根据数据包的MAC地址进行转发。

DR模式下,LVS也是维护一个虚拟的IP地址,所有的请求都是发送到这个VIP,既然是走二层转发,当客户端的请求到达调度之后,根据负载均衡的算法选择一个RS,修改VIP服务器的目的MAC变成RS的MAC地址,RS处理完之后,根据报文当中客户端的源MAC地址直接把响应发送到客户端即可,不需要走调度器了。

1.2 DR模式的特点

注意事项

  • 调度器的压力相对较小
  • 调度器的IP地址和RS的IP地址要在同一网段,这样数据才能进行二层转发。
  • 假如RS是一个公网地址,互联网可以直接访问这个RS的地址(基本不会出现这样的情况)
  • DR模式是走内核转发,内核来判断数据包的地址,根据RS的地址把数据包重新封装,修改MAC地址
  • 调度器的地址只可以作为集群访问的入口,不能作为网关
  • 所有的RS上的lo(本地环回地址)都要配置为VIP地址

带来的问题

  1. VIP地址冲突:调度器和RS都配置了VIP地址作为lo,且都在同一网段,会造成ARP通信的紊乱。因为是整个局域网广播,所有的设备都收到了。怎么把lo这个环回地址的响应屏蔽掉?只有本机的物理IP地址进行响应。

    解决办法:修改内核参数

    arp_ignore=1

    作用:只有当ARP请求的目标IP地址与接收网络接口上的本地IP地址相匹配时,系统才会响应,否则不予理睬。

    这种设置可以有效地减少或避免因网络配置不当而产生的问题,特别是在涉及到多个子网或者网络接口绑定的情况下,可以提高网络的可靠性和安全性。

    这里的作用就是系统的物理IP地址才会响应ARP请求,lo不会响应ARP请求。

  2. 返回报文时,VIP地址还在,怎么能让客户端来接受到响应?

    解决办法:修改内核参数

    arp_announce=2

    系统不使用IP数据包的源地址来响应ARP请求,直接发送物理接口的IP地址。

二、DR模式配置

2.1 DR模式的实现

Nginx1 : RS1 20.0.0.21

Nginx2 : RS2 20.0.0.22

VIP : 20.0.0.100

test2 :调度器 20.0.0.20

test3 : 客户机 20.0.0.30

调度机test2 :

yum -y install ipvsadm*
ifconfig ens33:0 20.0.0.100
#创建虚拟网卡,模拟VIPvim /etc/sysctl.conf
net.ipv4.ip_forward = 0
#关闭数据包转发功能
net.ipv4.conf.all.send_redirects = 0
#禁止系统发送ICMP重定向的消息
#只发送到真实IP
net.ipv4.conf.default.send_redirects = 0
#禁止默认网络接口发送ICMP重定向消息
net.ipv4.conf.ens33.send_redirects = 0
#禁止ens33设备发送ICMP重定向消息sysctl -pipvsadm -C
ipvsadm -A -t 20.0.0.100:80 -s rr
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.21:80 -g
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.22:80 -g

nginx1 和 2 :

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=20.0.0.100
NETMASK=255.255.255.255
ONBOOT=yes
#启动lo:0
ifup lo:0route add -host 20.0.0.100 dev lo:0
#设置IP地址20.0.0.100,添加到环回接口lo:0,作为LVS的VIP
#通过路由的模式转发到RS,能让VIP识别到真实的服务器
vim /etc/sysctl.conf
#内核设置
net.ipv4.conf.lo.arp_ignore = 1
#设置环回接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#设置环回接口仅仅公告本地的IP地址,但是不响应ARP请求
net.ipv4.conf.all.arp_ignore = 1
#设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce = 2
#设置所有接口仅仅公告本地的IP地址,但是不响应ARP请求

DR模式可以修改VIP的轮询算法

ipvsadm -E -t 20.0.0.100:80  -s wrripvsadm -e -t 20.0.0.100:80 -r 20.0.0.21:80 -w 3

2.2 小结:LVS的工作模式及其工作过程

LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式)、VS/DR(路由模式)、VS/TUN(隧道模式)。

1、NAT模式(VS-NAT)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。
然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。
真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,
把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。

缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,
因此负载均衡器将成为整个系统的瓶颈。

2、直接路由模式(VS-DR)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。
然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。
真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。
所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

3、IP隧道模式(VS-TUN)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。
然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。
真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。
所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”。

2.3 练习

练习1:

Nginx1 : RS1 20.0.0.21

Nginx2 : RS2 20.0.0.22

VIP : 20.0.0.100

test1 :DS1 主 20.0.0.10

test2 :DS2 备 20.0.0.20

test3 : 客户机 20.0.0.30

LVS和Nginx做负载均衡的区别:

LVS是四层转发,内核态 IP+端口 四层代理

Nginx 四层代理,也可以七层代理

练习2:

LVS(DR模式)+Nginx+Tomcat

LVS实现四层转发+Nginx实现7层转发(动态)

访问LVS的VIP地址可以实现动静分离

Nginx1 : RS1 20.0.0.21

Nginx2 : RS2 20.0.0.22

Tomcat1 :20.0.0.31

Tomcat2 :20.0.0.32

VIP : 20.0.0.100

test1 :DS 20.0.0.10

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

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

相关文章

qt 创建一个左侧边线拖拽的矩形

1.概要 2.代码 2.1 代码第一版 在Qt中&#xff0c;要创建一个可以向左侧拖拽边线的矩形&#xff0c;你需要自定义一个QGraphicsRectItem的子类&#xff0c;并重写其事件处理函数来响应鼠标的拖拽动作。以下是一个简单的实现示例&#xff1a; #include <QApplication>…

设计模式——装饰者模式

设计模式——装饰者模式 1.问题1.1 方案一1.2 方案二 2.装饰者模式2.1 基本介绍2.2 结构2.3 代码实现 3.小结 1.问题 咖啡订单项目&#xff1a; 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolat…

「Conda」在Linux系统中安装Conda环境管理器

在Linux系统中安装Conda环境管理器是一个相对简单的过程。 1. 准备工作 确保你的Linux系统已经更新到最新版本,并安装了基本的开发工具和库。打开终端,执行以下命令: sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential2. 安装Miniconda或An…

GB35114控制信令认证流程

GB35114控制信令认证说明&#xff1a; 注册成功后,信令发送方与信令接收方进行交互时,采用基于带密钥的杂凑方式保障信令来源安 全&#xff61;对除REGISTER消息以外的消息做带密钥的杂凑&#xff61;启用Date字段,扩展信令消息头域,在头域中 增加 Note 字 段 (值 为 Digest…

项目经理到底要不要考PMP?

在接待PMP学员中我惊讶地发现&#xff0c;不仅是项目经理&#xff0c;连开发、测试、产品、运营、销售、甚至财务团队的朋友们也都在积极备考。他们考证的原因主要有这几点&#xff1a; 1&#xff0c;职业发展&#xff1a;希望在职业生涯中晋升或转型到项目管理角色的朋友来说…

Spring MVC 全注解开发

1. Spring MVC 全注解开发 文章目录 1. Spring MVC 全注解开发2. web.xml 文件 的替代2.1 Servlet3.0新特性2.2 编写 WebAppInitializer 3. Spring MVC的配置3.1 Spring MVC的配置&#xff1a;开启注解驱动3.2 Spring MVC的配置&#xff1a;视图解析器3.3 Spring MVC的配置&…

SourceTree rebase(变基)的使用

参考资料 【Sourcetree】コミットを一つにまとめる【Sourcetree】リベースする 目录 前提0.1 merge与rebase0.2 merge合并分支0.3 rebase合并分支0.4 &#x1f4a5;超级注意事项&#x1f4a5; 一. 代码已提交&#xff0c;未推送&#xff0c;交互式变基1.1 通过SourceTree操作1…

UWA学堂上新|服务器AOI(Area Of Interest)算法和功能实现

课程是《基于.NetCore开发MMORPG分布式游戏服务器》系列课程第6节&#xff0c;本系列课程旨在帮助大家从零开始搭建商业化MMORPG的分布式服务器框架&#xff0c;包括不同种类服务器的线程模型&#xff0c;如中心服务器、网关服务器、游戏服务器、寻路服务器等&#xff0c;并讲解…

PICO,迷途VR?

随着科技的持续向前发展&#xff0c;越来越多的智能可穿戴设备涌现出来。除了最为大众所熟知的智能手环、智能手表之外&#xff0c;VR设备同样是可穿戴设备领域的一大细分领域&#xff0c;不少巨头都在VR领域有所布局。 回溯过往可知&#xff0c;VR并非新鲜事物&#xff0c;早…

【NLP实战】基于TextCNN的新闻文本分类

TextCNN文本分类在pytorch中的实现 基于TextCNN和transformers.BertTokenizer的新闻文本分类实现&#xff0c;包括训练、预测、数据加载和准确率评估。 目录 项目代码TextCNN网络结构相关模型仓库准备工作项目调参预测与评估 1.项目代码 https://github.com/NeoTse0622/Te…

怎么选流量套餐最划算呢,这篇文章建议收藏!

据小编了解&#xff0c;现在大多数用户手上都不止一张SIM卡&#xff0c;大部分都是双卡&#xff0c;甚至三卡了&#xff0c;那么&#xff0c;这些卡槽你真的利用对了吗&#xff1f; 这篇文章就告诉大家&#xff0c;如何更好的利用这两个卡槽&#xff0c;让你即省钱&#xff0c…

XML 验证器:确保数据完整性和准确性的关键工具

XML 验证器&#xff1a;确保数据完整性和准确性的关键工具 引言 在当今数字化时代&#xff0c;数据的有效管理和交换至关重要。XML&#xff08;可扩展标记语言&#xff09;作为一种用于存储和传输数据的语言&#xff0c;广泛用于各种应用程序和系统之间。为确保XML数据的完整…

vue3中常用组件封装及使用

vue3组件 文件上传属性与方法完整代码组件使用 文件上传 属性与方法 <!-- 属性1. multiple多选2. action上传文件服务器地址3. before-upload上传前校检格式和大小4. file-list上传的文件列表5. limit数量限制6. on-error上传失败触发7. on-exceed文件个数超出触发8. on-s…

(02)Unity使用在线AI大模型(调用Python)

目录 一、概要 二、改造Python代码 三、制作Unity场景 一、概要 查看本文需完成&#xff08;01&#xff09;Unity使用在线AI大模型&#xff08;使用百度千帆服务&#xff09;的阅读和实操&#xff0c;本文档接入指南的基础上使用Unity C#调用百度千帆大模型&#xff0c;需要…

十五、C++11常用新特性—Lambda表达式

1.基本 这个好像是很好用的&#xff0c;其有以下有点&#xff1a; 声明式的编程风格&#xff1a;直接匿名定义目标函数或函数对象&#xff0c;不需要额外写一个命名函数或函数对象。简洁&#xff1a;避免了代码膨胀和功能分散&#xff0c;让开发更加高效。在需要的时间和地点…

Sentieon应用教程 | 唯一分子标识符(UMI)

介绍 本文介绍了使用Sentieon工具处理下一代测序数据的方法&#xff0c;同时利用分子条码信息&#xff08;也称为唯一分子索引或UMI&#xff09;。分子条码可以在测序之前在模板DNA分子的末端引入唯一标签&#xff0c;从而大大减少PCR重复和测序错误对变异调用过程的影响。 S…

影视迷必备:揭秘高效影视app开发幕后

影视迷必备的高效影视APP开发幕后涉及多个关键环节&#xff0c;从需求分析、规划设计、技术开发到测试上线&#xff0c;再到后续的运营与维护&#xff0c;每一个环节都至关重要。 一、需求分析 在开发影视APP之前&#xff0c;首要任务是进行深入的需求分析。这一阶段的主要目标…

CSS选择器(1)

以内部样式表编写CSS选择器&#xff0c;其主要编写在<head></head>元素里&#xff0c;通过<style></style>标签来定义内部样式表。 基本语法为&#xff1a; 选择器{ 声明块 } 声明块&#xff1a;是由一对大括号括起来&#xff0c;声明块中是一个一个的…

python-矩阵加法(赛氪OJ)

[题目描述] 输入两个 n 行 m 列的矩阵 A 和 B &#xff0c;输出它们的和 AB。矩阵加法的规则是两个矩阵中对应位置的值进行加和&#xff0c;具体参照样例。输入&#xff1a; 输入共 2⋅n1 行&#xff0c;第一行包含两个整数 n 和 m&#xff0c;表示矩阵的行数和列数 (1≤n,m≤1…