当前位置: 首页 > news >正文

LVS--负载均衡调度器

文章目录

  • 集群和分布式
    • 集群
    • 分布式
  • LVS介绍
    • LVS特点
    • LVS工作原理
    • LVS集群架构
  • LVS集群中的术语
    • CIP
    • VIP
    • RS
    • DIP
    • RIP
  • LVS集群的工作模式
    • NAT模式
    • DR模式
      • DR的工作原理
      • DR的特点:
      • DR的网络配置
        • 1.配置负载均衡器
        • 2.配置后端服务器
          • lo接口的作用
        • 3.测试连接:
      • DR的典型应用场景
    • TUN模式
  • LVS调度算法
  • LVS相关软件
    • ipvsadm 命令
      • 管理集群服务:增、改、删
      • 管理集群上的RS:增、改、删
    • 创建集群
  • NAT模式案例
  • DR模式单网段案例
  • 面试题
    • 1.LVS会监听VIP相关的端口吗

在这里插入图片描述
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。

LVS 在大型网站和服务集群中应用广泛,是一种可靠的负载均衡解决方案。通过不同的工作模式和负载均衡算法,LVS 能够灵活地适应各种网络环境和应用需求。

集群和分布式

集群

集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是─样的。

分布式

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。

分布式常见应用1.分布式应用--服务按照功能拆分,使用微服务2.分布式静态资源--静态资源放在不同的存储集群上3.分布式数据和存储--使用key-value缓存系统4.分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。
在这里插入图片描述

LVS介绍

LVS: (Linux Virtual Server),是全球最流行的四层负载均衡开源软件,内核集成,由章文嵩博士(当前阿里云产品技术负责人)在1998年5月创立,可以实现LINUX平台下的负载均衡。

LVS是 基于linux netfilter框架实现(同iptables)的一个内核模块,名称为ipvs;其钩子函数分别HOOK在LOCAL_IN和FORWARD两个HOOK点

LVS是一种用于实现高可用性和负载均衡的技术。LVS 可以将客户端请求分配到多个后端服务器上,形成一个虚拟的服务器集群,从而提高系统的可用性、扩展性和性能。LVS 常用于负载均衡 Web 服务器、邮件服务器、数据库服务器等应用。

LVS官网:
http://www.linuxvirtualserver.org/

阿里SLB:
https://developer.aliyun.com/article/1803
https://github.com/alibaba/LVS

阿里的四层SLB(ServerLoad Balance)是基于LVS+keepalived实现。

LVS特点

LVS特点:1.高可用性: LVS通过将流量分配到多个后端服务器,实现了单点故障的容错能力。如果某个服务器故障,流量可以自动转移到其他服务器。2.负载均衡: LVS支持多种负载均衡算法,可以根据不同的策略(如轮询、最少连接等)将流量合理地分配到后端服务器。3.透明性: 对客户端来说,LVS集群表现为一个单一的虚拟服务器,后端服务器对客户端是透明的。4.扩展性: LVS集群可以通过增加后端服务器来扩展系统的处理能力。5.低开销: LVS运行在内核空间中,效率高,性能损失低,适合处理大量的网络连接。

LVS工作原理

LVS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”。

查看内核支持LVS

ls /boot/
grep -i ipvs /boot/config-5.4.0-182-generic

在这里插入图片描述

root@ka1:~# grep -i ipvs -C 20 /boot/config-5.4.0-182-generic 
......(此处省略部分内容)
CONFIG_NETFILTER_XT_MATCH_IPVS=m
......
CONFIG_NETFILTER_XT_MATCH_POLICY=m......#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_FO=m
CONFIG_IP_VS_OVF=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_MH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8#
# IPVS MH scheduler
#
CONFIG_IP_VS_MH_TAB_INDEX=12
......

LVS集群架构

在这里插入图片描述

LVS集群中的术语

访问流程: CIP <–> VIP == DIP<–> RIP

CIP

定义

CIP(Client IP)是指客户端的IP地址。在LVS中,CIP是指向LVS Director发起请求的终端设备的IP地址。CIP是LVS负载均衡过程中的关键因素,因为LVS会根据CIP来确定请求的源头,并据此将流量分发到适当的Real Server(实际服务器)。

作用

作用(Role):标识客户端: CIP是识别和区分不同客户端请求的重要信息。每个请求都会带有CIP,这使得LVS能够追踪请求的来源,并根据CIP来执行负载均衡策略,例如在持久性会话(Persistence)场景中,确保同一CIP的请求始终被路由到相同的Real Server。决定负载均衡: LVS可以根据CIP来选择负载均衡算法的应用,例如基于CIP的最少连接算法(Least Connections with Source IP Hashing),在这种情况下,CIP会直接影响LVS选择哪个Real Server来处理请求。

使用场景

使用场景 (Usage Scenarios):持久性会话 (Persistence):在某些应用场景中,特别是需要保持会话状态的场景(例如电商网站的购物车、用户登录等),LVS需要确保同一CIP的所有请求在一定时间内始终分配给同一个Real Server。这种机制称为持久性会话,通常通过记录CIP与Real Server的映射关系来实现。防火墙规则 (Firewall Rules):LVS中的CIP也可以用于定义防火墙规则。例如,可以基于CIP设置访问控制,允许或拒绝特定的IP地址访问某些资源。这对于提高系统的安全性非常有用。负载均衡策略:LVS的一些负载均衡算法可能会使用CIP来计算哈希值,以便决定将请求分配给哪个Real Server。例如,源地址哈希(Source IP Hashing)算法根据CIP来确定Real Server。
工作模式中的影响 (Impact in Different Modes):NAT模式(Network Address Translation):在NAT模式下,客户端的请求到达LVS Director时,Director会看到CIP并记录它。在请求被转发到Real Server时,CIP可能会被隐藏或替换为DIP,具体取决于配置。但Real Server仍然可以通过LVS处理后的数据包看到原始的CIP。DR模式 (Direct Routing):在DR模式下,CIP保持不变,Real Server直接接收到原始的客户端请求,因此Real Server可以直接看到CIP。这在持久性会话或日志记录等场景中尤为重要。TUN模式 (IP Tunneling):在TUN模式下,客户端请求通过IP隧道传输到Real Server,CIP也会保持不变,Real Server可以直接使用CIP进行处理和记录。

相关配置

相关配置 (Configuration):在LVS的配置中,CIP通常不需要显式配置,因为它是由客户端自动生成并附加到请求中的。然而,在配置LVS的持久性会话或防火墙规则时,需要考虑如何处理和利用CIP。如果使用持久性会话,LVS通常会建立CIP与Real Server 的映射表,以确保来自同一CIP的请求在指定时间内始终分配给同一个Real Server。

示例 (Example):

假设有一个LVS集群配置为DR模式,配置如下:VIP: 192.168.100.1Real Server: 192.168.100.101, 192.168.100.102Client: 203.0.113.5 (CIP)客户端(CIP 为 203.0.113.5)发出一个请求到 VIP 192.168.100.1。1.LVS Director会接收请求,并基于CIP决定将请求转发到 Real Server 192.168.100.101 或 192.168.100.102。2.Real Server收到请求后,可以看到CIP并据此处理请求。

总结:
CIP 是 LVS 中的重要概念,它标识了客户端的来源,并在 LVS 的负载均衡决策中起着关键作用。理解 CIP 如何在不同的 LVS 工作模式中影响请求的处理和分配,对于优化和管理 LVS 系统非常重要。

VIP

VIP: Virtual serve IP VS外网的IP

定义

VIP (Virtual IP) 是指在LVS (Linux Virtual Server) 系统中,对外暴露的虚拟IP地址。VIP是客户端访问整个LVS集群的入口IP,客户端的所有请求都会先到达VIP,然后由LVS Director根据负载均衡算法将请求转发到后端的实际服务器(Real Servers)。

作用

作用 (Role):统一入口: VIP作为LVS集群的对外统一访问点,使得整个服务器集群在外界看来是一个单一的服务器。客户端不需要知道后端的Real Servers的具体IP地址,只需通过VIP访问服务。负载均衡: VIP LVS进行负载均衡操作的核心。当客户端请求到达VIP时,LVS会根据预设的负载均衡算法决定将请求转发给哪个后端的 Real Server(RIP)。高可用性: 通过VIP,LVS可以实现高可用性。当某个Real Server出现故障时,LVS可以自动将流量重定向到其他正常的服务器,而不会中断服务。

使用场景

使用场景 (Usage Scenarios):Web服务: 在高并发的Web服务中,VIP使得多台Web服务器可以作为一个整体对外提供服务。客户端的请求到达VIP后,LVS根据负载均衡算法将请求分发给不同的Web服务器,从而提高服务的并发能力。数据库服务: 在高可用的数据库集群中,VIP可以作为数据库访问的入口点。无论是读写分离还是读写集群,客户端只需要访问 VIP,而LVS会将请求分发给合适的数据库实例。防火墙规则: 在防火墙配置中,VIP可以被用于定义访问控制策略。例如,只允许特定的客户端IP地址访问VIP,以提高系统的安全性。

工作模式中的使用

工作模式中的使用(Usage in Different Modes):NAT模式(Network Address Translation):在NAT模式下,客户端请求首先到达VIP,LVS Director将请求的目标IP地址转换为DIP,并转发给一个Real Server。 Real Server 处理请求后,将响应数据发送回 LVS,由 LVS 通过 VIP 返回给客户端。DR模式(Direct Routing):在DR模式下,VIP 通常配置在LVS Director 和所有Real Servers 上。客户端的请求到达VIP后,LVS 修改数据包的MAC地址,将请求直接发送给Real Server,Real Server直接将响应数据返回给客户端。TUN模式(IP Tunneling):在TUN模式下,VIP作为客户端访问的目标地址,LVS使用IP隧道技术将请求转发到地理上分布的Real Server,Real Server处理完请求后直接将响应发送给客户端。

配置VIP

在配置LVS 时,VIP 通常是通过 LVS Director 的网络接口配置的。
管理员可以将 VIP 绑定到指定的网络接口上,从而使 LVS 能够接收客户端的请求。

示例配置:

ifconfig eth0:0 192.168.100.1 netmask 255.255.255.0 up这里,VIP 192.168.100.1 被配置在 eth0:0 虚拟接口上,用于接收客户端请求。

示例 (Example):

假设有一个 LVS 配置如下:VIP: 192.168.100.1DIP: 192.168.100.10RIP: 192.168.100.101, 192.168.100.102在这个例子中:1.客户端发出请求到VIP 192.168.100.1。2.LVS Director接收到请求后,根据配置的负载均衡算法,将请求转发给一个 RIP(例如 192.168.100.101)。3.Real Server处理请求,并返回响应数据。响应数据通过VIP传递回客户端(NAT模式下通过LVS转发,DR模式下直接发送)。

与其他 IP 的区别

