一、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式
1. NAT 模式
工作原理:
客户端请求发送到负载均衡器(LVS)。
LVS 修改请求的目标 IP 地址为后端服务器的 IP 地址,并将请求转发。
后端服务器处理请求后,将响应返回给 LVS。
LVS 再将响应的源 IP 地址修改为自己的 IP 地址,返回给客户端。
优势:
配置简单:NAT 模式相对容易配置,适合初学者或简单场景。
隐藏后端服务器:后端服务器的真实 IP 地址对客户端不可见,增强了安全性。
支持跨网段:LVS 和后端服务器可以位于不同的网络段,适合分布式部署。
劣势:
性能瓶颈:LVS 需要处理所有进出流量,可能成为性能瓶颈,尤其是在高流量场景下。
单点故障:LVS 是唯一的入口和出口,一旦故障,整个系统将不可用。
网络开销:LVS 需要修改每个数据包的 IP 地址,增加了网络开销。
2. DR 模式
工作原理:
客户端请求发送到负载均衡器(LVS)。
LVS 将请求转发给后端服务器,但不修改 IP 地址,仅修改 MAC 地址。
后端服务器直接响应客户端,不经过 LVS。
优势:
高性能:LVS 只处理入站流量,出站流量由后端服务器直接返回客户端,减少了 LVS 的负载,性能更高。
低延迟:响应数据包不经过 LVS,减少了网络延迟。
扩展性强:适合高流量、高并发的场景,能够轻松扩展后端服务器。
劣势:
配置复杂:DR 模式需要后端服务器配置 VIP(Virtual IP),并且需要确保后端服务器不响应 ARP 请求,配置较为复杂。
网络限制:LVS 和后端服务器必须在同一局域网(LAN)内,不能跨网段。
暴露后端服务器:后端服务器的真实 IP 地址可能暴露给客户端,存在一定的安全风险。
二、基于 openEuler 构建 LVS-DR 群集
1、实验环境
主机名 | IP地址 | 角色 |
openEuler-2 | 192.168.183.11 | Director Server |
openEuler-1 | 192.168.183.12 | Real Server1 |
openEuler-3 | 192.168.183.13 | Real Server2 |
openEuler-4 | 192.168.183.14 | Client |
2、安装nginx服务器并设置静态页面(两台RS上配置一致)
[root@openEuler-1 ~]# yum install nginx -y[root@openEuler-1 ~]# echo "web test page, ip is `hostname -I`." > /usr/share/nginx/html/index.html[root@openEuler-1 ~]# systemctl enable --now nginx[root@openEuler-1 ~]# curl localhost
web test page, ip is 192.168.183.12 .
3、添加VIP的相关配置
在两台RS和DS上:
[root@openEuler-2 ~]# nmcli con add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.183.10/32
Connection 'dummy-dummy1' (c54d631d-3f2f-463c-b808-bd0f483e51fc) successfully added.
[root@openEuler-2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:29:96:40 brd ff:ff:ff:ff:ff:ffinet 192.168.183.11/24 brd 192.168.183.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe29:9640/64 scope link noprefixroute valid_lft forever preferred_lft forever
3: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether 52:0d:11:f4:39:6a brd ff:ff:ff:ff:ff:ffinet 192.168.183.10/32 scope global noprefixroute dummy1valid_lft forever preferred_lft foreverinet6 fe80::8a3f:23b2:85a2:66d6/64 scope link noprefixroute valid_lft forever preferred_lft forever
4、配置arp抑制(两台RS上配置)
[root@open-1 ~]# vim /etc/sysctl.conf
在最后加上四行
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.dummy1.arp_ignore = 1
> net.ipv4.conf.dummy1.arp_announce = 2#使配置生效
[root@open-1 ~]# sysctl -p
5、LVS配置(DS上配置)
[root@openEuler-2 ~]# yum install ipvsadm -y
[root@openEuler-2 ~]# ipvsadm -At 192.168.183.10:80 -s rr
[root@openEuler-2 ~]# ipvsadm -at 192.168.183.10:80 -r 192.168.183.12:80 -g
[root@openEuler-2 ~]# ipvsadm -at 192.168.183.10:80 -r 192.168.183.13:80 -g
[root@openEuler-2 ~]# 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.183.10:80 rr-> 192.168.183.12:80 Route 1 0 0-> 192.168.183.13:80 Route 1 0 0
6、clinet上测试
[root@openEuler-4 ~]# for ((i=1;i<=6;i++))
> do
> curl 192.168.183.10
> done
web test page, ip is 192.168.183.13 .
web test page, ip is 192.168.183.12 .
web test page, ip is 192.168.183.13 .
web test page, ip is 192.168.183.12 .
web test page, ip is 192.168.183.13 .
web test page, ip is 192.168.183.12 .