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
相关推荐
书生执笔画浮沉4 分钟前
rpmrebuild
linux·centos·rpm
志栋智能1 小时前
超自动化巡检:驱动运维团队从操作走向优化
运维·服务器·自动化
乌托邦的逃亡者1 小时前
Dockerfile的配置和使用
linux·运维·docker·容器
小此方1 小时前
Re:Linux系统篇(三)指令篇 · 二:十二个高频指令精讲+重定向操作+“一切皆文件“深入理解
linux·运维·服务器
十五年专注C++开发2 小时前
MobaXterm:Windows 远程工作全能工具箱
linux·windows·mobaxterm
wohehe2 小时前
Android项目工程化-Github Actions
linux·github
REDcker3 小时前
Linux disown命令详解 后台作业脱管与终端退出
linux·运维·chrome
cyber_两只龙宝3 小时前
【Oracle】Oracle之SQL的转换函数和条件表达式
linux·运维·数据库·sql·云原生·oracle
被摘下的星星3 小时前
四层模型TCP/IP协议栈
运维·服务器·网络
努力努力再努力wz3 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python