DIP(Director IP): DIP是LVS Director 用于与内部Real Server通信的IP地址,主要在内部网络中使用。而VIP是客户端访问的公共IP地址。RIP(Real IP): RIP是实际处理请求的服务器的IP地址,只在LVS内部网络中可见。VIP是对外暴露的IP,客户端通过VIP访问服务。

总结: VIP 是 LVS 系统中非常重要的概念,它作为 LVS 集群的入口点,使得 LVS 可以实现高效的负载均衡和高可用性。通过配置VIP,多个后端服务器可以作为一个整体对外提供服务,从而增强系统的扩展性和可靠性。

RS

RS: Real Server(lvs), upstream server(nginx), backend server(haproxy)

定义

RS(Real Server) 是指在LVS (Linux Virtual Server) 系统中,实际处理客户端请求的后端服务器。这些服务器执行具体的应用程序或服务,例如Web服务器、数据库服务器等。LVS将客户端的请求分发到这些Real Servers,以实现负载均衡和高可用性。

作用

作用(Role):处理请求: RS是真正执行应用逻辑、处理客户端请求并生成响应的服务器。当LVS接收到客户端的请求后,会根据预设的负载均衡算法将请求转发给一个或多个RS。分担负载: 通过将客户端的请求分发到多个RS,LVS可以平衡负载,防止单个服务器过载。这样可以提升整体服务的性能和可靠性。保证高可用性: RS是实现高可用性的重要部分。通过监控和管理多个RS,LVS可以在某个RS发生故障时,自动将流量切换到其他可用的RS,从而避免服务中断。

使用场景

使用场景(Usage Scenarios):Web服务: 在大规模Web服务中,通常会有多个RS来处理客户端的HTTP 请求。LVS将流量分发给这些RS,从而实现高并发的处理能力。数据库服务: 在分布式数据库系统中,多个RS可以作为数据库节点,通过LVS进行负载均衡,保证数据库服务的高效运行。文件存储: 对于大规模的文件存储服务,可以通过LVS将上传和下载请求分发给不同的RS,从而提高系统的吞吐量。

工作模式中的使用

工作模式中的使用(Usage in Different Modes):NAT模式(Network Address Translation):在NAT模式下,客户端的请求首先到达LVS Director,Director将请求转发给一个 RS。RS处理请求并将响应发送回LVS Director,再由Director返回给客户端。在这个模式下,RS通常不直接与客户端通信,所有流量都通过LVS转发。DR模式(Direct Routing):在DR模式下,LVS Director将请求转发给RS,而不改变数据包的目标IP地址。RS直接响应客户端请求,这种模式减少了LVS的流量处理负担,因此可以处理更高的并发量。TUN模式(IP Tunneling):在TUN模式下,客户端请求通过IP隧道传输到RS,RS处理请求后直接将响应发送给客户端。TUN模式允许RS位于不同的网络中,适用于跨地域的服务器集群。

配置 RS

在LVS系统中,RS通过其IP地址(RIP)在配置文件中定义。
管理员可以指定多个RS,并为每个RS设置权重,以控制流量的分配比例。

示例配置

real_server 192.168.100.101 80 {weight 1TCP_CHECK {connect_timeout 3}
}
real_server 192.168.100.102 80 {weight 2TCP_CHECK {connect_timeout 3}
}在这个示例中,192.168.100.101 和 192.168.100.102 是两个 RS,
其中 192.168.100.102 的权重更高,因此它将处理更多的请求。

健康检测

健康检测1.LVS会定期对RS 进行健康检查,以确保它们处于正常运行状态。2.如果某个RS无法响应,LVS会将其从流量分发池中移除,直到它恢复正常为止。3.常见的健康检查方法包括TCP检查、HTTP检查等。

示例

假设 LVS 系统的配置如下:VIP: 192.168.100.1RIP(RS): 192.168.100.101, 192.168.100.102在这个配置中:1.当客户端发出请求到VIP 192.168.100.1 时,LVS Director 接收请求。2.LVS Director根据负载均衡算法选择一个RS(例如 192.168.100.101),并将请求转发给它。3.这个RS处理请求后,直接或通过LVS将响应返回给客户端(具体取决于工作模式)。

与其他 IP 的区别

VIP(Virtual IP): VIP是LVS集群对外暴露的IP地址,用于接收客户端请求。而RS则是实际处理这些请求的服务器。DIP(Director IP): DIP是LVS Director在内部网络中的IP地址,用于与RS进行通信和管理,而RS则是用来执行实际的服务任务。
Real Server (RS)定义: 实际服务器(Real Server)是LVS后端用于处理客户端请求的真实服务器。这些服务器通常运行着实际的应用程序(如Web服务器、数据库服务器等)。作用: Real Server负责处理由LVS 转发的请求,并返回响应给客户端。

总结: RS 是 LVS 系统中的核心组成部分,负责处理和响应客户端的请求。通过配置多个 RS,并结合 LVS 的负载均衡功能,可以实现高性能、高可用性的服务架构。理解 RS 的配置和管理是确保 LVS 系统稳定高效运行的关键。

DIP

定义

 DIP: Director IP VS内网的IP定义:DIP是指运行LVS的Director服务器在局域网内的IP地址。这个IP地址用于与Real Server(实际服务器)通信,并接受客户端请求。DIP是Director服务器的一个内部网络接口的IP地址,通常在NAT模式或DR模式中使用。

作用:

 通信中枢: DIP是LVS Director与后端Real Server之间进行通信的主要途径。在NAT模式下,Director使用DIP作为源地址与Real Server通信;在DR模式下,DIP主要用于管理和监控Real Server的状态。管理网络: DIP是LVS Director 在内部网络中的身份标识,通常用于内部网络中的管理和控制操作,如健康检查、配置同步等。内部流量控制: DIP也可以用于处理LVS相关的内部流量,例如将数据包从VIP转发到Real Server,并在必要时返回数据包给客户端。

