LVS -- 四种工作模式的优缺点比较(NAT/TUN/DR/FULLNAT)

2024-02-19 08:38

本文主要是介绍LVS -- 四种工作模式的优缺点比较(NAT/TUN/DR/FULLNAT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LVS模式
  • LVS:Linux Virtual Server,Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
  • 工作在TCP/IP协议的四层,其转发是依赖于四层协议的特征进行转发,由于其转发要依赖于协议的特征进行转发,因此需要在内核的TCP/IP协议栈进行过滤筛选,这就需要在内核的模块来完成,而这样的过滤转发规则又是由管理员进行定义。
  • LVS是两段式的架构设计,在内核空间中工作的是”ipvs”,而在用户空间中工作的,用来定义集群服务规则的是”ipvsadm”。这就很容易想到iptables,而LVS正好工作在iptables的input链上。
LVS的组成
  • ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间。
  • ipvs:IP虚拟服务器(IP Virtual Server),简写为IPVS,为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)。
内核状态
  • kernel 2.6.x 已內建 LVS 模组
  • kernel 2.4.x 需打补丁
  • rhel5 预设安裝即可使用 LVS 模组, 另以 yum 安裝 ipvsadm 套件
  • Linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能。
LVS中每个主机IP地址的定义
  • VIP:Director用来向客户端提供服务的IP地址,也是DNS解析的IP
  • RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址
  • DIP:Director用来和RIP进行交互的IP地址
  • CIP:公网IP,客户端使用的IP
LVS的四种转发模式
  • DR: 直接路由 (Direct routing)
  • TUN: IP隧道 (IP tunneling)
  • NAT: 网络地址转换 (Network address translation)
  • FullNAT: 网络地址转换
DR
  • client -> vs -> Rs ->client
  • 修改目标MAC
  • 请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS。
  • 负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。
  • DR模式是性能最好的一种模式。
  • 调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连。
  • LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
TUN(隧道)
  • client ->vs ->Rs -> client
  • 各集群节点可以跨越不同的网络,不用在同一个VLAN
  • 调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器
  • 服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现 VIP地址被配置在本 地的 IP 隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户
NAT
  • client -> vs -> Rs ->vs ->client
  • 服务器可以运行任何支持 TCP/IP 的操作系统
  • 只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。
  • 伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。
  • LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
FullNAT
  • 抗攻击,跨vlan
  • 解决了跨VLAN的问题。采用这种方式,LVS和RS的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性。
调度算法
  • LVS 的负载调度算法 在内核中的连接调度算法上,IPVS 已实现了以下八种调度算法
  • 轮叫调度(Round­Robin Scheduling )
    (1)轮叫的方式依次将请求调度不同的服务器
    (2)算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
  • 加权轮叫调度(Weighted Round­Robin Scheduling )
    (1)解决服务器间性能不一的情况,
    (2)按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服 务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
  • 最小连接调度(Least­Connection Scheduling )
    (1)把新的连接请求分配到当前连接数最小的服务器。
    (2)一种动态调度算法,它通过服务器当前所活跃的连接数来估计服
    务 器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加 1;当连接中止或超时,其连接数减一。
  • 加权最小连接调度(Weighted Least­Connection Scheduling)
    (1)最小连接调度的超集,各个服务器用相应的权值表示其处理性能。
    (2)服务器的缺省权值为1,系统管理员可以动态地设置服务器的权 值。
    (3)加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
  • 基于局部性的最少链接(Locality­Based Least Connections Scheduling )
    (1)简称LBLC算法,针对请求报文的目标 IP 地址的负载均衡调度,目前主要用于 Cache 集群系统,因为在 Cache 集群中 客户请求报文的目标 IP 地址是变化的。
    (2)假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存 Cache 命中率,从而整个集群系统的处理能力。
    (3)LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用 “ 最少链接 ” 的原则选出一个可用的服务器,将请求发送到该服务器。
  • 带复制的基于局部性最少链接(Locality­Based Least Connections with Replication Scheduling)
    (1)简称 LBLCR算法,也是针对目标 IP 地址的负载均衡,目前主要用于 Cache集群系统。它与 LBLC 算法的不同之处是它要维护从一个目标 IP 地址到一组服务器的映射。
    (2)LBLCR 算法先根据请求的目标 IP 地址找出该目标 IP 地址对应的服务器组;按 “ 最小连接 ” 原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按 “ 最小连接 ” 原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服 务器从服务器组中删除,以降低复制的程度。
  • 目标地址散列调度(Destination Hashing Scheduling)
    (1)针对目标 IP 地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标 IP 地址映射到一台服务器。
    (2)目标地址散列调度算法先根据请求的目标 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
  • 源地址散列调度(Source Hashing Scheduling)
    (1)源地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反
    (2)它根据请求的源 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
    (3)它采用的散列函数与目标地址散列调度算法 的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标 IP 地址换成请求的源 IP 地址。
    (4)在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

这篇关于LVS -- 四种工作模式的优缺点比较(NAT/TUN/DR/FULLNAT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724124

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock