LVS -DR
目录
LVS—DR集群
请求与响应流程
数据包流向分析
特点与优势
LVS-DR模式特点
典型应用场景
路由模式(LVS—DR)
LVS—DR集群
LVS(Linux Virtual Server)的DR(Direct Routing,直接路由)模式是一种高性能的负载均衡技术,其核心原理是通过修改数据包的MAC地址实现请求分发,同时让后端服务器直接响应客户端,避免响应流量经过负载均衡器。
请求与响应流程
- 请求路径:
- 客户端发送请求到VIP,数据包到达负载均衡器。
- 负载均衡器根据调度算法选择后端服务器,修改数据包的目标MAC地址为后端服务器的MAC地址,但源IP和目标IP(VIP)保持不变。
- 修改后的数据包通过二层网络(数据链路层)直接转发到后端服务器。
- 响应路径:
- 后端服务器接收到请求后,发现目标IP(VIP)与本地配置的VIP匹配,处理请求并生成响应。
- 后端服务器直接将响应报文发送给客户端,源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