【LVS实战】01 LVS介绍

news2024/11/19 19:20:56

一、LVS是什么

LVS(Linux Virtual Server),是一个极好的负载均衡解决方案,它将一个真实服务器集群虚拟成一台服务器来对外提供服务,同时在真实服务器集群中实现了负载均衡。该技术由章文嵩博客发起,从linux2.4开始已经被收录到linux核心中。

二、LVS有什么用

随着互联网在人们生活中的普及,企业级应用迎来了海量数据的冲击,如微信、美团外卖、微信支付等应用每天的使用人数都在千万以上,仅靠单台机器提供服务已经行不通了。
我们可以使用多台服务器分摊这些压力,当一定数量的服务器作为一个整体对外提供服务,并且分摊压力时,我们可以称这些服务器为“负载均衡集群”。LVS就是一个优秀的负载均衡集群方案,它理论上能够无限水平扩展,使得服务能够应对海量数据的冲击。

三、LVS的原理是什么

首先描述一下LVS中的一些术语:

  • VS:Virtual Server 虚拟服务器,通常是分发器
  • RS:Real Server 实际提供服务器的真实服务器
  • CIP:Client IP 客户的客户端IP
  • VIP:Virtual Server IP 虚拟服务器的IP
  • RIP:Real Server IP 真实服务器的IP
  • DIP:Director IP 分发器的IP
  • CIP <–> VIP == DIP <–> RIP 客户端访问VIP,DIP将请求转发到RIP
    LVS的原理如下图所示:
    在这里插入图片描述

分发服务器以VIP对外提供服务器,当接收到客户端服务请求时,便根据预定的分发策略(例如轮询)将请求分发到Real Server中,由Real Server做实际的业务处理。当Real Server处理完成后,根据不同的模式,会使用不同的方式返回请求结果。

四、 LVS的3种工作模式

根据服务返回方式和集群分布的不同,LVS有3中不同的工作模式,他们分别是:NAT(地址转换)模式、DR(直接路由)模式和TUN(隧道)模式。

4.1 NAT地址转换模式

NAT地址转换模式是最为简单的一种模式,它的原理如下图所示(为了简洁,用户只画了一个):
NAT其实就是通过网络地址转换来实现负载均衡的,下面是它的请求流程:
在这里插入图片描述

  • 分发服务器Director Server(后面简称DS)接受到请求后,通过分发策略得出要将此请求分发到Real Server1。于是将请求报文的目的地址改为RIP1,发送出去。
  • Real Server1收到一个目标地址为自己的数据包,于是接受并进行处理。
    处理完成后,Real Server1将RIP1——>CIP的数据包发送出去。
  • DS接收到RIP1——>CIP的数据包后,将源地址改为VIP,然后发送出去:VIP——>CIP。

这个过程中,DS仅仅起到一个地址转换和分发的作用。在NAT模式中,请求和响应报文都要通过DS,当真实服务器的数量越来越多时,分发器DS将会成为整个集群系统的性能瓶颈。下面的DR模式解决这个问题。

4.2 DR直接路由模式

互联网应用中存在一个规律:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器(Director)中只负责调度请求而响应直接由RealServer返回给客户,将极大地提高整个集群系统的吞吐量。这就是DR的实现原理,原理图如下所示:
在DR模型中,只有在请求的时候会经过DR,响应的数据包由Real Server直接返回给用户,该模式是3中模式中最常用的。它的请求过程如下所示:
在这里插入图片描述

