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

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做负载均衡就能解决这种问题。

相关文章:

  • 浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别
  • SIP协议支持的对接方式
  • 怎么查看电脑显存大小(查看电脑配置)
  • rpx和px混用方案
  • 红队视角出发的k8s敏感信息收集——服务发现与 DNS 探测
  • ESLint 规则解析:为什么应避免在 in 操作符左侧使用否定?
  • Mac 下使用多版本 Node
  • 用Shader glsl实现一个简单的PBR光照模型
  • Python 视频文本水印批量添加工具
  • 去中心化AGI网络架构:下一代人工智能的范式革命
  • 输入框相关,一篇文章总结所有前端文本输入的应用场景和实现方法,(包含源码,建议收藏)
  • centos 和 ubuntu 区别
  • 微流控专题 | 单细胞封装背景
  • 深入剖析推理模型:从DeepSeek R1看LLM推理能力构建与优化
  • 网络工程师 (38)流量和差错控制
  • (Neurocomputing-2024)RoFormer: 增强型 Transformer 与旋转位置编码
  • 使用verilog 实现 cordic 算法 ----- 旋转模式
  • arm 入坑笔记
  • el-table得i18国际化写法(我自己项目的大致写法)
  • ms-swift3 序列分类训练
  • 人民时评:透过上海车展读懂三组密码
  • “上海之帆”巡展在日本大阪开幕,松江区组织企业集体出展
  • 大四本科生已发14篇SCI论文?学校工作人员:已记录汇报
  • 复旦设立新文科发展基金,校友曹国伟、王长田联合捐赠1亿助力人文学科与社会科学创新
  • 涉个人信息收集使用问题,15款App和16款SDK被通报
  • 预告:央行等部门将发声,介绍“一揽子金融政策支持稳市场稳预期”有关情况