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

cpp 复制代码
​
[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

​

重载网卡信息

cpp 复制代码
[root@localhost network-scripts]# nmcli c reload		#重载
[root@localhost network-scripts]# nmcli c up ens33

查看是否生效

cpp 复制代码
[root@localhost ~]# ifconfig    #查看是否生效
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.101  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 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 0
        TX packets 6659  bytes 546400 (533.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.172  netmask 255.255.255.0  broadcast 192.168.10.255
        ether 00:0c:29:14:79:90  txqueuelen 1000  (Ethernet)

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

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

添加虚拟服务器

cpp 复制代码
[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

cpp 复制代码
[root@localhost ~]# dnf -y install httpd

关闭防火墙及系统内核

cpp 复制代码
[root@localhost ~]# systemctl stop firewalld			#关闭防火墙
[root@localhost ~]# setenforce 0				#关闭内核

配置网站内容

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

启动httpd服务

cpp 复制代码
[root@localhost ~]# systemctl satart httpd			#启动httpd

配置回环口ip

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

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

cpp 复制代码
[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		#给执行权限

修改配置文件

cpp 复制代码
[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

cpp 复制代码
[root@bogon ~]# curl 192.168.10.172
333333
[root@bogon ~]# curl 192.168.10.172
333333
[root@bogon ~]# curl 192.168.10.172
2222222
相关推荐
豆是浪个3 小时前
Linux(Centos 7.6)命令详解:usermod
linux·运维·centos
极地星光4 小时前
网络检测:Linux下实时获取WiFi与热点状态
linux·网络
189228048615 小时前
NW728NW733美光固态闪存NW745NW746
大数据·服务器·网络·人工智能·性能优化
我是苏苏7 小时前
Edge浏览器:报告不安全的站点的解决方案
服务器
还是奇怪7 小时前
Linux - 安全排查 3
android·linux·安全
NUZGNAW7 小时前
VMware安装Centos 7
linux·运维·centos
Another Iso7 小时前
CentOs 7 MySql8.0.23之前的版本主从复制
linux·mysql·centos
A7bert7777 小时前
【YOLOv8-obb部署至RK3588】模型训练→转换RKNN→开发板部署
linux·c++·人工智能·python·yolo
筑梦之路8 小时前
linux 系统找出磁盘IO占用元凶 —— 筑梦之路
linux·运维·服务器
步、步、为营9 小时前
.net服务器Kestrel 与反向代理
运维·服务器·.net