当前位置: 首页 > news >正文

LVS -DR

目录

LVS—DR集群

请求与响应流程

数据包流向分析

特点与优势

LVS-DR模式特点

典型应用场景

路由模式(LVS—DR)


LVS—DR集群

LVS(Linux Virtual Server)的DR(Direct Routing,直接路由)模式是一种高性能的负载均衡技术,其核心原理是通过修改数据包的MAC地址实现请求分发,同时让后端服务器直接响应客户端,避免响应流量经过负载均衡器。

请求与响应流程

  • 请求路径
    1. 客户端发送请求到VIP,数据包到达负载均衡器。
    2. 负载均衡器根据调度算法选择后端服务器,修改数据包的目标MAC地址为后端服务器的MAC地址,但源IP和目标IP(VIP)保持不变
    3. 修改后的数据包通过二层网络(数据链路层)直接转发到后端服务器。
  • 响应路径
    1. 后端服务器接收到请求后,发现目标IP(VIP)与本地配置的VIP匹配,处理请求并生成响应。
    2. 后端服务器直接将响应报文发送给客户端,源IP为VIP,目标IP为客户端IP,响应报文绕过负载均衡器。

数据包流向分析

  • 客户端发送请求到 Director Server,请求的数据报文(源 IP是 CIP,目标IP 是 VIP)到达内核空间。
  • Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
  • 内核空间判断数据包的目标IP是本机 VIP,此时 IPVS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源MAC地址为Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。
  • 到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标IP为 CIP),将响应报文通过 10 接口传送给物理网卡然后向外发出。
  • Real Server 直接将响应报文传送到客户端。

特点与优势

  • 高性能
    响应流量不经过负载均衡器,显著减轻其压力,适用于高并发、低延迟场景。
  • 网络要求
    负载均衡器和后端服务器必须在同一局域网(二层网络),因为DR模式通过修改MAC地址实现转发。
  • 不支持端口映射
    后端服务器需直接监听VIP对应的端口,无法修改端口号。
  • 无需开启IP转发
    后端服务器无需配置IP转发功能(ip_forward=0)。

LVS-DR模式特点

  • Director Server 和 Real Server 必须在同一个物理网络中。
  • Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
  • 所有的请求报文经由 Director Server,但回复响应报文不能经过 DirectorServer.
  • Real Server 的网关不允许指向 Director Server IP,即不允许数据包经寸 Director Server.
  • Real Server 上的 1o 接口配置 VIP 的 IP 地址。

典型应用场景

  • Web服务
    如Nginx、Apache等,通过DR模式实现高并发访问的负载均衡。
  • 数据库服务
    对延迟敏感的数据库集群,可通过DR模式优化响应速度。
  • 大规模集群
    支持上百台后端服务器,适合大型互联网应用。

路由模式(LVS—DR)

案例环境:

一台调度器、两台WEB服务器、一台客户端

调度器设置VIP

​
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0    将33网卡配置信息复制出来
[root@localhost network-scripts]# vim ifcfg-ens33:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.172		#设置VIP
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens33:0			#修改名称
DEVICE=ens33:0			#同上
ONBOOT=yes​

重载网卡信息

[root@localhost network-scripts]# nmcli c reload		#重载
[root@localhost network-scripts]# nmcli c up ens33

查看是否生效 

[root@localhost ~]# ifconfig    #查看是否生效
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.10.101  netmask 255.255.255.0  broadcast 192.168.10.255inet6 fe80::20c:29ff:fe14:7990  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:14:79:90  txqueuelen 1000  (Ethernet)RX packets 56161  bytes 78551237 (74.9 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 6659  bytes 546400 (533.5 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.10.172  netmask 255.255.255.0  broadcast 192.168.10.255ether 00:0c:29:14:79:90  txqueuelen 1000  (Ethernet)

 下载ipvsadm并关闭防火墙及内核

[root@localhost ~]# dnf -y install ipvsadm
[root@localhost ~]# systemctl stop firewalld		#关闭防火墙
[root@localhost ~]# setenforce 0			#关闭系统内核

添加虚拟服务器

[root@localhost ~]# ipvsadm -A -t 192.168.10.172:80 -s wrr	#添加虚拟服务器
[root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1	#添加真实服务器
[root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 2	#同上
[root@localhost ~]# ipvsadm -ln			#查看规则

配置两台Web服务

配置内容都一样只有网站内容不同

下载httpd

[root@localhost ~]# dnf -y install httpd

关闭防火墙及系统内核

[root@localhost ~]# systemctl stop firewalld			#关闭防火墙
[root@localhost ~]# setenforce 0				#关闭内核

配置网站内容

[root@localhost ~]# echo "2222222">/var/www/html/index.html	#02网站内容
[root@localhost ~]# echo "333333">/var/www/html/index.html	#03网站内容

启动httpd服务

[root@localhost ~]# systemctl satart httpd			#启动httpd

配置回环口ip

[root@localhost ~]# ip addr add 192.168.10.172/32 dev lo label lo:0	#回环口ip

修改配置文件让系统开机自行运行命令

[root@bogon ~]# vim /etc/rc.local		
ip addr add 192.168.10.172/32 dev lo label lo:0
ip route add local 192.168.10.172/32 dev lo
[root@bogon ~]# chmod +x /etc/rc.local		#给执行权限

修改配置文件

[root@bogon ~]# 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

如果不生效就重启

reboot

05访问VIP

[root@bogon ~]# curl 192.168.10.172
333333
[root@bogon ~]# curl 192.168.10.172
333333
[root@bogon ~]# curl 192.168.10.172
2222222

http://www.xdnf.cn/news/694477.html

相关文章:

  • 每日算法 -【Swift 算法】正则表达式匹配:支持 `.` 和 `*`
  • 如何设计高效的数据湖架构:存储策略、Schema 演进与数据生命周期管理
  • 基于51单片机的音乐盒汽车喇叭调音量proteus仿真
  • 基于Doc2Vec的Markdown文档分类实战:从预处理到模型评估
  • 部署swagger接口文档到云服务器
  • ZooKeeper 命令操作
  • Gin项目脚手架与标配组件
  • 网络协议DHCP
  • YOLO 系列算法的参数量
  • Java大师成长计划之第33天:应用监控与日志管理
  • 顺序表与链表专项训练:在 LeetCode 实战中深化数据结构理解
  • 力扣 秋招 打卡第一天 2025年5月28日 Java
  • Vim 中设置插入模式下输入中文
  • 考研系列-操作系统:第一章、计算机系统概述
  • freecad TechDraw工作台中虚线(隐藏线)的实现方式
  • 桥梁进行3D建模时的数据采集、存储需求及技术参数
  • 监控 Oracle Cloud 负载均衡器:使用 Applications Manager 释放最佳性能
  • android平台驱动开发(六)--Makefile和Kconfig简介
  • vue 实现鼠标放上后显示,挪开后隐藏(点击显示/隐藏)
  • 【微波遥感第一期】基本概念
  • OpenCV CUDA模块直方图计算------在 GPU 上计算图像直方图的函数calcHist()
  • 在部署了一台mysql5.7的机器上部署mysql8.0.35
  • QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(七)修改item属性
  • Golang分布式系统开发实践指南
  • GO语言进阶:掌握进程OS操作与高效编码数据转换
  • 命象架构法 02|你的系统有“用神”吗?
  • [Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译
  • Java常用加密方式
  • 聊一聊如何使用自动化测试来提高接口测试效率的?
  • PowerBI企业运营分析—绩效考核分析