Linux技术04-IPVS

embedded/2024/12/22 21:19:21/

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 

 

 


http://www.ppmy.cn/embedded/111454.html

相关文章

React基础

一、组件 React 应用程序是由 组件 组成的。一个组件是 UI&#xff08;用户界面&#xff09;的一部分&#xff0c;它拥有自己的逻辑和外观。组成网页单个部分的一组代码,如按钮、导航栏、卡片等&#xff0c;也可以大到整个页面。它是组成网页单个部分的一组代码,如按钮、导航栏…

开源免费的工贸一体行业ERP管理系统

引言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;中小企业面临着前所未有的挑战与机遇。如何实现数字化转型发展&#xff0c;成为了众多中小企业主心头的大事。 据相关数据显示&#xff0c;目前我国中小企业数量已经超过了 4000 万户&#xff0c;然而成功实现数字化转型的比例…

【鸿蒙】HarmonyOS NEXT星河入门到实战6-组件化开发-样式结构重用常见组件

目录 1、Swiper轮播组件 1.1 Swiper基本用法 1.2 Swiper的常见属性 1.3 Swiper的样式自定义 1.3.1 基本语法 1.3.2 案例小米有品 2、样式&结构重用 2.1 Extend:扩展组件(样式、事件) 2.2 Styles:抽取通用属性、事件 2.3 Builder:自定义构建函数(结构、样式、事…

重修设计模式-结构型-装饰器模式

重修设计模式-结构型-装饰器模式 在不修改原有类代码的情况下&#xff0c;通过创建包装类&#xff08;即装饰器&#xff09;给对象添加一些额外的功能。 装饰器模式&#xff08;Decorator Pattern&#xff09;允许在不修改原有类代码的情况下&#xff0c;通过创建一系列包装类来…

fpga入门名词(1)

这是第一代FPGA ,在 FPGA&#xff08;现场可编程门阵列&#xff09;设计中&#xff0c;LCA&#xff08;逻辑单元阵列&#xff09;通常由几个关键组件构成&#xff0c;包括 IOB、CLB 和 Interconnect。以下是这些组件的简要说明&#xff1a; 1. IOB&#xff08;Input/Output B…

go系列之 cron 表达式

一、简介 robfig/cron 是一个用于 Go 语言的定时任务调度库&#xff0c;它允许开发者以类似于 Unix/Linux 系统中的 cron 守护进程的方式来定义和管理周期性任务。 二、使用教程 c : cron.New() c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour …

JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)

前言 我们想要部署一个javaWeb项目到tomcat上&#xff0c;需要了解一些概念 什么是tomcat&#xff1f; Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;下的一个开源项目&#xff0c;主要用于实现 Java Servlet、JavaServer Pages&#xff08;…

Docker概述

Docker能干什么&#xff1f; 虚拟机技术: 资源占用十分多冗余步骤多启动很慢 容器化技术: 不是模拟的一个完整的操作系统&#xff0c;每一个项目可以和自己的运行环境打包形成一个镜像&#xff0c;每个容器之间互相隔离&#xff0c;互不影响。 比较docker和虚拟机的不同 …