LVS集群

特性 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)的设置

cpp 复制代码
[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)的设置

cpp 复制代码
[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负载均衡器设置

cpp 复制代码
[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)的配置

cpp 复制代码
[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负载均衡器设置

cpp 复制代码
# 客户端不需要配置网关,由于和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服务

cpp 复制代码
[root@rs1 ~]# systemctl stop nginx

会发现出错,它不能对 后端的rs 做健康检查,如果后端服务器挂了,请求还是会被调度过去,没有对故障的rs 做剔除;那么haproxy,nginx做负载均衡就能解决这种问题。

相关推荐
黑客Ash2 小时前
网络安全工程师逆元计算 网络安全逆向
linux·服务器·web安全
爱吃喵的鲤鱼2 小时前
Linux——网络(https)
linux·网络·https
向上的车轮2 小时前
OpenEuler学习笔记(二十三):在OpenEuler上部署开源MES系统
linux·笔记·学习·开源
WeiZhihuicsdn3 小时前
Linux源码包安装MySQL数据库
linux·数据库·mysql
_Eden_3 小时前
Netty初学五 客户端与服务端通信协议编解码
java·服务器·网络
不爱学英文的码字机器3 小时前
[操作系统] 进程程序替换
linux·运维·服务器
阿昊真人4 小时前
node 程序占用处理方法与后台运行方法
linux·编辑器·vim
Lllongroad7 小时前
SPI通信及设备驱动
linux·stm32·单片机