工作模式中的使用

NAT模式(Network Address Translation):在NAT模式下,DIP作为源IP地址发送数据包给Real Server。LVS Director将客户端发送到VIP 的请求转发到Real Server,并使用DIP作为源地址。Real Server的响应数据包会先发送到DIP,再由LVS Director转发回客户端。DR模式(Direct Routing):在DR模式下,DIP主要用于监控和管理Real Server 的状态。虽然DR模式下的请求是通过修改MAC地址直接转发的,但DIP仍然用于与Real Server保持通信,如健康检查和故障切换操作。TUN模式(IP Tunneling):在TUN模式下,DIP作用较为类似于DR模式,主要用于管理和监控Real Server,但实际的客户端请求会通过IP隧道直接发往Real Server。

与 VIP 的区别 (Difference from VIP):

VIP(Virtual IP): VIP是LVS集群对外展示的IP地址,客户端通过VIP访问服务。VIP通常是公开的,可以在互联网或局域网内访问。DIP(Director IP): DIP是LVS Director 的内部IP地址,用于内部通信和管理。DIP通常不会直接暴露给客户端。

相关配置 (Configuration):

在配置LVS时,DIP是在Director的内部网络接口上配置的IP地址。
根据不同的工作模式,DIP的配置可能会有一些差异。一般情况下,DIP需要与Real Server在同一个子网中,以确保通信的顺畅。

示例 (Example)

假设有一个LVS集群,使用NAT模式,配置如下:VIP: 192.168.100.1DIP: 192.168.100.10Real Server: 192.168.100.101, 192.168.100.102在这种配置中,1.客户端请求会先到达VIP(192.168.100.1)2.然后由LVS Director 通过DIP(192.168.100.10)将请求转发到其中一个 Real Server(如 192.168.100.101)。3.Real Server处理完请求后,将响应发送回DIP,再由LVS Director 返回给客户端。

总结:DIP 是 LVS Director 用于与内部网络中的 Real Server 通信和管理的重要 IP 地址,它是 LVS 系统中不可或缺的组成部分之一。

RIP

定义

RIP (Real IP) 是指LVS中后端真实服务器的IP地址。也就是实际处理客户端请求的服务器的IP地址。在LVS的上下文中,RIP是与Real Server相关的术语,代表这些服务器在内部网络中的身份。

作用

作用(Role):标识后端服务器: RIP用于标识每个Real Server 在LVS集群中的位置。当LVS Director接收到客户端的请求时,它会根据负载均衡算法将请求转发到指定的RIP对应的服务器。流量分发: LVS根据配置的负载均衡策略,将客户端请求从VIP转发到一个或多个RIP对应的Real Server。每个RIP都是一个潜在的目标服务器,用于处理和响应客户端请求。

使用场景

使用场景 (Usage Scenarios):负载均衡:LVS的主要功能是将流量分发到多个RIP对应的Real Server,以实现负载均衡。通过配置不同的RIP,管理员可以控制流量的分布,并在必要时添加或移除服务器,以应对变化的负载需求。故障切换: 在LVS中,如果某个RIP对应的Real Server出现故障,LVS可以自动将流量切换到其他可用的RIP对应的服务器,以确保服务的持续可用性。这种机制提高了系统的容错能力。健康检查: LVS通常会对RIP对应的Real Server进行健康检查,确保这些服务器处于正常运行状态。如果某个RIP对应的服务器无法响应,LVS将其暂时从流量分发池中移除,直到其恢复正常。

工作模式中的影响

工作模式中的影响(Impact in Different Modes):NAT模式(Network Address Translation):在NAT模式下,LVS Director 会将客户端的请求转发给一个RIP对应的Real Server,并修改数据包的源IP地址为DIP。Real Server的响应数据包也会返回到 DIP,再由LVS转发给客户端。DR模式(Direct Routing):在DR模式下,LVS Director直接将数据包发送给RIP对应的Real Server,而不修改数据包的源IP地址。Real Server直接将响应数据包发送给客户端。因此在这个模式下,RIP需要与客户端的网络拓扑有一定的关联。TUN模式(IP Tunneling):在TUN模式下,LVS使用IP隧道将客户端的请求转发到不同网络中的RIP对应的Real Server。Real Server 接收到数据包后,处理并直接将响应发送给客户端。

总结: RIP是LVS 系统中后端真实服务器的 IP 地址,是 LVS 进行负载均衡和流量管理的核心要素。理解和配置 RIP有助于优化流量分发、提高系统的可靠性,并确保服务的持续可用性。

VS: Virtual Server, Director Server(DS), Dispatcher(调度器), Load Balancer

LVS集群的工作模式

1.lvs-nat:  修改请求报文的目标IP,多目标IP的DNAT(目的地址转换)
2.lvs-dr:   操纵封装新的MAC地址
3.lvs-tun:  在原请求IP报文之外新加一个IP首部
4.lvs-fullnat: 修改请求报文的源和目标IP,默认内核不支持

参考博客:https://cloud.tencent.com/developer/article/2054205

NAT模式

官方链接:http://www.linuxvirtualserver.org/VS-NAT.html

NAT模式(Network Address Translation):在NAT模式下,LVS负载均衡器将客户端请求转发到后端服务器,并将后端服务器的响应数据再转发回客户端。LVS充当网络地址转换器,修改数据包的源地址和目的地址。优点: 配置简单,后端服务器只需与LVS处于同一网络。缺点: LVS承担双向流量,易成为性能瓶颈,不适合处理大流量的场景。

