LVS-DR模式部署

news2024/12/23 11:11:34

目录

一、环境准备

1、DR模式介绍

2、DR模式工作原理

3、服务器准备

二、实验拓扑

三、配置网络环境

1、配置调度器网络环境

 2、配置Web服务器网络环境

四、创建LVS-DR集群

1、创建LVS集群

2、添加Real Server

3、查看lvs配置

五、LVS服务器开启路由转发

六、效果测试

1、准备Web服务

2、客户端测试

七、疑问思考


一、环境准备

1、DR模式介绍

(1)与Nginx负载均衡区别

        相比于nginx只能用于7层负载均衡,LVS就比较强大了,能在4层做负载均衡。而且性能和稳定性上LVS也比较占优,LVS是合入内核模块,相比Nginx更加稳定。

(2)LVS DR与LVS NAT区别

        NAT模式和DR模式的区别 两种模式都是实现负载均衡lvs的方法,NAT模式在包进入的时候在分发器上做了目的地址的mac转换,也就是DNAT,包回去的时候从哪进来的也要从哪里出去,这就造成了NAT模式在real server过多的时候造成了数据包在回去的时候都是从一个出口方向,也就造成了瓶颈。

DR模式在数据包进入的时候由分发器上把收到的数据包分派给架构下的real server来工作,而数据包在返回的时候没有经过分发器而直接发送给数据包的来源地址,这样就解决了数据包都从分发器上返回数据包的瓶颈,从而解决大量的用户访问。

2、DR模式工作原理

        客户端向目标VIP发送请求,负载均衡器接收,负载均衡器根据负载均衡算法选择后端真实服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为后端真实服务器的MAC地址,然后在局域网上发送后端真实服务器收到这个帧,解封装后发现目标IP与本机匹配(事先绑定VIP),于是处理这个报文。随后重新封装报文,将响应报文通过lo接口传送给物理网卡然后向外发出客户端将收到回复报文。客户端认为得到正常的服务,而不会知道是哪一台服务器处理的,如果跨网段,则报文通过路由器经由 internet 返回给用户。注意,DR模式不支持端口映射,RS和DS必须在同一网段Real Server上必须配置VIP地址,以便接收Director转发过来的数据包,以及作为响应报文的源IP,如果RS返回的报文内容里的Source IP不是VIP,Client端会将报文丢弃

3、服务器准备

主机主机名IP备注
客户端/192.168.2.5/24关闭selinux和firewalld
LVS服务器lvs

DIP:[ens33]:192.168.2.10/24

VIP:[ens33:0]:192.168.2.100/24

关闭selinux和firewalld
Web1服务器web1

RIP:[ens33]:192.168.2.20/24

VIP:[lo:0]:192.168.2.100/32

关闭selinux和firewalld
Web2服务器web2

RIP:[ens33]:192.168.2.30/24

VIP:[lo:0]:192.168.2.100/32

关闭selinux和firewalld

二、实验拓扑

 说明:

  • 客户端发送请求至VIP,也就是访问服务,请求报文源地址是CIP,目标地址为VIP;
  • LVS调度器接收到请求,报文在PREROUTING链检查,确定目的IP是本机,于是将报文发送至INPUT链,ipvs内核模块确定请求的服务是我们配置的LVS集群服务,然后根据用户设定的均衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址。因为调度器和后端服务器RS在同个网段,因此直接二层互通,将请求发给选择的RS处理;
  • 因为报文目的mac是本机,且RS上有配置VIP,因此RS能接收该报文。后端服务处理完请求后,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP。

三、配置网络环境

1、配置调度器网络环境

先将LVS服务器enss33网口IP配置为192.168.2.10,然后在ens33网口上再加一个IP,作为VIP,操作如下:

cp  /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0

vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
TYPE=Ethernet
BOOTPROTO="static"
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.2.100
PREFIX=24
systemctl restart network

 2、配置Web服务器网络环境

(web1和web2均做如下相同操作,都在lo回环地址上增加一个192.168.2.100 VIP)

(1)给lo回环网卡配置VIP

cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}

vim /etc/sysconfig/network-scripts/ifcfg-lo:0

(注意配置完不要立刻重启网络,不然同一网络出现相同IP会冲突)

DEVICE=lo:0
IPADDR=192.168.2.100
NETMASK=255.255.255.255
NETWORK=192.168.2.100
BROADCAST=192.168.2.100
ONBOOT=yes
NAME=lo:0

防止地址冲突:

vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1    #当有arp广播问谁是192.168.2.100时,本机忽略该ARP广播,不做任何回应
net.ipv4.conf.lo.arp_ignore = 1     
net.ipv4.conf.lo.arp_announce = 2   #本机不要向外宣告自己的lo回环地址是192.168.2.100
net.ipv4.conf.all.arp_announce = 2
sysctl -p  #生效配置
systemctl restart network

四、创建LVS-DR集群

1、创建LVS集群

ipvsadm -C   #清除历史ipvs配置

ipvsadm -A -t 192.168.2.100:80 -s rr   #这里的IP使用的是VIP

-A   添加虚拟服务器

-t    设置集群地址(VIP)

