云原生(LVS DR模式集群实验)
·
环境流程图


实验简介
一、实验核心目标
搭建 DR 模式负载均衡架构,通过配置路由器、调度器(vsnode)、客户端、真实服务器(RS1/RS2)的网络参数,实现客户端请求经调度器分发至真实服务器,且真实服务器直接响应客户端(DR 模式核心特征)。
二、核心组网角色及配置要点
-
路由器:
- 关闭 ipvsadm 服务并清空规则,配置双网卡(eth0:172.25.254.100、eth1:192.168.0.100);
- 开启内核 IP 转发功能,配置 SNAT 策略实现不同网段(172.25.254.0/24、192.168.0.0/24)的地址转换与数据转发。
-
调度器(vsnode):
- 配置 eth0 网卡双 IP(192.168.0.200/24、192.168.0.50/24),网关指向路由器(192.168.0.100),作为负载均衡的入口 VIP(192.168.0.200)载体。
-
客户端:
- 配置 172.25.254.99 网段地址,验证与调度器 VIP(192.168.0.200)的网络连通性(如 ping 测试)。
-
真实服务器(RS1/RS2):
- 配置基础网络:RS1(192.168.0.10)、RS2(192.168.0.20),网关指向路由器;
- 关键配置:在回环网卡(lo)绑定调度器 VIP(192.168.0.200/32),并调整 ARP 内核参数(arp_ignore、arp_announce),避免 ARP 广播暴露 VIP,确保 DR 模式下真实服务器仅通过 lo 接口响应 VIP 请求,且不向外宣告 VIP 的 ARP 信息。
三、DR 模式核心逻辑体现
DR 模式的核心是 “调度器仅分发请求,真实服务器直接回包给客户端”:
- 客户端请求目标为调度器 VIP(192.168.0.200),经路由器转发至调度器;
- 调度器将请求分发至 RS1/RS2(仅修改数据链路层 MAC 地址,IP 层仍保留 VIP);
- RS1/RS2 通过 lo 接口识别 VIP 请求并处理,直接通过路由器将响应包返回客户端,无需经调度器转发,提升转发效率。
四、实验关键保障
通过调整 ARP 参数避免 VIP 的 ARP 冲突,通过内核 IP 转发、SNAT 策略实现跨网段通信,通过多网卡 / 多 IP 配置构建 DR 模式所需的网络拓扑,最终验证 DR 模式负载均衡的网络连通性与转发逻辑。
环境设定
router
#在路由器中
[root@router yxs]# systemctl disable --now ipvsadm.service
Removed "/etc/systemd/system/multi-user.target.wants/ipvsadm.service".
[root@router yxs]# vmset.sh eth0 172.25.254.100 router
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/7)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:ee:1b:c5 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 172.25.254.100/24 brd 172.25.254.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::23c8:4740:41c3:f9e6/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
router
[root@router yxs]# vmset.sh eth1 192.168.0.100 router noroute
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:ee:1b:cf brd ff:ff:ff:ff:ff:ff
altname enp19s0
altname ens224
inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::2368:18eb:c683:fc47/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
router
#设定内核路由功能
[root@router yxs]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
[root@router yxs]# sysctl -p
net.ipv4.ip_forward = 1
#数据转发策略
[root@router yxs]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100
[root@router yxs]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100
vsnode
[root@vsnode yxs]# vmset.sh eth0 192.168.0.200 vsnode noroute
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:86:fe:7b brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.200/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::5ff5:78f6:3d42:63a8/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
vsnode
[root@vsnode yxs]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
method=manual
address1=192.168.0.50/24
address2=192.168.0.200/24,192.168.0.100
#检测
[root@vsnode yxs]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[root@vsnode yxs]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:86:fe:7b brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.0.200/24 brd 192.168.0.255 scope global secondary noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::5ff5:78f6:3d42:63a8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
client
[root@client yxs]# vmset.sh eth0 172.25.254.99 client
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:e6:7c:33 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 172.25.254.99/24 brd 172.25.254.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::2120:b1c8:5e57:da3d/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
client
#检测
[root@client yxs]# ping 192.168.0.200
PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。
64 比特,来自 192.168.0.200: icmp_seq=1 ttl=128 时间=0.605 毫秒
64 比特,来自 192.168.0.200: icmp_seq=2 ttl=128 时间=0.523 毫秒
RS1
[root@RS1 yxs]# vmset.sh eth0 192.168.0.10 RS1 noroute
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:d5:22:da brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::4deb:3eed:cdbf:2fc8/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
RS1
[root@RS1 yxs]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@RS1 yxs]# nmcli connection reload
[root@RS1 yxs]# nmcli connection up eth0
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@RS1 yxs]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
#在lo上设定vip
[root@RS1 yxs]# cd /etc/NetworkManager/system-connections/
[root@RS1 system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@RS1 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ethernet]
[ipv4]
address1=127.0.0.1/8
address2=192.168.0.200/32
method=manual
[root@RS1 system-connections]# nmcli connection reload
[root@RS1 system-connections]# nmcli connection up lo
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
[root@RS1 system-connections]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.0.200/32 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:d5:22:da brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::4deb:3eed:cdbf:2fc8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#arp禁止响应
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
RS2
[root@RS2 yxs]# vmset.sh eth0 192.168.0.20 RS2 noroute
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:3a:be:ad brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::ce51:18e8:3ae6:e47e/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
RS2
[root@RS2 yxs]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@RS2 yxs]# nmcli connection reload
[root@RS2 yxs]# nmcli connection up eth0
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@RS2 yxs]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
#在lo上设定vip
[root@RS2 yxs]# cd /etc/NetworkManager/system-connections/
[root@RS2 system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@RS2 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ethernet]
[ipv4]
address1=127.0.0.1/8
address2=192.168.0.200/32
method=manual
[root@RS2 system-connections]# nmcli connection reload
[root@RS2 system-connections]# nmcli connection up lo
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
[root@RS2 system-connections]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.0.200/32 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:3a:be:ad brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::ce51:18e8:3ae6:e47e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#arp禁止响应
[root@RS2 system-connections]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS2 system-connections]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS2 system-connections]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@RS2 system-connections]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
检测配置(全主机可达)
router
[root@router yxs]# ping 172.25.254.99
PING 172.25.254.99 (172.25.254.99) 56(84) 比特的数据。
64 比特,来自 172.25.254.99: icmp_seq=1 ttl=64 时间=0.393 毫秒
64 比特,来自 172.25.254.99: icmp_seq=2 ttl=64 时间=0.359 毫秒
^Z
[1]+ 已停止 ping 172.25.254.99
[root@router yxs]# ping 192.168.0.200
PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。
64 比特,来自 192.168.0.200: icmp_seq=1 ttl=64 时间=0.572 毫秒
64 比特,来自 192.168.0.200: icmp_seq=2 ttl=64 时间=0.273 毫秒
^Z
[2]+ 已停止 ping 192.168.0.200
[root@router yxs]# ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) 比特的数据。
64 比特,来自 192.168.0.10: icmp_seq=1 ttl=64 时间=0.434 毫秒
64 比特,来自 192.168.0.10: icmp_seq=2 ttl=64 时间=0.306 毫秒
^Z
[3]+ 已停止 ping 192.168.0.10
[root@router yxs]# ping 192.168.0.20
PING 192.168.0.20 (192.168.0.20) 56(84) 比特的数据。
64 比特,来自 192.168.0.20: icmp_seq=1 ttl=64 时间=0.362 毫秒
64 比特,来自 192.168.0.20: icmp_seq=2 ttl=64 时间=0.259 毫秒
^Z
[4]+ 已停止 ping 192.168.0.20
vsnode
[root@vsnode yxs]# ping 172.25.254.100
PING 172.25.254.100 (172.25.254.100) 56(84) 比特的数据。
64 比特,来自 172.25.254.100: icmp_seq=1 ttl=64 时间=0.238 毫秒
64 比特,来自 172.25.254.100: icmp_seq=2 ttl=64 时间=0.364 毫秒
^Z
[1]+ 已停止 ping 172.25.254.100
[root@vsnode yxs]# ping 172.25.254.99
PING 172.25.254.99 (172.25.254.99) 56(84) 比特的数据。
64 比特,来自 172.25.254.99: icmp_seq=1 ttl=63 时间=0.460 毫秒
64 比特,来自 172.25.254.99: icmp_seq=2 ttl=63 时间=0.580 毫秒
^Z
[2]+ 已停止 ping 172.25.254.99
[root@vsnode yxs]# ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) 比特的数据。
64 比特,来自 192.168.0.10: icmp_seq=1 ttl=64 时间=0.469 毫秒
64 比特,来自 192.168.0.10: icmp_seq=2 ttl=64 时间=0.186 毫秒
^Z
[3]+ 已停止 ping 192.168.0.10
[root@vsnode yxs]# ping 192.168.0.20
PING 192.168.0.20 (192.168.0.20) 56(84) 比特的数据。
64 比特,来自 192.168.0.20: icmp_seq=1 ttl=64 时间=0.619 毫秒
64 比特,来自 192.168.0.20: icmp_seq=2 ttl=64 时间=0.240 毫秒
^Z
[4]+ 已停止 ping 192.168.0.20
client
[root@client yxs]# ping 192.168.0.200
PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。
64 比特,来自 192.168.0.200: icmp_seq=1 ttl=128 时间=0.605 毫秒
64 比特,来自 192.168.0.200: icmp_seq=2 ttl=128 时间=0.523 毫秒
^Z
[1]+ 已停止 ping 192.168.0.200
[root@client yxs]# ping 172.25.254.100
PING 172.25.254.100 (172.25.254.100) 56(84) 比特的数据。
64 比特,来自 172.25.254.100: icmp_seq=1 ttl=64 时间=0.226 毫秒
64 比特,来自 172.25.254.100: icmp_seq=2 ttl=64 时间=0.245 毫秒
^Z
[2]+ 已停止 ping 172.25.254.100
[root@client yxs]# ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) 比特的数据。
64 比特,来自 192.168.0.10: icmp_seq=1 ttl=128 时间=0.412 毫秒
64 比特,来自 192.168.0.10: icmp_seq=2 ttl=128 时间=0.458 毫秒
^Z
[3]+ 已停止 ping 192.168.0.10
[root@client yxs]# ping 192.168.0.20
PING 192.168.0.20 (192.168.0.20) 56(84) 比特的数据。
64 比特,来自 192.168.0.20: icmp_seq=1 ttl=128 时间=0.398 毫秒
64 比特,来自 192.168.0.20: icmp_seq=2 ttl=128 时间=0.502 毫秒
^Z
[4]+ 已停止 ping 192.168.0.20
RS1
[root@RS1 yxs]# ping 172.25.254.100
PING 172.25.254.100 (172.25.254.100) 56(84) 比特的数据。
64 比特,来自 172.25.254.100: icmp_seq=1 ttl=64 时间=0.221 毫秒
64 比特,来自 172.25.254.100: icmp_seq=2 ttl=64 时间=0.312 毫秒
^Z
[1]+ 已停止 ping 172.25.254.100
[root@RS1 yxs]# ping 192.168.0.200
PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。
64 比特,来自 192.168.0.200: icmp_seq=1 ttl=64 时间=0.015 毫秒
64 比特,来自 192.168.0.200: icmp_seq=2 ttl=64 时间=0.046 毫秒
^Z
[2]+ 已停止 ping 192.168.0.200
[root@RS1 yxs]# ping 172.25.254.99
PING 172.25.254.99 (172.25.254.99) 56(84) 比特的数据。
64 比特,来自 172.25.254.99: icmp_seq=1 ttl=63 时间=0.371 毫秒
64 比特,来自 172.25.254.99: icmp_seq=2 ttl=63 时间=0.502 毫秒
^Z
[3]+ 已停止 ping 172.25.254.99
[root@RS1 yxs]# ping 192.168.0.20
PING 192.168.0.20 (192.168.0.20) 56(84) 比特的数据。
64 比特,来自 192.168.0.20: icmp_seq=1 ttl=64 时间=0.351 毫秒
64 比特,来自 192.168.0.20: icmp_seq=2 ttl=64 时间=0.268 毫秒
^Z
[4]+ 已停止 ping 192.168.0.20
RS2
[root@RS2 yxs]# ping 172.25.254.100
PING 172.25.254.100 (172.25.254.100) 56(84) 比特的数据。
64 比特,来自 172.25.254.100: icmp_seq=1 ttl=64 时间=0.165 毫秒
64 比特,来自 172.25.254.100: icmp_seq=2 ttl=64 时间=0.233 毫秒
^Z
[1]+ 已停止 ping 172.25.254.100
[root@RS2 yxs]# ping 192.168.0.200
PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。
64 比特,来自 192.168.0.200: icmp_seq=1 ttl=64 时间=0.017 毫秒
64 比特,来自 192.168.0.200: icmp_seq=2 ttl=64 时间=0.043 毫秒
^Z
[2]+ 已停止 ping 192.168.0.200
[root@RS2 yxs]# ping 172.25.254.99
PING 172.25.254.99 (172.25.254.99) 56(84) 比特的数据。
64 比特,来自 172.25.254.99: icmp_seq=1 ttl=63 时间=0.633 毫秒
64 比特,来自 172.25.254.99: icmp_seq=2 ttl=63 时间=0.374 毫秒
^Z
[3]+ 已停止 ping 172.25.254.99
[root@RS2 yxs]# ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) 比特的数据。
64 比特,来自 192.168.0.10: icmp_seq=1 ttl=64 时间=0.227 毫秒
64 比特,来自 192.168.0.10: icmp_seq=2 ttl=64 时间=0.318 毫秒
^Z
[4]+ 已停止 ping 192.168.0.10
更多推荐
所有评论(0)