LVS -DR

news2024/12/23 20:23:05

一、DR模式数据包流向分析

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

2.Director Server(负载均衡器)和 Real Server(节点服务器)在同一个网络中,数据通过二层数据链路层(MAC地址)传输。

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

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

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

二、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 上的 lo 接口配置VIP的IP地址。

三、DR模式中需要解决的问题

问题1

        在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。

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

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

解决方式

        对节点服务器进行处理,使其不响应针对VIP的ARP请求。

        使用虚接口lo:0承载VIP地址,设置内核参数arp_ignore=1:系统只响应目的IP为本地lP的ARP请求。

问题2

        Real Server返回报文(源IP是VIP)经网关路由器转发,重新封装报文时,需要先获取路由器的MAC地址。

        发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址

解决方式

        使用Real Server 的物理网卡地址(即RIP)作为响应报文的IP,这样就不会导致网关服务器的ARP缓存表的紊乱。

         设置内核参数arp_announce=2 使系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。

总结

       vim /etc/sysctl.conf
        #使linux系统只响应目的地址为本地物理网卡IP的ARP请求
        net.ipv4.conf.lo.arp_ignore = 1
        net.ipv4.conf.all.arp_ignore = 1
        #使linux系统不使用数据包的源IP来作为ARP请求报文的源IP,而使用发送接口的IP地址作为ARP请求报文的源IP
        net.ipv4.conf.lo.arp_announce = 2
        net.ipv4.conf.all.arp_announce = 2

 

四、LVS-DR部署实例

Web 服务器1:192.168.116.10(VIP 192.168.116.100)

Web 服务器2:192.168.116.20(VIP 192.168.116.100)

NFS 共享存储器:192.168.116.30

LVS 负载调度器:192.168.116.40

网关/路由器:192.168.116.2

客户端:192.168.116.50
 

1.配置NFS共享存储器

systemctl stop firewalld.service               #关闭防火墙
setenforce 0                                            #关闭安全机制
 
yum -y install nfs-utils rpcbind             #安装服务
mkdir /opt/nfs/server1 /opt/nfs/server2                    #创建共享挂载目录
chmod -R 777 /opt/nfs                                                      #赋权
 
vim /etc/exports                                            #修改nfs发布策略
/opt/nfs 192.168.116.0/24(rw,sync)
/opt/nfs/server1 192.168.116.0/24(rw,sync)
/opt/nfs/server2 192.168.116.0/24(rw,sync)
 
systemctl restart rpcbind.service                   #开启服务
systemctl restart nfs.service                         

检查发布的共享策略

 分别在共享目录中添加web测试页面(两个可以有所区别)

 2.配置节点web服务(两台的配置相同)

配置好ip地址,并将网关指定为网关/路由器的ip地址

安装nginx提供web服务(apache、nginx等均可,仅用于实验)

将共享目录挂载到服务器的网页目录下

 查看是否共享成功

添加回环网卡虚拟ip 

cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0      
 
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.116.100
NETMASK=255.255.255.255
ONBOOT=yes
 
ifup lo:0

添加静态路由(将数据包封锁在回环网卡中)

#临时配置
route add -host 192.168.116.100 dev lo:0
 
#永久配置
vim /etc/rc.local
/sbin/route add -host 192.168.116.100 dev lo:0
chmod +x /etc/rc.d/rc.local 

调整内核的ARP响应参数(阻止更新VIP的MAC地址,避免发生冲突)

vim /etc/sysctl.conf
#添加
net.ipv4.conf.lo.arp_ignore = 1        
net.ipv4.conf.lo.arp_announce = 2    
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
#加载配置
sysctl -p

3.配置LVS负载调度器

配置虚拟ip

vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.116.100
NETMASK=255.255.255.255
 
 
#启用网卡配置
ifup ens33:0

调整 proc 响应参数

#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。
vim /etc/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
 
#启用配置
sysctl -p

启用ip_vs,下载并开启ipvsadm管理工具

modprobe ip_vs
 
yum install -y ipvsadm.x86_64 
 
#添加系统管理服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service 