在这里插入图片描述
lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统

在这里插入图片描述
在这里插入图片描述
注意:在NAT模式中,LVS既是请求的入口又是响应的出口,负载会比较大,会有性能瓶颈。

DR模式

LVS的DR模式(Direct Routing,直接路由)是LVS最常用的工作模式之一。它的主要特点是,LVS负载均衡器只负责将客户端的请求转发到后端服务器,而响应数据直接由后端服务器返回给客户端,无需再通过负载均衡器。这种方式避免了LVS成为网络瓶颈,能够提高系统的性能和可扩展性。

官方链接:http://www.linuxvirtualserver.org/VS-DRouting.html

DR的工作原理

在LVS-DR模式下,客户端发来的请求会首先到达负载均衡器,负载均衡器根据负载均衡算法(如轮询、加权轮询等)选择一个后端服务器,并将请求转发给该服务器。

DR模式的工作具体过程如下:1.客户端请求:客户端向负载均衡器发起请求,目标IP是VIP(虚拟IP)。2.负载均衡器处理:LVS负载均衡器接收到发往VIP的请求后,根据调度算法选择一台合适的后端服务器,将请求转发给该服务器。3.直接路由:负载均衡器不会改变请求的目标IP(即VIP不变),只会修改数据链路层的目标MAC地址,指向所选服务器的MAC地址。4.后端服务器响应:后端服务器接收到请求后,直接以VIP为源IP将响应数据发送回客户端,而不再通过LVS负载均衡器。

在这种模式下,LVS处理的是数据包的转发,不涉及数据包内容的修改(除了MAC地址)。由于响应数据不经过LVS,这使得DR模式具有较高的性能和处理能力。
在这里插入图片描述
LVS-DR: Direct Routing(直接路由),LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。

DR的特点:

1.Director(负载均衡器)和各RS都配置有VIP2.确保前端路由器将目标IP为VIP的请求报文发往Director2.1在前端网关做静态绑定VIP和Director的MAC地址。2.2在RS上使用arptables工具arptables -A IN -d $VIP -j DROParptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce3.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director4.RS和Director要在同一个物理网络5.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client6.不支持端口映射(端口不能修改)7.无需开启ip_forward8.RS可使用大多数OS系统

DR的网络配置

配置LVS的DR模式主要涉及以下步骤:

1.配置负载均衡器

LVS负载均衡器配置虚拟IP(VIP),并使用ipvsadm工具设置调度规则:

ip addr add VIP dev eth0  # 配置VIP
ipvsadm -A -t VIP:80 -s rr  # 添加虚拟服务,并选择轮询调度算法
ipvsadm -a -t VIP:80 -r RealServer1_IP -g  # 添加后端服务器,DR模式
ipvsadm -a -t VIP:80 -r RealServer2_IP -g
2.配置后端服务器

在后端服务器上添加VIP到lo接口:

ip addr add VIP dev lo

禁止后端服务器响应ARP请求,防止ARP冲突:

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
lo接口的作用

在大多数Linux系统中,lo接口会在系统启动时自动配置。它的默认IP地址是127.0.0.1,并且这个地址通常用于本地回环通信。

在LVS负载均衡的DR模式中,回环接口lo经常用来在后端服务器上绑定VIP(虚拟IP)。这种做法的目的是让后端服务器能够处理发往VIP的请求,但不会响应ARP请求(避免冲突)。例如,后端服务器通过以下命令将VIP绑定到lo接口:

ip addr add VIP dev lo
3.测试连接:

完成配置后,客户端的请求将通过LVS负载均衡器被分发到后端服务器,并且后端服务器将直接将响应数据返回给客户端。
在这里插入图片描述

DR的典型应用场景

高并发Web服务:由于DR模式可以有效减轻负载均衡器的压力,特别适合高并发、高流量的Web服务,如大规模的电商网站、社交平台等。视频流媒体服务:对于数据量大、并发用户多的场景,如视频点播和直播,DR模式可以极大提高负载均衡性能,提升用户体验。

LVS-DR模式是一种高效的负载均衡方案,适用于需要高性能和大规模扩展的场景。它通过直接路由的方式,让LVS负载均衡器只处理请求调度,而让后端服务器直接返回响应,降低了负载均衡器的网络和计算开销。尽管其对网络拓扑有一定的限制,但在合适的环境中,DR模式能够提供非常优异的性能。

TUN模式

TUN模式(IP Tunneling):在TUN模式下,LVS使用IP隧道(IPIP)技术将客户端请求通过隧道发送给后端服务器,后端服务器直接将响应数据发送回客户端。适合后端服务器位于不同网络的情况。优点: 支持跨广域网的负载均衡,LVS仅处理入站流量,负载较轻。缺点: 配置较复杂,需要在后端服务器上配置隧道接口。

LVS调度算法

1.轮询(Round Robin): RR,轮询将请求依次分配给每个后端服务器,较常用,雨露均沾,大锅饭。2.加权轮询(Weighted Round Robin): WRR,根据每台服务器的权重来分配请求,权重高的服务器分配更多的请求,较常用。3.源IP地址哈希(Source Hashing): SH,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定。4.目标IP地址哈希(Destination Hashing): DH,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

LVS相关软件

程序包:ipvsadm

yum install -y ipvsadm

在这里插入图片描述
在这里插入图片描述
vim /usr/lib/systemd/system/ipvsadm.service
在这里插入图片描述

