当前位置: 首页 > article >正文

LVS集群(DR/NAT)

特性NAT 模式DR 模式
工作原理Director 修改请求/响应的 IP 地址和端口,流量双向经过 DirectorDirector 仅修改请求的 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

# 添加虚拟服务器,监听公网 IP 的 80 端口,使用轮询算法
[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    #开机自动加载

其中 -A  用于添加虚拟服务器,-t  指定公网 IP 和端口,-s rr 表示采用轮询调度算法;
-a  用于添加真实服务器,-r  指定真实服务器的 IP 和端口,-g  表示使用 DR 模式(默认为DR模式)。 

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)的配置

  配置一个静态页面,网关为lvs 的dip

[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
rs1 和 rs2 切换成仅主机模式
[root@all ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
GATEWAY=10.0.0.10  #将 rs1 和 rs2 的网关设置为 LVS DIP 的地址
[root@all ~]# systemctl restart network

[root@rs1 ~]# curl 10.0.0.132
my ip is 10.0.0.132
[root@rs2 ~]# curl 10.0.0.133
my ip is 10.0.0.133

LVS负载均衡器设置 (添加网卡)

[root@lvs ~]# yum install ipvsadm -y
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1     #开启ip转发
[root@lvs ~]# sysctl -p     #是配置生效

# 添加虚拟服务器,监听公网 IP 的 80 端口,使用轮询算法
[root@lvs ~]# ipvsadm -At 192.168.8.154:80 -s rr 
# 添加真实服务器,-m 表示 NAT 模式
[root@lvs ~]# ipvsadm -at 192.168.8.154:80 -r 10.0.0.132:80 -m
[root@lvs ~]# ipvsadm -at 192.168.8.154:80 -r 10.0.0.133: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.154:80 rr
  -> 10.0.0.132:80                Masq    1      0          0         
  -> 10.0.0.133:80                Masq    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做负载均衡就能解决这种问题。


http://www.kler.cn/a/546400.html

相关文章:

  • 知识拓展:设计模式之装饰器模式
  • 【docker知识】快速找出服务器中占用内存较高的容器
  • 我的新书《青少年Python趣学编程(微课视频版)》出版了!
  • sql调优之数据库开发规范
  • vite让每个scss文件自动导入某段内容
  • uniapp实现首行首列冻结效果
  • 能源物联网数据采集网关 多协议对接解决方案
  • 代码随想录算法营Day38 | 62. 不同路径,63. 不同路径 II,343. 整数拆分,96. 不同的二叉搜索树
  • ICLR2022 | IAA | 从数据分布的角度重新思考对抗转移性
  • Qt接入deepseekv3 API 提供openssl 1.1.1g安装包
  • win11 MBR 启动 如何把我的硬盘改 GPT win11 的 UEFI 启动
  • Vulhub靶机 ActiveMQ任意 文件写入(CVE-2016-3088)(渗透测试详解)
  • 使用爬虫获取1688商品分类:实战案例指南
  • PMP冲刺每日一题(8)
  • Java 语言深度剖析与实践应用
  • 一文深入了解DeepSeek-R1:模型架构
  • Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)
  • 基础网络详解4--HTTP CookieSession 思考 2
  • S4D480 S4HANA 基于PDF的表单打印
  • FFmpeg中时长的表示方式