特性 | NAT 模式 | DR 模式 |
---|---|---|
工作原理 | Director 修改请求/响应的 IP 地址和端口,流量双向经过 Director | Director 仅修改请求的 MAC 地址,响应由 Real Server 直接返回客户端 |
性能 | 较低(需处理双向流量,易成瓶颈) | 高(仅处理入站流量,适合高并发场景) |
IP 要求 | Real Server 使用私有 IP,Director 需公网 IP | Real Server 与 Director 需在同一局域网, VIP 需全局可见 |
配置复杂度 | 简单(仅需配置 NAT 规则) | 复杂(需配置 ARP 抑制和 lo 接口 VIP) |
扩展性 | 受限于 Director 带宽和处理能力 | 扩展性强(Director 压力小) |
安全性 | 隐藏后端服务器 IP | 暴露后端服务器 IP(需额外安全措施) |
适用场景 | 中小规模、私有网络环境 | 大规模、高性能需求场景 |
一、DR模式集群
1.工作原理
集群由 Director Server(负载均衡器)和多台 Real Server(后端真实服务器)组成,它们处于同一局域网。Director Server 拥有对外提供服务的 VIP(虚拟 IP 地址),同时 Real Server 也需配置 VIP。客户端通过访问 VIP 发起请求。客户端请求报文的源 IP 为 CIP(客户端 IP),目标 IP 为 VIP,到达 Director Server 的内核空间。IPVS 判断为集群服务后,不改变源 IP 和目标 IP,仅修改数据帧的目标 MAC 地址为选中 Real Server 的 MAC 地址,源 MAC 地址为 Director Server 的 MAC 地址,然后在局域网上发送给 Real Server。Real Server 处理完请求后,响应报文直接发回给客户端,不经过 Director Server。这个方式是三种调度中性能最好的,也是我们生产环境中使用最多的。适用于高并发场景。
2.实验步骤
真实服务器(rs1)的设置
[root@rs1 ~]# yum install nginx -y
[root@rs1 ~]# echo "I am rs1 " > /usr/share/nginx/html/index.html
[root@rs1 ~]# systemctl start nginx
[root@rs1 ~]# curl localhost
I am rs1
[root@rs1 ~]# nmcli c add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.8.10/32
[root@rs1 ~]# 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@rs1 ~]# sysctl -p #使配置生效
真实服务器(rs2)的设置
[root@rs2 ~]# yum install nginx -y
[root@rs2 ~]# echo "I am rs2 " > /usr/share/nginx/html/index.html
[root@rs2 ~]# systemctl start nginx
[root@rs2 ~]# curl localhost
I am rs2
[root@rs2 ~]# nmcli c add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.8.10/32
[root@rs2 ~]# 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@rs2 ~]# sysctl -p
LVS负载均衡器设置
[root@lvs ~]# nmcli c add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.8.10/32
[root@lvs ~]# yum install ipvsadm -y
[root@lvs ~]# ipvsadm -At 192.168.8.10:80 -s rr
[root@lvs ~]# ipvsadm -at 192.168.8.10:80 -r 192.168.8.139:80 -g
[root@lvs ~]# ipvsadm -at 192.168.8.10:80 -r 192.168.8.140:80 -g
#-A 用于添加虚拟服务器,-t 指定公网 IP 和端口,-s rr 表示采用轮询调度算法;
#-a 用于添加真实服务器,-r 指定真实服务器的 IP 和端口,-g 表示使用 DR 模式(默认为DR模式)。[root@lvs ~]# 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.8.10:80 rr-> 192.168.8.139:80 Route 1 0 0-> 192.168.8.140:80 Route 1 0 0
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm #保存LVS规则
[root@lvs ~]# systemctl enable ipvsadm #开机自动加载
client的测试(注意访问的是VIP)
二、NAT模式集群
1.工作原理
负载均衡器 连接外部网络与内部 后端真实服务器 所在局域网。负载均衡器 配置有公网 IP 和内部私有 IP,后端真实服务器 仅配置内部私有 IP。客户端通过公网 IP 访问集群。客户端请求报文的源 IP 为 CIP,目标 IP 为公网 IP(负载均衡器 的公网 IP)。负载均衡器 接收请求后,将目标 IP 修改为内部选中的 后端真实服务器 的私有 IP,源 IP 保持不变,然后转发给 后端真实服务器。后端真实服务器 处理请求后,响应报文发送给 负载均衡器,负载均衡器 再将响应报文的源 IP 修改为公网 IP,目标 IP 修改为 CIP,最后发送给客户端。适用于小型网络或对网络改造要求不高的场景。
在 Linux 系统中,ip_forward 参数控制着内核是否允许转发数据包。默认情况下,为了提高安全性,大多数 Linux 发行版都将 ip_forward 设置为 0,这意味着系统不会转发数据包。如果你想让系统能够像路由器一样工作,转发不同网络之间的数据包,就需要将 ip_forward 设置为 1。
2.实验步骤
真实服务器(rs1 rs2)的配置
[root@all ~]# yum install nginx -y
[root@all ~]# echo "my ip is `hostname -I`" > /usr/share/nginx/html/index.html
[root@all ~]# systemctl start nginx
LVS负载均衡器设置
# 客户端不需要配置网关,由于和VIP在同一网段之下,访问的是VIP
[root@lvs ~]# nmcli c modify dummy-dummy2 ipv4.addresses 172.25.254.100/24
[root@lvs ~]# nmcli c up dummy-dummy2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)[root@lvs ~]# yum install ipvsadm -y# 添加虚拟服务器,监听公网 IP 的 80 端口,使用轮询算法
[root@lvs ~]# ipvsadm -At 192.168.8.10:80 -s rr
# 添加真实服务器,-m 表示 NAT 模式
[root@lvs ~]# ipvsadm -at 192.168.8.10:80 -r 192.168.8.139:80 -m
[root@lvs ~]# ipvsadm -at 192.168.8.10:80 -r 192.168.8.140:80 -m
[root@lvs ~]# 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.8.10:80 rr-> 192.168.8.139:80 Route 1 0 0-> 192.168.8.140:80 Route 1 0 0
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm #保存LVS规则
[root@lvs ~]# systemctl enable ipvsadm #开机自动加载
三、LVS的缺点
关闭rs1的nginx服务
[root@rs1 ~]# systemctl stop nginx
会发现出错,它不能对 后端的rs 做健康检查,如果后端服务器挂了,请求还是会被调度过去,没有对故障的rs 做剔除;那么haproxy,nginx做负载均衡就能解决这种问题。