-s   指定负载调度算法

            rr表示轮询;

            wrr表示加权轮询;

            lc最小连接;

            wlc加权最小连接;

            sh源地址哈希

2、添加Real Server

ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.20:80 -g    #-g指DR模式,也是默认模式
ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.30:80 -g

3、查看lvs配置

ipvsadm -Ln

如上图,Route表示DR模式。 

五、LVS服务器开启路由转发

vim /etc/sysctl.conf  #新增内容如下
net.ipv4.ip_forward=1
sysctl -p  #生效

六、效果测试

1、准备Web服务

在web1和web2服务器分别搭建一个监听端口为80的web服务器,可以使用Nginx、tomcat等可以,并在html页面做好标识,以便测试效果:

Nginx安装、配置与概述_桂安俊@kylinOS的博客-CSDN博客

2、客户端测试

curl 192.168.2.100

注:如果使用客户端浏览器测试轮询,应使用火狐浏览器(ctrl+f5强制刷新),使用谷歌和360浏览器测试发现不会轮询,始终访问的一个IP。

七、疑问思考

问1:为什么所有RS上都要配置VIP?
答:因为当调度器把请求转发给对应RS时,并没有修改报文目的IP,因此请求报文目的IP仍为VIP,所以如果RS没有配置VIP,那么报文到达RS后就会被丢弃。

问2:为什么所有RS要设置arp_ignore=1和arp_announce=2,arp_ignore=1,只响应目的IP地址为接收网卡上的本地地址的arp请求?

答:因为我们在RS上都配置了VIP,因此此时是存在IP冲突的,当外部客户端向VIP发起请求时,会先发送arp请求,此时调度器和RS都会响应这个请求。如果某个RS响应了这个请求,则之后该客户端的请求就都发往该RS,并没有经过LVS,因此也就没有真正的负载均衡,LVS也就没有存在的意义。因此我们需要设置RS不响应对VIP的arp请求,这样外部客户端的所有对VIP的arp请求才会都解析到调度器上,然后经由LVS的调度器发往各个RS。

系统默认arp_ignore=0,表示响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。也就是说,如果机器上有两个网卡设备A和B,即使在A网卡上收到对B IP的arp请求,也会回应。而arp_ignore设置成1,则不会对B IP的arp请求进行回应。由于lo肯定不会对外通信,所以如果只有一个对外网口,其实只要设置这个对外网口即可,不过为了保险,很多时候都对all也进行设置。

arp_announce=2:网卡在发送arp请求时使用出口网卡IP作为源IP

当RS处理完请求,想要将响应发回给客户端,此时想要获取目的IP对应的目的MAC地址,那么就要发送arp请求。arp请求的目的IP就是想要获取MAC地址的IP,那arp请求的源IP呢?自然而然想到的是响应报文的源IP地址,但也不是一定是这样,arp请求的源IP是可以选择的,而arp_announce的作用正是控制这个地址如何选择。系统默认arp_announce=0,也就是源ip可以随意选择。这就会导致一个问题,如果发送arp请求时使用的是其他网口的IP,达到网络后,其他机器接收到这个请求就会更新这个IP的mac地址,而实际上并不该更新,因此为了避免arp表的混乱,我们需要将arp请求的源ip限制为出口网卡ip,因此需要设置arp_announce=2。

问3:为什么RS上的VIP要配置在lo上?
答:由上可知,只要RS上的VIP不响应arp请求就可以了,因此不一定要配置在lo上,也可以配置在其他网口。由于lo设备不会直接接收外部请求,因此只要设置机器上的出口网卡不响应非本网卡上的arp请求接口。但是如果VIP配置在其他网口上,除了上面的配置,还需要配置该网口不响应任何arp请求,也就是arp_ignore要设置为8。

问4:为什么RS上lo配置的VIP掩码为32位?
答:这是由于lo设备的特殊性导致, 如果lo绑定192.168.0.200/24,则该设备会响应该网段所有IP(192.168.0.1~192.168.0.254) 的请求,而不是只响应192.168.0.200这一个地址。

问5:为什么调度器与RS要在同一网段中?
答:根据DR模式的原理,调度器只修改请求报文的目的mac,也就是转发是在二层进行,因此调度器和RS需要在同一个网段,从而ip_forward也不需要开启。

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

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

相关文章

TCP四次挥手 2MSL TIME_WAIT详解

TCP四次挥手 & 2MSL & TIME_WAIT详解TCP四次挥手流程各状态解析2MSL(2倍最大报文段生成时间)2MSL (Maximum Segment Lifetime) TIME_WAIT状态的存在有两个理由该状态为什么设计在主动关闭这一方?如何正确对待2MSL TIME_WAIT?TCP四次挥手流程 【注意】只要是申请关闭连…

基于Open vSwitch的传统限速和SDN限速--实验

基于Open vSwitch的传统限速和SDN限速--实验基于Open vSwitch的传统限速和SDN限速--实验1.下载与安装1.1 安装Docker1.2 Open vSwitch的安装2.配置实验环境3.实验步骤3.1启动floodlight控制器3.2创建拓扑3.3网卡限速3.4队列限速3.5 Meter表限速4.三种方式数据对比5.实验分析6.总…