配置负载分配策略

#指定监听服务器虚拟ip的80端口,算法为轮询
ipvsadm -A -t 192.168.116.100:80 -s rr
 
#指定节点服务器 -t 指定虚拟ip -r 指定真实ip,-g 代表使用DR模式
ipvsadm -a -t 192.168.116.100:80 -r 192.168.116.10 -g
ipvsadm -a -t 192.168.116.100:80 -r 192.168.116.20 -g
 
#添加为默认策略
ipvsadm-save > /etc/sysconfig/ipvsadm

使用客户端访问测试(访问虚拟ip地址,刷新出多个页面代表不同节点服务器处理)

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

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

相关文章

【猿灰灰赠书活动 - 06期】- 【计算机考研书单——408专属】

👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨‍💻本文简述:博文为大家争取福利,与机械工业出版社合作进行送书活动 👨‍&#x1f…

【软件测试】设计优秀的测试用例

前言 我从来没有好好的写过一个测试用例,之前做开发虽然写单元测试和流程测试,基本上都是基于自己的代码,而且单元测试和流程测试的框和规范已经非常完善,你只需要填空就行,后来转做自动化测试,但我的做事…

Python入门教程 | Python 函数与参数

函数简介 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这…

【数据结构】 Map和Set详解

文章目录 &#x1f340;Map与Set的概念及场景&#x1f333;Map与Set模型介绍&#x1f3a8;Map 的使用&#x1f4cc;Map说明&#x1f4cc;Map.Entry<K, V>的说明&#x1f4cc;Map 的常用方法说明&#x1f6a8;注意事项&#x1f6a9;TreeSet的使用 &#x1f38b;Set 的说明…

无涯教程-JavaScript - IPMT函数

描述 IPMT函数根据定期,固定的还款额和固定的利率返回给定投资期限内的利息支付。 语法 IPMT (rate, per, nper, pv, [fv], [type])争论 Argument描述Required/OptionalRateThe interest rate per period.RequiredPerThe period for which you want to find the interest a…

Linux安装Redis(详细教程)

Linux安装Redis 注&#xff1a;希望将redis安装到此目录 /usr/local/redis 希望将安装包下载到此目录 /usr/local/src 可自己选择 1.创建安装目录/usr/local/redis mkdir /usr/local/redis 2.进入安装包目录 cd /usr/local/redis 3.进行下载安装包 wget https://download…

多重数据保障,数据安全可靠!移动云云数据库 my SQL成为多行业“守护者”

投入高、周期长、不灵活、持续运维压力大、既费时又耗钱&#xff0e;&#xff0e;&#xff0e;&#xff0e;&#xff0e;传统自建数据库基于传统开发模式的限制&#xff0c;存在很多使用的痛点和不足。而移动云的云数据库mySQL&#xff0c;可以说通过自己的优势一一击破了这些使…

uniapp-地区的四级联动

本来填写订单的页面选地址是三级联动的 但是由于领导的要求&#xff0c;需要改成四级联动 解决思路 最开始用的是官方的 picker , 所以我去翻看了uniapp 的官网 我们需要用到的是多列模式 解决步骤 1. 先封装对应的请求 /*** 获取省市县街道的列表*/ export const getA…

电脑和手机查看ip地址

文章目录 看电脑 ip 地址查看手机 ip 地址浏览器访问网址获取ip&#xff08;电脑和手机都能用&#xff09; 看电脑 ip 地址 【方法一】 1、电脑右下角找到连接的网络 2、拉到最下面属性即可看到 IP 地址 在这里插入图片描述 【方法二】 1、Win R 然后输入 cmd 打开命令行 …

Springboot后端跨域处理

跨域 当一台服务器资源从另一台服务器&#xff08;不同的域名或者端口&#xff09;请求一个资源或者接口&#xff0c;就会发起一个跨域HTTP请求。 同源&#xff1a;协议、域名、端口都相同 只要一个不同&#xff0c;就是跨域。 例子 请求方响应方是否跨域原因http://www.ba…

BIO NIO AIO演变