ipvsadm 命令

ipvsadm核心功能:1.集群服务管理:增、删、改2.集群服务的RS管理:增、删、改3.查看
[root@rocky ~]# ipvsadm --help
ipvsadm v1.31 2019/12/24 (compiled with popt and IPVS v1.2.1)
Usage:ipvsadm -A|E virtual-service [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]ipvsadm -D virtual-service    删除ipvsadm -C                    清空ipvsadm -R                    重载,相当于ipvsadm-restoreipvsadm -S [-n]               保存,相当于ipvsadm-saveipvsadm -a|e virtual-service -r server-address [options]ipvsadm -d virtual-service -r server-addressipvsadm -L|l [virtual-service] [options]ipvsadm -Z [virtual-service]ipvsadm --set tcp tcpfin udpipvsadm --start-daemon {master|backup} [daemon-options]ipvsadm --stop-daemon {master|backup}ipvsadm -h
Commands:
Either long or short options are allowed.--add-service     -A        add virtual service with options--edit-service    -E        edit virtual service with options--delete-service  -D        delete virtual service--clear           -C        clear the whole table--restore         -R        restore rules from stdin--save            -S        save rules to stdout--add-server      -a        add real server with options--edit-server     -e        edit real server with options--delete-server   -d        delete real server--list            -L|-l     list the table--zero            -Z        zero counters in a service or all services--set tcp tcpfin udp        set connection timeout values--start-daemon              start connection sync daemon--stop-daemon               stop connection sync daemon--help            -h        display this help messagevirtual-service:--tcp-service|-t  service-address   service-address is host[:port]--udp-service|-u  service-address   service-address is host[:port]--sctp-service    service-address   service-address is host[:port]--fwmark-service|-f fwmark          fwmark is an integer greater than zero

管理集群服务:增、改、删

增、改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

说明

service-address:-t|u|f:-t: TCP协议的端口,VIP:TCP_PORT 如:-t 10.0.0.100:80-u: UDP协议的端口,VIP:UDP_PORT-f: firewall MARK,标记,一个数字
[-s scheduler]: 指定集群的调度算法,默认为wlc

范例

ipvsadm -A -t 10.0.0.100:80 -s wrr   增
ipvsadm -D -t|u|f service-address    删除

管理集群上的RS:增、改、删

增、改:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

ipvsadm -d -t|u|f service-address -r server-address

说明

server-address:rip[:port] 如省略port,不作端口映射
选项:
lvs类型;-g: gateway, dr类型,默认-i: ipip, tun类型-m: masquerade,nat类型
-w weight: 权重

范例:

ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.8:8080 -m -w 3

创建集群

第一步:创建集群

ipvsadm -A -t 10.0.0.100:80   #ip地址当然要存在,不然路由不可达呀

在这里插入图片描述
第二步:添加后端服务器
在这里插入图片描述

NAT模式案例

在这里插入图片描述
环境准备

共四台主机一台:internet client: 192.168.10.6/24   Gw:无  仅主机一台: lvseth1 仅主机 192.168.10.100/16eth0 NAT 10.0.0.8/24两台RS:RS1: 10.0.0.7/24   Gw: 10.0.0.8 NATRS2: 10.0.0.17/24  Gw: 10.0.0.8 NAT

配置过程