仿大众点评——秒杀系统部分03——RabbitMq措施

RabbitMq保证消息不丢失 RabbitMQ如何保证消息的可靠性: 1.从生产者到消息队列,congfirm模式(与事务相比confirm模式最大的优势是异步)通过消息确认机制来保证,通过给每个指派唯一标志,完成消费后返回ack确…

【LeetCode每日一题】——136.只出现一次的数字

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 136.只出现一次的数字 四【题目描述】 给你一个 非…

[附源码]SSM计算机毕业设计风景区管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

再学DataX

一、DataX简介 DataX官网文档:https://github.com/alibaba/DataX/blob/master/introduction.md DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同…

MyBatis基于XML的使用——动态sql

1、动态sql 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它 类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。 利用动态 SQL&#…

14服务-ClearDiagnosticlnformation

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍存储数据传输服务下的14服务ClearDiagnosticlnformation,客户端使用ClearDiagnosticlnformation服务清除一个或多个服务器存储器中的诊断信息。 关联文章:$19服务:DTCStatusMask和s…

CockroachDB-读和写

本文知识点来源于官网地址https://www.cockroachlabs.com/docs/stable/architecture/reads-and-writes-overview.html 查询执行 当CRDB执行查询时,集群将请求路由到包含相关数据的范围的Leaseholder。如果查询涉及多个范围,则请求将发送给多个Leasehol…

求实数的整数次幂(循环版)(高效)(位运算解题)

求实数的整数次幂(循环版)(高效) (10 分) 原理图: 请编写函数,用循环语句以最快的方法求任意实数的任意整数次幂。 函数原型 double Power(double x, int n); 说明:参数 x 为底数,n 为指数。若参数正确,则函数值为…

智能驾驶开启产业新赛道:资本扎堆布局车规级高精定位

2022年被称为高阶智能驾驶元年的背后,新的产业链正在悄然发展。 车规级高精定位便是其中之一。2022年10月,主业聚焦于动力总成测试的上海华依科技集团股份有限公司(以下简称“华依科技”,688071.SH),发布公…

漫画风格迁移神器 AnimeGANv2:快速生成你的漫画形象

生成你的漫画形象! 漫画风格迁移神器 AnimeGANv2 文章目录生成你的漫画形象! 漫画风格迁移神器 AnimeGANv2快速在线生成你的漫画形象AnimeGAN 简要介绍与其他动漫风格迁移模型的效果对比AnimeGANv2 的优点AnimeGANv2 风格多样化AnimeGANv2 网络结构快速生…

基于stm32单片机的水位检测自动抽水系统

资料编号:106 下面是相关功能视频演示: 106-基于stm32单片机的水位检测自动抽水系统Proteus仿真(源码仿真全套资料)功能介绍: 使用滑动变阻器模拟水位监测器,通过改变电压值表示水位的变化。stm32通过ADC…

【前端】从 0 到 1 实现一个网站框架(一、注册 [1] )

Hi~你好呀,等你很久啦~ 我是 LStar,一枚来自北京的初二女生,2020 年年初加入 CSDN。 话不多说,直入主题~(我现在看两年多前我 11 岁那会发的文章,越看越想笑。为了不让四年后 18 岁的我看着这篇文章露出 …

超详细的mysql多表操作教程

目录 外键约束 概念 特点 操作 多表联合查询 概念 操作 多表操作总结 外键约束 概念 特点 定义一个外键时,需要遵守下列规则: 主表必须已经存在于数据库中,或者是当前正在创建的表。 必须为主表定义主键。 主键不能包含空值&#xf…

967亿销售额!博世解码智能汽车新蓝图

随着新一轮科技革命和产业变革的深化,在低碳化、电动化和智能化的推动下,处于变革关键时期的新能源汽车产业,正逐步由“政策驱动”转向“市场驱动”,智能化、网联化成为新趋势。 据中国汽车工业协会统计,今年我国新能…

通过 Traefik Hub 暴露家里的网络服务

Traefik Hub 简介 📚️Reference: 你的云原生网络平台 -- 发布和加固你的容器从未如此简单。 Traefik Hub 为您在 Kubernetes 或其他容器平台上运行的服务提供一个网关。 Traefik Hub 定位: 云原生网络平台 它有 2 大核心功能,我这次体验感…

pytorch深度学习实战lesson23

第二十三课 AlexNet AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet. 其官方提供的数据模型,准确率达到57.1%,top 1-5…

认识计算机中的简单指令集

我们现在有了一个新的寄存器,叫做指令寄存器。它包含一个字节,不同的内容表示控制部分的不同操作模式。也被称为指令代码。指令寄存器是一个字节,因此可能有多达256条不同的指令。所有指令都涉及在总线上移动字节。指令将导致字节进出RAM&…

【JavaEE】PCB和进程调度的基本过程

文章目录什么是进程PCB的组成PID内存指针文件描述符表并行和并发进程调度相关属性进程的状态优先级上下文进程的记账信息什么是进程 进程是正在运行的程序的实例(an instance of a computer program that is being executed) 进程(process&am…