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 

 

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部