Linux技术04-IPVS

IPVS简介

IPVS(IP Virtual Server)是一种基于Linux内核的四层负载均衡技术。它是LVS(LinuxVirtualServer)框架的一部分,基于Netfilter的内核空间的工具,专门用于处理大规模网络服务的负载均衡。相比于Iptables,IPVS能更好地支持大规模高并发的流量分发。

注意,IPVS只负责它所在的机器上,相关请求的负载均衡和转发动作,至于底层不同服务器上物理网络、虚拟网络等之间的流量转发,需要路由、虚拟网络等技术来实现。

IPVS工作原理

主要组件

IPVS的核心机制是将客户端的请求通过一个虚拟IP地址(VIP,VirtualIP)路由到真实的后端服务器(RealServer)。其主要组件包括:

虚拟服务器(VirtualServer):为客户端提供的服务入口,对应一个虚拟IP地址(VIP)。

真实服务器(RealServer):处理实际请求的服务器。

调度器(Scheduler):负责根据特定的负载均衡算法将请求分发到不同的真实服务器。

负载均衡算法

IPVS支持多种负载均衡算法来分配流量,以下是几种常见的算法:

轮询(RoundRobin,rr):将请求按顺序分发到后端服务器,每个服务器依次处理请求。

最少连接(LeastConnections,lc):优先将请求发送到当前连接数最少的服务器,适合长连接的场景。

加权轮询(WeightedRoundRobin,wrr):为不同的服务器设置不同的权重,权重高的服务器将处理更多的请求。

源地址哈希(SourceHashing,sh):根据客户端IP地址的哈希值分配请求,同一个客户端IP始终会被路由到同一台服务器。

调度模式

NAT模式( Network Address Translation**)**

NAT(网络地址转换)是IPVS最基础的负载均衡模式。在NAT模式下,负载均衡器不仅改变请求报文的目标IP地址,还会修改来自后端服务器响应的源IP地址。

工作原理:

客户端向负载均衡器发送请求,目标IP为虚拟IP(VIP)。

负载均衡器接收到请求后,将目标IP修改为某个后端真实服务器的IP,然后将请求转发给该服务器。

后端服务器处理完请求后,将响应发送回负载均衡器。

负载均衡器将后端服务器响应报文中的源IP地址修改为虚拟IP,然后将响应返回给客户端。

特点:
地址转换 :负载均衡器负责修改请求和响应的IP地址。
全流量经过负载均衡器 :请求和响应流量都必须通过负载均衡器。
负载均衡器的压力较大,特别是在高并发场景下。

TUN模式(IP Tunneling)

TUN模式也被称为IP隧道模式。在这种模式下,负载均衡器只负责处理请求的分发,而后端服务器直接将响应发送给客户端。

工作原理:

客户端向负载均衡器发送请求,目标IP为虚拟IP(VIP)。

负载均衡器将请求封装在IP隧道中,通过IPIP协议(IP over IP)将请求转发给某个后端真实服务器。

后端服务器处理请求后,直接将响应报文发回给客户端,而不经过负载均衡器。

特点:
负载均衡器的压力最小 :只处理请求,不处理响应。
后端服务器需支持IP隧道协议(IPIP)。

DR模式(Direct Routing)

DR模式也叫做直接路由模式。在DR模式下,负载均衡器仅处理请求的分发,后端服务器直接将响应发送给客户端。与TUN模式类似,但无需封装IP隧道。

工作原理:

客户端向负载均衡器发送请求,目标IP为虚拟IP(VIP)。

负载均衡器将请求报文的目标MAC地址修改为某个后端服务器的MAC地址(但不修改目标IP地址),然后将请求直接转发给该服务器。

后端服务器处理请求后,直接将响应报文发回给客户端,而不经过负载均衡器。