Netty是一个提供异步事件驱动的网络应用框架&#xff0c;用以快速开发高性能、高可靠的网络服务器和客户端程序。Netty简化了网络程序的开发&#xff0c;是很多框架和公司都在使用的技术。 Netty并非横空出世&#xff0c;它是在BIO&#xff0c;NIO&#xff0c;AIO演变中的产物…

R语言分析糖尿病数据:多元线性模型、MANOVA、决策树、典型判别分析、HE图、Box's M检验可视化...

全文链接&#xff1a;https://tecdat.cn/?p33609 Reaven和Miller&#xff08;1979&#xff09;研究了145名非肥胖成年人的葡萄糖耐量和胰岛素血液化学指标之间的关系。他们使用斯坦福线性加速器中心的PRIM9系统将数据可视化为3D&#xff0c;并发现了一个奇特的图案&#xff0c…

Golang教程与Gin教程合集,入门到实战

GolangGin框架GormRbac微服务仿小米商城项目实战视频教程Docker Swarm K8s云原生分布式部署 介绍&#xff1a; Go即Golang&#xff0c;是Google公司2009年11月正式对外公开的一门编程语言&#xff0c;它不仅拥有静态编译语言的安全和高性能&#xff0c;而 且又达到了动态语言开…

将linux上的文件/文件夹下载到本地

要进行此操作 你的电脑需要有 ssh 如果没有安装 可以参考我的文章 windows系统安装SSH 其实非常简单 但您需要知道自己的文件在哪个路径下 如果不知道 例如 我知道我想下的文件叫 dist 可我不知道他在那个目录 我们可以在服务器中输入 find / -name "dist"这样 所有…

treeview形式的checkbox(wpf、c#)

如何实现treeview形式的checkbox&#xff0c;并且父节点和子节点的选中状态可相互影响。示例图&#xff1a; 代码如下&#xff1a; wpf代码&#xff1a;treeview绑定的数据是PermissionDataCollection。 <TreeView ItemsSource"{Binding PermissionDataCollection}…

只需3步,用华为云CodeArts快速搭建一个网上商城

华为云软件开发生产线CodeArts是面向开发者提供的一站式云端DevSecOps平台&#xff0c;其提供的10多个子服务覆盖了需求下发、代码提交、代码检查、代码编译、验证、部署、发布等软件交付全生命周期环节&#xff0c;提供软件研发流程的端到端支持。 华为端到端&#xff08;HE2…

ANIMALS FULL PACK (总共三十个动物)

资源包的动物包含&#xff1a;熊、野猪、鸡、牛、乌鸦、鸭子、大象、狐狸、金鹰、大雕鸮、山羊、猪、鸽子、兔子、海鸥、绵羊、麻雀、雄鹿、母鹿、狼、大象、犀牛、斑马、雄狮和母狮。此外还有一些水里的动物鲸、海豚、鲨鱼、海龟 资源链接在底部 Unity 资源商店链接 资源下载…

LLM - 批量加载 dataset 并合并

目录 一.引言 二.Dataset 生成 1.数据样式 2.批量加载 ◆ 主函数调用 ◆ 基础变量定义 ◆ 多数据集加载 3.数据集合并 ◆ Concat ◆ interleave ◆ stopping_strategy ◆ interleave_probs 三.总结 一.引言 LLM 模型基于 transformer 进行训练&#xff0c;需要先…

双token实现无感刷新

accessToken:用户获取数据权限refreshToken:用来获取新的accessToken 双 token 验证机制&#xff0c;其中 accessToken 过期时间较短&#xff0c;refreshToken 过期时间较长。当 accessToken 过期后&#xff0c;使用 refreshToken 去请求新的 token。 引入依赖 <!-- …

多版本CUDA安装切换

系统中默认的安装CUDA为12.0&#xff0c;现在需要在个人用户下安装CUDA11.7。 CUDA 下载 CUDA官网下载 安装 Log file not open.Segmentation fault (core dumped)错误 将/tmp/cuda-installer.log删除即可。重新安装&#xff0c;去掉驱动的安装&#xff0c;设置Toolkit的安装…