LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式
LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,DirectorServer 与 Real Server 都需要配置 VIP 地址
以下为数据包流向分析步骤
(1)客户端发送请求到 Director Server,请求的数据报文(源 IP是 CIP,目标IP是VIP) 到达内核空间
(2)Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输
(3)内核空间判断数据包的目标IP是本机 VIP,此时 IPVS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源MAC地址为Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源IP地址与目标 IP地址没有改变,然后将数据包发送给Real Server
(4)到达Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源IP地址为 VIP,目标IP为CIP),将响应报文通过 10 接口传送给物理网卡然后向外发出
(5)Real Server 直接将响应报文传送到客户端
下面是 LVS-DR 模式的特点:
在 DR 模式的群集中,LVS 负载调度器作为群集的访问入口,但不作为网关使用;服务器池中的所有节点都各自接入 Internet,发送给客户机的 Web 响应数据包不需要经过 LVS 负载调度器
这种方式入站、出站访问数据被分别处理,因此LVS负载调度器和所有的节点服务器都需要配置 VIP 地址,以便响应对整个群集的访问。考虑到数据存储的安全性,共享存储设备会放在内部的专用网络中
采用虚接口的方式(ens160∶0),为网卡ens160 绑定 VIP 地址,以便响应群集访问。配置结果为 ens160192.168.10.101/24、ens160:0 192.168.10.105/24
[root@bogon ~]# cd /etc/sysconfig/network-scripts/
[root@bogon network-scripts]# ls
ifcfg-ens160 ifcfg-ens160:0
[root@bogon network-scripts]# vim ifcfg-ens160:0
[root@bogon network-scripts]# nmcli c reload
[root@bogon network-scripts]# nmcli c up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
[root@bogon network-scripts]# ifconfig
ens160: 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:fe38:b782 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:38:b7:82 txqueuelen 1000 (Ethernet)
RX packets 68320 bytes 87553782 (83.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32716 bytes 2671969 (2.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.105 netmask 255.255.255.0 broadcast 192.168.10.255
ether 00:0c:29:38:b7:82 txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2944 bytes 216078 (211.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2944 bytes 216078 (211.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
对于 DR 群集模式来说,由于LVS 负载调度器和各节点需要共用 VIP 地址应该关闭 Linux 内核的重定向参数响应
配置负载分配策略配置负载分配策略的命令如下:
[root@bogon ~]# ipvsadm -C
[root@bogon ~]# ipvsadm -A -t 192.168.10.105:80 -s wrr
[root@bogon ~]# ipvsadm -a -t 192.168.10.105:80 -r 192.168.10.102 -g 2
unexpected argument 2
[root@bogon ~]# ipvsadm -a -t 192.168.10.105:80 -r 192.168.10.102 -g -w 2
[root@bogon ~]# ipvsadm -a -t 192.168.10.105:80 -r 192.168.10.103 -g -w 1
[root@bogon ~]# ipvsadm-save
-A -t bogon:http -s wrr
-a -t bogon:http -r bogon:http -g -w 2
-a -t bogon:http -r bogon:http -g -w 1
[root@bogon ~]# ipvsadm-save -n
-A -t 192.168.10.105:80 -s wrr
-a -t 192.168.10.105:80 -r 192.168.10.102:80 -g -w 2
-a -t 192.168.10.105:80 -r 192.168.10.103:80 -g -w 1
使用 DR 模式时,节点服务器也需要配置 VIP 地址,并调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突。除此以外,Web 服务的配置与 NAT 方式类似
在每个节点服务器,同样需要具有 VIP 地址 192.168.10.100,但此地址仅用作发送 Web 响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口10∶0来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱
[root@bogon ~]# ip route add local 192.168.10.105/32 dev lo
RTNETLINK answers: File exists
[root@bogon ~]# ip route add local 192.168.10.105/32 dev lo:
RTNETLINK answers: File exists
[root@bogon ~]# vim /etc/rc.local
[root@localhost ~]# vi /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
[root@bogon ~]# dnf -y install httpd
Last metadata expiration check: 0:24:52 ago on 2025年06月16日
Dependencies resolved.
============================================================
Package Architecture Version
============================================================
Installing:
httpd x86_64 2.4.58-9.oe2403sp1
Installing dependencies:
apr x86_64 1.7.4-4.oe2403sp1
apr-util x86_64 1.6.3-2.oe2403sp1
httpd-filesystem noarch 2.4.58-9.oe2403sp1
httpd-tools x86_64 2.4.58-9.oe2403sp1
mailcap noarch 2.1.54-1.oe2403sp1
mod_http2 x86_64 2.0.25-3.oe2403sp1
openEuler-logos-httpd noarch 1.0-9.oe2403sp1
Transaction Summary
[root@bogon ~]# mount 192.168.10.104:/opt/wwwroot /var/www/html
[root@bogon ~]# systemctl start httpd
[root@bogon ~]# systemctl enable httpd
安排多台测试机,从Internet 中直接访问 http://192.168.10.100/,将能够看到由真实服务器提供的网页内容。如果各节点的网页不同,则不同客户机看到的网页可能也不一样(可以多刷新几次)。在LVS 负载调度器中,通过查看节点状态可以观察当前的负载分配情况,对于轮询算法来说,每个节点所获得的连接负载应大致相当
[root@bogon ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.105:80 wrr
-> 192.168.10.102:80 Route 2 0 0
-> 192.168.10.103:80 Route 1 0 0