[root@internet ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=192.168.10.6
PREFIX=24
ONBOOT=yes[root@lvs network-scripts]#cat ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.8
PREFIX=24
ONBOOT=yes
[root@lvs network-scripts]#cat ifcfg-eth1
DEVICE=eth1
NAME=eth1
BOOTPROTO=static
IPADDR=192.168.10.100
PREFIX=24
ONBOOT=yes[root@rs1 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.8
ONBOOT=yes
[root@rs2 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.17
PREFIX=24
GATEWAY=10.0.0.8
ONBOOT=yes

给rs1和rs2安装上http服务

[root@rs1 ~]#curl 10.0.0.7
10.0.0.7 RS1[root@rs2 ~]#curl 10.0.0.17
10.0.0.17 RS2

打开ip_forward

[root@lvs-server ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1[root@lvs-server ~]#sysctl -p
net.ipv4.ip_forward = 1

配置集群,配置real server

[root@lvs-server ~]#ipvsadm -A -t 192.168.10.100:80 -s wrr
[root@lvs-server ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.7:80 -m
[root@lvs-server ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.17:80 -m
[root@lvs-server ~]#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.10.100:80 wrr->10.0.0.7:80                   Masq    1      1          0->10.0.0.17:80                  Masq    1      0          0
[root@internet ~]#while :;do curl 192.168.10.100;sleep 0.5; done
rs1.magedu.org
rs2.magedu.org
rs1.magedu.org
rs2.magedu.org
rs1.magedu.org
rs2.magedu.org
[root@lvs-server ~]#ipvsadm -Ln --stats
IP virtual server version 1.2.1 (size=4096)
Prot Loca1Address:Port               Conns   InPkts   outPkts   InBytes   outBytes-> RemoteAddress:Port
TCP  192.168.10.100:80                  67     405      255       32436     30092-> 10.0.0.7:80                        34     203      128       16244     15072-> 10.0.0.17:80                       33     202      127       16192     15020
[root@lvs-server ~]#cat /proc/net/ip_vs
IP virtual Server version 1.2.1 (size=4096)
Prot Loca1Address:Port Scheduler Flags-> RemoteAddress:Port Forward weight Activeconn InActConn
TCP COA80A64:0050 wrr-> 0A000011:0050      Masq    1     0           98-> 0A000007:0050      Masq    1     0           97
[root@lvs-server ~]#ipvsadm -Lnc
IPvs connection entries
pro expire state      source             virtual             destination
TCP 01:55  TIME_WAIT  192.168.10.6:43486 192.168.10.100:80   10.0.0.17:80
TCP 00:19  TIME_WAIT  192.168.10.6:43476 192.168.10.100:80   10.0.0.7:80
TCP 01:58  TIME_WAIT  192.168.10.6:43500 192.168.10.100:80   10.0.0.7:80
TCP 01:58  TIME_WAIT  192.168.10.6:43498 192.168.10.100:80   10.0.0.17:80
TCP 01:59  TIME_WAIT  192.168.10.6:43502 192.168.10.100:80   10.0.0.17:80
[root@1vs-server ~]#cat /proc/net/ip_vs_conn
Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt state      Expires  PEName PEData
TCP COA80A06 A9DE COA80A64 0050 0A000011 0050 TIME_WAIT       72
TCP COA80A06 A9EC COA80A64 0050 0A000007 0050 TIME_WAIT       76
TCP COA80A06 AA64 COA80A64 0050 0A000007 0050 TIME_WAIT      106
TCP COA80A06 AA0C COA80A64 0050 0A000007 0050 TIME_WAIT       84
TCP COA80A06 AA3A COA80A64 0050 0A000011 0050 TIME_WAIT       95
TCP COA80AO6 AA86 COA80A64 0050 0A000011 0050 TIME_WAIT      115
TCP COA80A06 AA78 COA80A64 0050 0A000007 0050 TIME_WAIT      111
TCP COA80A06 AA06 COA80A64 0050 0A000011 0050 TIME_WAIT       82
TCP COA80A06 AA44 COA80A64 0050 0A000007 0050 TIME_WAIT       98
TCP COA80A06 AA2C COA80A64 0050 0A000007 0050 TIME_WAIT       92
#保存规则
[root@lvs-server ~]#ipvsadm -sn > /etc/sysconfig/ipvsadm
[root@lvs-server ~]#systemctl enable --now ipvsadm.service

DR模式单网段案例

在这里插入图片描述
环境准备

环境:五台主机一台: 客户端eth0:仅主机 192.168.10.6/24  GW:192.168.10.200一台: ROUTEReth0:NAT 10.0.0.200/24eth1:仅主机 192.168.10.200/24启用IP_FORWARD一台: LVSeth0: NAT:DIP:10.0.0.8/24 GW:10.0.0.200两台RS:RS1: ethO:NAT:10.0.0.7/24  GW:10.0.0.200RS2: eth0:NAT:10.0.0.17/24 GW:10.0.0.200

面试题

1.LVS会监听VIP相关的端口吗

LVS(Linux Virtual Server)本身并不会直接监听VIP(Virtual IP)相关的端口。LVS的核心工作是通过虚拟IP来接收客户端的请求,并根据预设的负载均衡策略将这些请求转发到后端的真实服务器上进行处理。

具体来说,LVS的两个常见工作模式:1.NAT模式(Network Address Translation):在这种模式下,LVS位于请求路径的中心,它接收来自客户端的请求,并将其通过NAT转发给后端的真实服务器。同时,它还会将后端服务器的响应再通过LVS返回给客户端。在这个过程中,LVS会处理发往VIP的请求包,并根据转发规则分配给后端服务器。2.DR模式(Direct Routing):在DR模式下,LVS同样接收发往VIP的请求包,但它不会修改这些包的目标IP,而是通过直接路由的方式将请求交给后端服务器。后端服务器会直接将响应包发送回客户端,而无需经过LVS。因此,LVS也不会监听VIP的端口,只是负责请求的调度。

相关文章:

LVS--负载均衡调度器

文章目录 集群和分布式集群分布式 LVS介绍LVS特点LVS工作原理LVS集群架构 LVS集群中的术语CIPVIPRSDIPRIP LVS集群的工作模式NAT模式DR模式DR的工作原理DR的特点:DR的网络配置1.配置负载均衡器2.配置后端服务器lo接口的作用 3.测试连接&#xff1a; DR的典型应用场景 TUN模式 L…...

windows@共享网络共享打印机@局域网内远程调用打印机打印

文章目录 abstract流程简述预备工作启动服务&#x1f388;启用网络发现和共享开关检查共享密码保护(可选) 相关概念通过GUI设置局域网共享打印机使用开始菜单直接跳转到打印机设置逐步操作 命令行配置方式使用net命令共享打印机使用powershell相关模块配置 使用PowerShell 配置…...

sql格式化工具

1.在线格式化工具:https://www.qianbo.com.cn/Tool/Beautify/Sql-Formatter.html 2. 格式化后用拼接 string sql " SELECT rack.rackRow,rack.rackColumn,rack.rackLayer FROM rack LEFT JOIN TaskListON rack.rackColumn TaskList.Unload_ColAND rack.rackRow TaskL…...

[Python办公]常用Python数据采集爬虫技术对比

常用的数据采集技术可以分为以下几种&#xff1a; 1.网页抓取&#xff08;Web Scraping&#xff09; 网页抓取是通过模拟浏览器行为或直接发送请求来获取网页内容的技术。其核心目标是从 HTML 网页中提取有价值的数据。 常用工具&#xff1a;requests、BeautifulSoup、Selen…...

相机光学(三十七)——自动对焦原理

1.自动对焦的三种方式 目前在手机上采用的自动对焦系统包括反差对焦、相位对焦和激光对焦三种方案&#xff0c;下面我们来看一下它们的工作原理和相互之间的区别是什么。 1.1反差对焦【CDAF】- Contrast Detection Auto Focus 反差对焦是目前普及率最高、使用最广泛、成本相对…...

Go语言现代web开发05 指针和结构体

指针 Pointers are complex data types that store the memory address of value. Simply put, if we have a value stored in the memory address as 100 and a pointer to that value, the pointer value will be 100. The default value for a pointer is nil. Nil pointer…...

Postgresql 删除数组中的元素

extra为 {“a”: [null, 3, null],“b”: 111} 使用sql 将extra中a中的null移除 第一步&#xff1a; 首先先把[null, 3, null]移除&#xff0c; select json_agg(elem) filter ( where elem ! null ) from (select jsonb_array_elements([null,3,null]::jsonb) as elem) t;这…...

docker 多服务只暴露一个客户端

业务场景 docker部署多个服务时候,当为了安全考虑 部署了多个服务,数据库,缓存库,文件服务器啥的,如果全都暴露的话可能会增加资源侵入的风险,所以只需要挂载一个客户端端口给外部访问即可,其他服务均在内网,保障资源安全 docker 网络 可以把容器们都放在同一网络下,由于docke…...

DFS算法专题(二)——穷举vs暴搜vs深搜vs回溯vs剪枝【OF决策树】

目录 1、决策树 2、算法实战应用【leetcode】 2.1 题一&#xff1a;全排列 2.2.1 算法原理 2.2.2 算法代码 2.2 题二&#xff1a;子集 2.2.1 算法原理【策略一】 2.2.2 算法代码【策略一】 2.2.3 算法原理【策略二&#xff0c;推荐】 2.2.4 算法代码【策略二&#x…...

Spring Security 快速开始

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency> 一、认证 1、从数据中读数据完成认证 Service public class MyUserDetailsService implements UserDeta…...

Lua5.3 参考手册

《Lua 5.3 参考手册》是对 Lua 5.3 版本语言的官方定义。这份手册详细描述了 Lua 语言的语法、语义以及标准库和 C API。它是由巴西里约热内卢 Pontifical Catholic 大学的 PUC-Rio 团队开发的&#xff0c;并且是一个自由软件&#xff0c;广泛应用于世界各地的产品和项目中【9†…...

Centos如何配置阿里云的yum仓库作为yum源?

背景 Centos在国内访问官方yum源慢&#xff0c;可以用国内的yum源&#xff0c;本文以阿里云yum源为例说明。 快速命令 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.a…...

力扣139-单词拆分(Java详细题解)

题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完背包&#xff0c;所以现在的题解都是以背包问题为基础再来写的。 如果大家不懂背包问题的话&#…...

CSS —— display属性

用于指定一个元素在页面中的显示方式 HTML中标签元素大体被分为三种类型&#xff1a;块元素、行内元素和行内块元素 块元素 &#xff1a;block 1.独占一行 2.水平方向&#xff0c;占满它父元素的可用空间&#xff08;宽度是父级的100%&#xff09; 3.垂直方向&#xff0c;占据的…...

BTC ETF资金流入暴涨400%,市场下一步将如何发展?

近期&#xff0c;BTC现货ETF&#xff08;交易所交易基金&#xff09;市场出现了显著的资金流入&#xff0c;尤其是在9月10日&#xff0c;BTC ETF吸引了近1.17亿美元的资金流入&#xff0c;相较于前一天的3729万美元&#xff0c;暴涨了400%。这种现象引发了市场广泛关注&#xf…...

视频监控管理平台LntonAIServer视频智能分析抖动检测算法应用场景

在视频监控系统中&#xff0c;视频画面的稳定性对于确保监控效果至关重要。抖动现象是指视频画面中存在不稳定或频繁晃动的情况&#xff0c;这可能会影响视频的清晰度和可读性。LntonAIServer通过引入抖动检测功能&#xff0c;帮助用户及时发现并解决视频流中的抖动问题&#x…...

初识php库管理工具composer的体验【爽】使用phpword模板功能替换里面的字符串文本

需求&#xff1a; 做了一个租赁的项目&#xff0c;里面要求签署个人授权协议&#xff0c;里面要填写姓名&#xff0c;手机号&#xff0c;身份证号&#xff0c;签署日期等参数&#xff0c;格式如下图 格式&#xff1a; 如上图&#xff0c;word中的字符串模板变量使用${varname…...

每日一问:C++ 如何实现继承、封装和多态

每日一问&#xff1a;C 如何实现继承、封装和多态 C 是一门面向对象编程语言&#xff0c;通过继承、封装和多态这三个核心特性实现了对复杂系统的高效管理和扩展。继承让代码重用性得以提升&#xff0c;封装保护数据的完整性&#xff0c;而多态通过不同的接口实现了灵活性。本文…...

STM32常用数据采集滤波算法

例如&#xff0c;STM32进行滤波处理时&#xff0c;主要目的是处理数据采集过程中可能产生的噪声和尖刺信号。这些噪声可能来自电源干扰、传感器自身的不稳定性或其他外部因素。 1.一阶互补滤波 方法&#xff1a;取a0~1,本次滤波结果&#xff08;1-a&#xff09;本次采样值a上…...

二分系列(二分查找)9/12

一、分情况讨论 1.左闭右闭:[left,right] 因为是左闭右闭&#xff0c;所以left和right都能直接取到。 #这里将>放到一起&#xff0c;当nums[mid]>target的时候&#xff0c; 要更新右边界&#xff0c;rightmid-1,这样就把一些相同的情况也切出去了 可以理解为找的第一个…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...