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 在同一个网络中,资料通过二层数据链路层来传输。
- 集群服务就重新封装数据包。修改源MAC地址为Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,之后将数据包发送给 Real Server。就是内核空间判断数据包的目标IP是本机 VIP,此时 IPVS 比对数据包请求的服务是否是集群服务,
- 到达 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> mtu1500
- inet 192.168.10.101netmask255.255.255.0broadcast192.168.10.255
- inet6 fe80::20c:29ff:fe14:7990prefixlen64scopeid0x20<link>
- ether 00:0c:29:14:79:90txqueuelen1000(Ethernet)
- RX packets56161 bytes 78551237 (74.9 MiB)
- RX errors0dropped0overruns0 frame 0
- TX packets6659 bytes 546400 (533.5 KiB)
- TX errors0dropped0overruns0carrier0collisions0
-
- ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu1500
- inet 192.168.10.172netmask255.255.255.0broadcast192.168.10.255
- ether 00:0c:29:14:79:90txqueuelen1000(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 add192.168.10.172/32dev lo label lo:0
- ip route add local192.168.10.172/32dev 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
浙公网安备 33010602011771号