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

相关推荐
迎風吹頭髮2 小时前
UNIX下C语言编程与实践23-模拟 UNIX ls -l 命令:lsl 程序的设计与实现全流程
服务器·c语言·unix
努力学习的小廉3 小时前
深入了解linux网络—— 基于UDP实现翻译和聊天功能
linux·网络·udp
大聪明-PLUS3 小时前
从技术史看:Unix 从何而来
linux·嵌入式·arm·smarc
励志不掉头发的内向程序员3 小时前
【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程概念
linux·运维·服务器·开发语言·学习
---学无止境---4 小时前
Linux中内核堆栈跟踪函数dump_stack的实现
linux
夏雨不在低喃4 小时前
昇腾910b服务器上搭建yolo训练环境,使用Anaconda
服务器·yolo
早起的年轻人4 小时前
CentOS 8系统盘大文件查找方法
linux·运维·centos
心灵宝贝4 小时前
Linux CentOS 7 安装 zip-3.0-11.el7.x86_64.rpm 详细步骤(命令行教程)(附安装包)
linux·运维·centos
挺6的还4 小时前
50.Reactor反应堆模式
linux
竹等寒4 小时前
Powershell 管理 后台/计划 作业(六)
服务器·windows·网络安全·powershell