一、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。
LVS(Linux Virtual Server)负载均衡群集的 NAT 模式和 DR 模式是两种常用的工作模式,它们各自具有独特的优势,以下是详细对比:
NAT 模式(网络地址转换模式)
- 部署简单
- NAT 模式只需要在负载均衡器上进行配置,无需对后端服务器进行特殊设置。所有后端服务器可以使用私有 IP 地址,通过负载均衡器进行网络地址转换,对外呈现为一个公网 IP 地址,易于部署和管理。
- 安全性较高
- 后端服务器的真实 IP 地址被隐藏在负载均衡器之后,外部网络只能看到负载均衡器的公网 IP 地址,这为后端服务器提供了一定的安全保护,降低了后端服务器直接暴露在外部网络所面临的安全风险,如网络攻击等。
- 支持端口映射
- 可以方便地实现端口映射功能,将外部请求的不同端口映射到后端服务器的不同端口或服务上,从而灵活地支持多种应用服务的负载均衡,满足不同业务需求。
- 对网络环境要求低
- NAT 模式对网络环境的要求相对较低,不需要特殊的网络设备支持,只需要负载均衡器具备 NAT 功能即可,适用于各种规模和复杂程度的网络环境,尤其是在一些小型网络或对网络改造难度较大的场景中具有优势。
DR 模式(直接路由模式)
- 高性能和低延迟
- DR 模式中,请求数据包直接从负载均衡器发送到后端服务器,响应数据包则直接从后端服务器返回给客户端,无需经过负载均衡器再次转发,大大减少了数据传输的中间环节,提高了系统的性能和响应速度,降低了延迟,适用于对性能要求极高的场景,如大型电商网站、高并发的在线游戏平台等。
- 支持大量并发连接
- 由于数据传输的效率高,DR 模式能够支持大量的并发连接,后端服务器可以独立地处理客户端请求,不会因为负载均衡器的性能瓶颈而限制整个系统的并发处理能力,可扩展性强,能够轻松应对高并发流量的冲击。
- 服务器配置灵活
- 后端服务器可以使用公网 IP 地址,也可以使用私有 IP 地址,还可以根据实际需求灵活配置服务器的网络参数,如网关、子网掩码等,不受负载均衡器的严格限制,提高了服务器配置的灵活性和自主性。
- 网络流量效率高
- 避免了 NAT 模式中可能出现的网络地址转换开销,减少了数据包的处理时间和网络带宽占用,提高了网络流量的传输效率,尤其在处理大流量数据传输时,DR 模式的优势更加明显,能够充分利用网络带宽资源,提升整个系统的网络性能。
二、基于 openEuler 构建 LVS-DR 群集。
1. 环境搭建
名称 IP配置 服务角色 备注
open_Euler 172.25.254.103 Director Server 负载均衡服务器
open_Euler1 172.25.254.101 Real Server1(RS1) web服务器1
open_Euler2 172.225.254.102 Real Server2(RS2) web服务器2
Rocky8 172.25.254.104 Client 客户端
2.RS配置
RS1和RS2配置一样
bash
# 安装配置web服务器
[root@openEuler1 ~]# dnf install nginx -y
[root@openEuler1 ~]# systemctl start nginx
[root@openEuler1 ~]# cd /usr/share/nginx/html/
[root@openEuler1 html]# ls
404.html 50x.html index.html nginx-logo.png
[root@openEuler1 html]# echo "this is test page, `hostname -I `" > index.html
[root@openEuler1 html]# curl localhost # 测试
this is test page, 172.25.254.102
[root@openEuler1 html]#
# 新建dummy连接并设置VIP
[root@openEuler1 html]# nmcli con add type dummy ifname dummy1 ipv4.method manua l ipv4.addresses 172.25.254.100/32
连接 "dummy-dummy1" (d93912f0-64d1-49f5-bb75-54a21a59c3a3) 已成功添加。
[root@openEuler1 html]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defau lt 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group d efault qlen 1000
link/ether 00:0c:29:ba:99:2c brd ff:ff:ff:ff:ff:ff
inet 172.25.254.102/24 brd 172.25.254.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feba:992c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN g roup default qlen 1000
link/ether 32:89:77:ec:40:2d brd ff:ff:ff:ff:ff:ff
inet 172.25.254.100/32 scope global noprefixroute dummy1
valid_lft forever preferred_lft forever
inet6 fe80::98e6:4085:1c80:ab40/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# ARP抑制
[root@openEuler1w html]# 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
3.LVS负载均衡配置
bash
# 新建dummy连接并设置VIP
[root@openEuler ~]# nmcli con add type dummy ifname dummy1 ipv4.method manual i pv4.addresses 172.25.254.100/32
连接 "dummy-dummy1" (73294a04-5598-472e-aae5-f9b22251b1c6) 已成功添加。
[root@openEuler ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defau lt 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group d efault qlen 1000
link/ether 00:0c:29:63:5c:e1 brd ff:ff:ff:ff:ff:ff
inet 172.25.254.103/24 brd 172.25.254.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe63:5ce1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN g roup default qlen 1000
link/ether 12:32:de:42:35:60 brd ff:ff:ff:ff:ff:ff
inet 172.25.254.100/32 scope global noprefixroute dummy1
valid_lft forever preferred_lft forever
inet6 fe80::977e:6d41:e800:1b67/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# 安装ip虚拟服务器 ipvs
[root@openEuler ~]# yum install ipvsadm -y
[root@openEuler /]# cd
# 手工配置添加LVS服务
[root@openEuler ~]# ipvsadm -A -t 172.25.254.100:80 -s rr # -A 添加虚拟服务器
[root@openEuler ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.101:80 -g
[root@openEuler ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.102:80 -g
# -s 算法 -a 添加真实服务器 -t 设置群地址
[root@openEuler ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
-> 172.25.254.101:80 Route 1 0 0
-> 172.25.254.102:80 Route 1 0 0
4.结果测验
bash
[root@Rocky8 ~]# for ((i=1;i<=4;i++));
> do
> curl 172.25.254.100
> done
web test page,ip is 172.25.254.101
web test page,ip is 172.25.254.102
web test page,ip is 172.25.254.101
web test page,ip is 172.25.254.102