LVS-DR模式搭建负载均衡群集(群集)

devtools/2024/9/22 17:33:43/

一、LVS-DR集群概述

LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。

1、LVS-DR 工作原理

LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。

工作原理如下图所示:

2、LVS-DR数据包流量分析(同一局域网)

客户端向目标VIP发送请求,负载均衡器接收。

负载均衡器根据负载均衡算法选择后端真实服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为后端真实服务器的MAC地址,然后在局域网上发送

后端真实服务器收到这个帧,解封装后发现目标IP与本机匹配(事先绑定了VIP),于是处理这个报文。随后重新封装报文,将响应报文通过lo接口传送给物理网卡然后向外发出

客户端将收到回复报文。客户端认为得到正常的服务,而不会知道是哪一台服务器处理的

如果跨网段,则报文通过路由器经由 internet 返回给用户

3、LVS-DR中的ARP问题

问题一

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址,在局域网中具有相同的IP地址。势必会造成各服务器ARP通信的紊乱

当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播

只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。

问题二

问题说明:RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址,发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址,路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址。

路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效

解决方法:

对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

4、LVS-DR处理问题后的流量分析

客户端发送请求到Director server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

Director Server和Real server在同一个网络中,数据通过二层数据链路层来传输。

内核空间判断数据包的目标I是本机VIP,此时IPVS (IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源MAC地址为Director Server的MAC地址,修改目标MAC地址为Real Server的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server。

到达Real server的请求报文的MAC地址是自身的MAC地址,就接收此报文。数据包重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。

Real Server 直接将响应报文传送到客户端。

5、LVS-DR 特性

Director Server和Real Server必须在同一-个物理网络中。

Real Server可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。

Director Server作为群集的访问入口,但不作为网关使用。

所有的请求报文经由Director Server,但回复响应报文不能经过Director Server

Real Server的网关不允许指向Director Server IP,即Real Server发送的数据包不允许经过Director Server。

Real Server上的10接口配置VIP的IP地址。

实验图:针对同网段内的用户访问;(如果是真实环境,那么还有一个路由器设备;)

先为调度器101设置子接口;即VIP;

设置成vip的地址;

然后保存退出,重启网络查看;

修改该主机的内核配置文件;

再末尾添加以下语句;

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens33.send_redirects = 0

调整内核参数,禁止转发重定向报文。

由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭Linux 内核的重定向。

然后让该语句生效;

然后安装调度器所需的工具;

补充:lvs调度器是针对第四层的;传输层;

配置负载分配策略;

ipvsadm -v       

ipvsadm -C

ipvsadm -A -t 192.168.10.172:80 -s wrr

ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1

ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 2

ipvsadm-save

配置web节点服务器;此时就可以开启会话同步了,只针对102&&103;

然后设置VIP给lo网卡的子接口;

DR模式配置中有个关键点是将真实主机上的VIP配置在环回接口上,且掩码必须配置成4个255。

解释掩码为255.255.255.255;即192.168.10.172/32;该地址充当了多重角色;网端是192.168.10.172;主机也是192.168.10.172;广播地址也是192.168.10.172;

然后重启网络;查看;

添加路由条目;因为接收是有真实IP地址192.168.10.102接受的,那么就要路由到192.168.10.172vip地址;

因为此语句是临时生效的,需要写入到文件中实现永久生效;

vim /etc/rc.local

将语句写入即可;

调整web服务器的内核参数;

vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

让语句直接生效;sysctl -p

安装web服务;

然后分别写网页文件;取消会话同步功能;

102:

103:

然后将两个web服务启动起来;

用客户端进行一个简单的测试;

补充:因为lvs没有健康检查的功能所以;此时节点中的任何一个服务器宕机;那么就会显示以下情况;

那么就要手动把该节点从lvs集群中移除掉;

以下语句作为参考;

ipvsadm -d -t 192.168.10.172:80 -r 192.168.10.102

搭建nfs服务器;105

然后两个web服务器也安装nfs-utils

编辑nfs服务器的配置文件;

首先创建共享目录;

然后进入到两个web服务器进行挂载共享目录;

102同理;

再回到nfs服务器在共享目录下创建测试文件;

再用客户端进行测试;

此时可能会有疑问,就是原来的网页文件去哪里了?

因为挂载了共享目录到首页文件的站点目录下,这时的文件就被盖住了,而不是覆盖了,也不是删除了;如果取消挂载就会再次显形;

先取消挂载然后再进入到站点目录下查看,原来的文件就显形了;


http://www.ppmy.cn/devtools/90405.html

相关文章

mysql的 undo log、redo log、bin log、buffer pool

文章目录 Buffer Pool为什么需要Buffer PoolBuffer Pool 缓存了什么 Redo log为什么需要 redo log?redo log 什么时候刷盘?redo log 文件写满了怎么办? undo log 本文章内容都来自小林coding博主,基于他的文章内容,加一…

【RabbitMQ】fanout概述_direct概述_topic概述

一、Fanout概述 定义与特点: Fanout交换机是RabbitMQ中最简单的一种交换机类型,它实现了发布/订阅(Publish/Subscribe)的消息传递模式。在这种模式下,Fanout交换机会将所有接收到的消息广播给所有与之绑定的队列&…

[Git][标签管理]详细讲解

目录 1.理解标签2.创建标签3.操作标签 1.理解标签 标签tag,可以简单的理解为是对某次commit的⼀个标识,相当于起了⼀个别名标签的意义:相较于难以记住的commit id,tag很好的解决了这个问题 因为tag⼀定要给⼀个让⼈容易记住&…

C# winform自定义控件

自定义控件最好单独占一个项目,方便后期扩展和其他项目使用。 1、为控件添加属性 [Category("自定义属性"), Description("图像高度")] public double ImageHeight { get; set; }[Category("自定义属性"), Description("图像宽…

Java编程常见问题解析与代码示例

在Java编程的世界中,我们经常会遇到一些基础但至关重要的问题。本文将探讨一些Java面试中的常见问题,并提供相应的代码示例,以帮助您更好地理解和掌握这些知识点。 1. Java I/O中的Files类常用方法 Java NIO包中的Files类提供了丰富的文件操…

EHS信息化管理系统:筑牢企业EHS安全环保的数字防线

在当今这个快速发展的时代,企业的运营不仅关乎经济效益,更与环境保护、员工健康及安全(Environment, Health, and Safety, 简称EHS)紧密相连。随着信息技术的飞速进步,EHS信息化管理已成为企业提升管理水平、保障可持续…

分享一个基于Node.js和Vue的游戏点单陪玩系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

【c++】爬虫到底违不违法?

很多小伙伴都想知道爬虫到底违法吗,今天博主就给大家科普一下 爬虫本身并不违法,但使用爬虫采集数据可能涉及违法风险,具体取决于采集行为是否侵犯了他人的合法权益,尤其是隐私权和个人信息权。以下是对爬虫是否违法的详细分析&am…