特点:
不修改IP地址: 负载均衡器只修改MAC地址,而IP地址保持不变。
负载均衡器的压力最小: 只处理请求,不处理响应。
**需要网络设备支持L2路由,**即负载均衡器和后端服务器必须在同一个物理网络中(如同一个局域网)。

| 模式 | 负载均衡器处理流量 | 请求转发方式 | 后端服务器要求 | 适用场景 |
| NAT | 处理请求和响应 | 修改目标和源IP | 位于同一私有网络内 | 小规模、低负载的场景 |
| TUN | 只处理请求 | 使用IP隧道转发 | 支持IPIP隧道 | 高并发、大流量的场景 |

DR 只处理请求 修改MAC地址转发 与负载均衡器在同一网络内 超大规模、高性能分布式场景

IPVS与Iptables的区别

iptables是基于规则的包过滤和转发工具,适合较小规模的服务代理。随着服务规模增大,规则数量增多,iptables性能会逐渐下降。

IPVS则是专门为大规模网络服务的负载均衡设计的,利用哈希表存储规则,能够高效处理大量连接和请求,特别是在高并发场景中具有显著优势。

IPVS配置示例

检查IPVS是否已加载:

#检查IPVS是否已加载

lsmod | grep ip_vs

#如果系统中尚未加载IPVS模块,则需要手动加载必要的模块,如下

modprobe ip_vs

modprobe ip_vs_rr # 轮询调度算法

modprobe ip_vs_wrr # 加权轮询调度算法

modprobe ip_vs_lc # 最少连接调度算法

modprobe nf_conntrack_ipv4 # 追踪IPv4连接

modprobe ip_vs_sed # 最短期望延迟调度算法

modprobe ip_vs_nq # 无队列调度算法

安装ipvsadm工具:

sudo yum install ipvsadm

添加虚拟服务器(VIP),在配置IPVS时,首先需要添加一个虚拟服务器(Virtual IP),并指定负载均衡算法。以轮询算法为例:

ipvsadm -A -t 192.168.100.1:80 -s rr

#这条命令的含义是:

#-A 表示添加一个虚拟服务器。

#-t 表示TCP协议,并指定虚拟IP和端口(192.168.100.1:80)。

#-s rr 指定轮询(rr)调度算法。

为虚拟服务器添加真实服务器,即后端服务器:

ipvsadm -a -t 192.168.100.1:80 -r 192.168.100.2:80 -m

ipvsadm -a -t 192.168.100.1:80 -r 192.168.100.3:80 -m

#这条命令的含义是:

#-a 表示为虚拟服务器添加一个真实服务器。

#-r 指定真实服务器的IP和端口(例如 192.168.100.2:80)。

#-m 表示使用NAT模式(也可以使用-g表示直接路由模式,或者-i表示隧道模式)。

可以使用以下命令查看、保存当前的IPVS配置:

ipvsadm -L -n

ipvsadm-save > /etc/ipvs.rules

在系统启动时,通过脚本或服务加载此配置:

ipvsadm-restore < /etc/ipvs.rules

相关推荐
新手上路狂踩坑11 分钟前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
新时代农民工--小明30 分钟前
前端自动化部署更新,自动化打包部署
运维·前端·自动化
一个不秃头的 程序员1 小时前
服务器上加入SFTP------(小白篇 1)
运维·服务器
fnd_LN1 小时前
Linux文件目录 --- 复制命令CP、递归复制目录、软连接、硬链接
linux·运维·服务器
MorleyOlsen1 小时前
【Trick】解决服务器cuda报错——RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
运维·服务器·深度学习
周周的奇妙编程1 小时前
基于鲲鹏服务器的打砖块小游戏部署
运维·服务器
OopspoO1 小时前
Linux查看键鼠输入
linux
大熊程序猿2 小时前
airflow docker 安装
运维·docker·容器
从后端到QT2 小时前
boost asio 异步服务器
服务器·网络·tcp/ip
会飞的土拨鼠呀2 小时前
chart文件结构
运维·云原生·kubernetes