DR接受到请求后,通过分发策略得出要将此请求分发到Real Server2。DS就将数据帧中的目标MAC地址修改为Real Server2的MAC地址,然后再将数据帧发送出去。(为什么要用MAC地址?因为此时Real Server也有配置有VIP
当Real Server2 收到一个源地址为CIP目标地址为VIP的数据包时,Real Server2发现目标地址为VIP,而VIP是自己,于是接受数据包并给予处理。
Real Server2处理完成后,会将一个源地址为VIP而目标地址为CIP的数据包发送出去,此时的响应请求就不会再经过DS,而是直接响应给用户了。
在这个过程中存在一个问题,由于RealServer也配置了VIP,那么当CIP——>VIP的数据包到达服务局域网,进行广播时,所有的服务器都会进行应答,此时先应答的服务器就会收到数据包,这样就失去了负载均衡的能力。因此在使用DR模式时,通常会采用一些方式来确保请求数据包只会由DS接收,例如抑制Real Server对广播的应答,或者直接在路由器中对DS进行绑定等。

4.3 TUN隧道模式

TUN模式与DR模式非常相似,它同样是只有请求信息会经过DS,应答信息由Real Server直接返回给用户。不过DR模式中,要求DS和所有的Real Server必须在一个局域网中(可以直接用MAC地址到达),而TUN模式去掉了这个限制。
TUN模式原理图如下所示:
在这里插入图片描述

在TUN模式中,DS与Real Server不必在一个网络中。DS在接到请求报文之后,在报文的上面再加一层源地址为DIP,目的地址为RIP2的IP首部,然后通过广域网发送到Real Server2。
Real Server2收到报文,拆掉报文以后发现了里面还有一个封装,它就知道了,这就是隧道。后续的过程就与DR一样了。

五、 LVS的调度算法

LVS的调度算法是指LVS对于请求的分发方式。DS在向Real Server分发请求实现负载均衡时,有10种不同的算法:

  • 轮询(Round Robin,rr):在Real Server之间轮流分配请求。
  • 加权轮询(Weighted Round Robin,wrr):有权重地进行轮询。
  • 最少链接(Least Connnections,lc):将请求发送给连接数最少的RS。
    加权最少链接(Weighted Least Connnections,wlc):分发给基于权重的最少链接。
  • 基于局部性的最少链接(Locality-Based Least Connections,lblc):首先根据目标IP地址找出最近使用的服务器,如果该服务器可用且没有超载(一半的工作负荷),则将请求发送到该服务器。否则,使用“最少链接”原则。
  • 带复制的基于局部性最少链接(Locality-Based Least Connections with
    Replication,lblcr):它与lblc的不同之处是它要维护从一个目标IP到一组服务器的映射,而lblc值维护从一个目标IP到一台服务器的映射。
  • 目标地址散列(Destination Hashing,dh):使用请求的目标IP地址作为散列键,从静态分配的散列表找出对应的服务器,若该服务器可用且未超载,则转发请求,否则返回空。
  • 源地址散列(Source Hashing,sh):使用请求的源IP地址作为散列键,从静态分配的散列表找出对应的服务器,若该服务器可用且未超载,则转发请求,否则返回空。
  • 最短期望延迟(Shortest Expecte Delay,sed):“最短的期望的延迟”是基于WLC算法的,只是其计算方法不同。具体算法如下:(active+1)*256/weight
  • 最少队列调度(Never Queue Scheduling):无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行SED运算。如果没有服务器连接数为空闲,则使用SED算法。

五、实现原理

如果我们要实现上面的将请求转发到后面的realServer上,需要借助一个管理工具,它就是ipvsadm
我们可以将ipvsadm理解成一个用户工具,我们需要借助这个工具定义LVS集群规则。
但是,我们通过ipvsadm定义的规则最终还要依靠ipvs才能生效,我们可以这样理解,ipvs才是核心,但是作为管理员,我们需要通过ipvsadm才能定义规则,ipvs会根据我们定义的规则进行工作,ipvsadm工作于用户空间,ipvs工作于内核空间,ipvsadm与ipvs的关系,就好比iptables与netfilter的关系。
综上所述,LVS由两部分组成,ipvs与ipvsadm

  • ipvsadm:LVS管理工具,管理员通过ipvsadm定义或管理集群规则。
  • ipvs:LVS核心实现,根据定义好的集群规则进行工作。

其实,ipvs是与netfilter结合在一起使用的,2.4.X版本以后的内核中,ipvs作为netfilter的模块存在。
还记得iptables中的5条链吗?如果你忘了,请回顾本博客中的iptables系列文章,而ipvs其实就是附属在INPUT链上进行工作的,示意图如下
在这里插入图片描述

当客户端访问服务时,会访问VIP+端口,所以,客户端的请求报文会发往调度器,请求报文会先经过PREROUTING链,然后进行路由判断,由于此刻报文的目标IP为VIP,而VIP对于调度器来说,就是本身的IP,所以报文会经过INPUT链,此刻,如果IPVS发现报文访问的VIP+端口与我们定义的LVS集群规则相符,ipvs则会根据定义好的规则与算法,将报文直接发往POSTROUTING链,然后报文则会发出,最后到达后端的RealServer中。

六、LVS的优缺点是什么

6.1 LVS的优点有:

  • 工作在网络层,可以实现高性能、高可用的服务器集群技术。
    廉价,可把许多低性能的服务器组合在一起形成一个水平扩展的集群服务器。
  • 易用,配置非常简单,且有多重负载均衡的方法
  • 稳定可靠,即使集群中的一台服务器挂掉,也不影响整体服务效果。
  • 可扩展性好,可以用户透明地进行水平扩展,加减机器非常方便。

6.2 LVS的缺点:

  • 由于是通用组件,因此不能对特定业务进行针对优化。
  • 对于长连接无法进行负载均衡。
  • 自身没有健康状态检查,需要结合脚本或者Keepalived等软件实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无公网IP,如何使用公网SSH远程访问家中的树莓派?

文章目录 前言如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地址…

Android NDK开发详解之ndk-build 脚本

Android NDK开发详解之ndk-build 脚本 内部原理从命令行调用选项可调试 build 与发布 build要求 ndk-build 脚本使用 NDK 的基于 Make 的构建系统构建项目。我们针对 ndk-build 使用的 Android.mk 和 Application.mk 配置提供了更具体的文档。 内部原理 运行 ndk-build 脚本相…

联想电脑怎么录屏?两个实用方法,快速搞定

“联想电脑怎么录屏呀&#xff1f;刚买的联想电脑&#xff0c;本来打算用来直播&#xff0c;但是现在发现不会录屏&#xff0c;上网查了很久也没有解决方法&#xff0c;真的很头疼&#xff0c;希望大家帮帮我&#xff01;” 联想是世界知名的电子产品制造商之一&#xff0c;它…

数据集成实现以及平台安装部署入门

ETLCloud是什么?** ETLCloud是一个提供了一套工具和服务的数据集成平台&#xff0c;用于将数据从不同的来源抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;到目标系统中。ETL代表了这个过程的三个主要步骤。…

Mybatis—XML配置文件、动态SQL

学习完Mybatis的基本操作之后&#xff0c;继续学习Mybatis—XML配置文件、动态SQL。 目录 Mybatis的XML配置文件XML配置文件规范XML配置文件实现MybatisX的使用 Mybatis动态SQL动态SQL-if条件查询 \<if\>与\<where\>更新员工 \<set\>小结 动态SQL-\<forea…

空气质量查询API促使空气数据可视化

引言 在当今的现代化社会中&#xff0c;关注和改善空气质量已成为人们共同的关切。随着科技的不断发展&#xff0c;空气质量查询API为我们提供了一种前所未有的方式来实时监测、分析和改善我们所处的环境。这一工具不仅让我们更深入地了解空气质量&#xff0c;还鼓励了空气数据…

组件化npm包打包和使用

背景&#xff1a;本地环境对功能组件提取&#xff0c;开发环境下通过本地路径引用&#xff0c;发布模式下走npm包引用 1、项目下新建packages/HelloWorld文件夹&#xff0c;在此文件夹下运行终端 npm init 新建packages/HelloWorld/index.vue文件 新建packages/HelloWorld/ind…

Realrek 2.5G交换机 8+1万兆光RTL8373-VB-CG方案简介

新一代2.5G交换机方案RTL8373-VB-CG可以提供4中不同形态 a. 52.5G 电口110G光》RTL8373 b. 52.5G 电口110G电》RTL83738261 c. 82.5G 电口110G光》RTL83738224 d.82.5G 电口110G电口》RTL837382248261 1.概述 Realtek RTL8373-CG是一款低功耗、高性能、高度集成的八端口2.5G和一…

关于集合遇到的坑

public void invoke(ComparisonSpotEvaluationResultsExcel comparisonSpotEvaluationResultsExcel, AnalysisContext analysisContext) {/*** 记录行号码*/ReadRowHolder readRowHolder analysisContext.readRowHolder();Integer rowIndex readRowHolder.getRowIndex();Stri…

小程序开发——小程序项目的配置与生命周期

1.app.json配置属性 app.json配置属性 2.页面配置 app的页面配置指的是pages属性&#xff0c; pages数组的第一个页面将默认作为小程序的启动页。利用开发工具新建页面时&#xff0c;则pages属性对应的数组将自动添加该页面的路径&#xff0c;若是在硬盘中添加文件的形式则不…

连接数据库加密方式

首先需要一个加密的类&#xff0c;我们这里使用的是RSAUtil类&#xff1a; package com.ebs.common.util;import org.apache.commons.codec.binary.Base64; import org.springframework.stereotype.Component;import javax.crypto.Cipher; import java.io.ByteArrayOutputStre…

Selenium3-获取元素的css属性

来个元素CSS值 代码1: 通过javaScript执行脚本获取css值 String jsStr "return document.getElementById(\"buyers\").style.getPropertyValue(width)"; Object o ((JavascriptExecutor) driver).executeScript(jsStr); System.out.println(o.toString(…

webJL

3D开发初体验&#xff0c;入门教程 效果图&#xff1a; 结合VUE的实现代码&#xff1a; <template><view class""><view id"aaa" ref"webglContainer"></view></view> </template><script>import *…

谈思生物医疗直播 | 霍德生物研发中心负责人王安欣博士“iPSC衍生神经细胞产品全悬浮自动化工艺及特殊质控方法开发”

iPSC通过人体来源的终端体细胞重编程而来&#xff0c;其衍生细胞产品的生产与质控面临着诸多挑战&#xff0c;但也解决了许多自体细胞治疗的不稳定性和高成本等产业化难点。例如自体细胞不仅供体之间的差异对产品质量可能造成影响&#xff0c;即使同一个供体&#xff0c;体细胞…

纯css实现手机端loading

纯css实现手机端loading <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"wid…

3D网页游戏外包开发引擎

3D网页开发引擎是用于创建具有三维图形、虚拟现实和交互性的网页应用程序的工具。以下是一些常用的3D网页开发引擎以及它们的主要特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Three.js&…

内置视图联动查看器,实现数据关联分析

前言 在数据驱动业务发展的今天&#xff0c;数据的关联分析变得越来越重要。作为一种强大的数据挖掘工具&#xff0c;它可以帮助企业发现数据之间的关联和模式&#xff0c;从而更好地理解市场和客户的行为。通过关联分析&#xff0c;企业可以发现看似无关的数据之间的联系&…

Android NDK开发详解之Application.mk探秘

Android NDK开发详解之Application.mk探秘 概览变量APP_ASFLAGSAPP_ASMFLAGSAPP_BUILD_SCRIPTAPP_CFLAGSAPP_CLANG_TIDYAPP_CLANG_TIDY_FLAGSAPP_CONLYFLAGSAPP_CPPFLAGSAPP_CXXFLAGSAPP_DEBUGAPP_LDFLAGSAPP_MANIFESTAPP_MODULESAPP_OPTIMAPP_PLATFORMAPP_PROJECT_PATHAPP_STL…

怎么实现在外远程访问连接家里内网的威联通NAS?

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后&#xff0c;很多用户对于如何在外在公网环境下的远程访问威联通NAS…

1.5 安全机制

思维导图&#xff1a; 1.5 安全机制 X.800标准定义了一系列的安全机制&#xff0c;这些机制主要可分为两大类&#xff1a; 特定的安全机制&#xff1a;这些机制特定于某一协议层&#xff0c;例如TCP或应用层协议。普遍的安全机制&#xff1a;这些机制并不限制于任何特定的协议…