精华内容
下载资源
问答
  • k8s之集群调度

    2021-08-25 10:13:48
    Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很要考虑的问题: 公平:如何保证每个节点都能被分配资源 资源高效利用:集群所有资源最大化被使用 效率:...

    调度说明

    简介
    Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:
    公平:如何保证每个节点都能被分配资源
    资源高效利用:集群所有资源最大化被使用
    效率:调度的性能要好,能够尽快地对大批量的 pod 完成调度工作
    灵活:允许用户根据自己的需求控制调度的逻辑
    Sheduler 是作为单独的程序运行的,启动之后会一直坚挺 API Server,获取 PodSpec.NodeName 为空的 pod,对每个 pod 都会创建一个 binding,表明该 pod 应该放到哪个节点上。
    调度过程
    调度分为几个部分:首先是过滤掉不满足条件的节点,这个过程称为 predicate ;然后对通过的节点按照优先级排序,这个是 priority ;最后从中选择优先级最高的节点。如果中间任何一步骤有错误,就直接返回错误。
    Predicate 有一系列的算法可以使用:
    PodFitsResources :节点上剩余的资源是否大于 pod 请求的资源
    PodFitsHost :如果 pod 指定了 NodeName,检查节点名称是否和 NodeName 匹配
    PodFitsHostPorts :节点上已经使用的 port 是否和 pod 申请的 port 冲突
    PodSelectorMatches :过滤掉和 pod 指定的 label 不匹配的节点
    NoDiskConflict :已经 mount 的 volume 和 pod 指定的 volume 不冲突,除非它们都是只读
    如果在 predicate 过程中没有合适的节点,pod 会一直在 pending 状态,不断重试调度,直到有节点满足条件。经过这个步骤,如果有多个节点满足条件,就继续 priorities 过程: 按照优先级大小对节点排序。
    优先级由一系列键值对组成,键是该优先级项的名称,值是它的权重(该项的重要性)。这些优先级选项包括:
    LeastRequestedPriority :通过计算 CPU 和 Memory 的使用率来决定权重,使用率越低权重越高。换句话说,这个优先级指标倾向于资源使用比例更低的节点
    BalancedResourceAllocation :节点上 CPU 和 Memory 使用率越接近,权重越高。这个应该和上面的一起使用,不应该单独使用
    ImageLocalityPriority :倾向于已经有要使用镜像的节点,镜像总大小值越大,权重越高
    通过算法对所有的优先级项目和权重进行计算,得出最终的结果
    自定义调度器
    除了 kubernetes 自带的调度器,你也可以编写自己的调度器。由spec:schedulername 参数指定调度器的名字,可以为 pod 选择某个调度器进行调度。比如下面的 pod 选择 my-scheduler 进行调度,而不是默认的default-scheduler :
    在这里插入图片描述

    亲和性

    节点亲和性
    pod.spec.nodeAffinity
    preferredDuringSchedulingIgnoredDuringExecution:软策略
    requiredDuringSchedulingIgnoredDuringExecution:硬策略
    requiredDuringSchedulingIgnoredDuringExecution:
    在这里插入图片描述
    preferredDuringSchedulingIgnoredDuringExecution:
    在这里插入图片描述
    合体:
    在这里插入图片描述
    键值运算关系
    In:label 的值在某个列表中
    NotIn:label 的值不在某个列表中
    Gt:label 的值大于某个值
    Lt:label 的值小于某个值
    Exists:某个 label 存在
    DoesNotExist:某个 label 不存在
    Pod 亲和性
    pod.spec.affinity.podAffinity/podAntiAffinity
    preferredDuringSchedulingIgnoredDuringExecution:软策略
    requiredDuringSchedulingIgnoredDuringExecution:硬策略
    在这里插入图片描述
    亲和性/反亲和性调度策略比较如下:
    在这里插入图片描述

    污点

    节点亲和性,是 pod 的一种属性(偏好或硬性要求),它使 pod 被吸引到一类特定的节点。Taint 则相反,它使节点 能够 排斥 一类特定的 pod。
    Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod上,则表示这些 pod 可以(但不要求)被调度到具有匹配 taint 的节点上。
    污点(Taint)
    Ⅰ、 污点 ( Taint ) 的组成
    使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,甚至将 Node 已经存在的 Pod 驱逐出去,每个污点的组成如下:key=value:effect
    每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。当前 tainteffect 支持如下三个选项:
    NoSchedule :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上
    PreferNoSchedule :表示 k8s 将尽量避免将 Pod 调度到具有该污点的 Node 上
    NoExecute :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去
    Ⅱ、污点的设置、查看和去除

    kubectl taint nodes node1 key1=value1:NoSchedule #设置污点
    kubectl describe pod pod-name  #节点说明中,查找 Taints 字段
    kubectl taint nodes node1 key1:NoSchedule-   #去除污点
    

    容忍(Tolerations)
    设置了污点的 Node 将根据 taint 的 effect:NoSchedule、PreferNoSchedule、NoExecute 和 Pod 之间产生互斥的关系,Pod 将在一定程度上不会被调度到 Node 上。 但我们可以在 Pod 上设置容忍 ( Toleration ) ,意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。
    pod.spec.tolerations
    在这里插入图片描述
    其中 key, vaule, effect 要与 Node 上设置的 taint 保持一致
    operator 的值为 Exists 将会忽略 value 值
    tolerationSeconds 用于描述当 Pod 需要被驱逐时可以在 Pod 上继续保留运行的时间
    Ⅰ、当不指定 key 值时,表示容忍所有的污点 key

    tolerations:
    - operator: "Exists"
    

    Ⅱ、当不指定 effect 值时,表示容忍所有的污点作用

    tolerations:
    - key: "key"
      operator: "Exists"
    

    Ⅲ、有多个 Master 存在时,防止资源浪费,可以如下设置

    kubectl taint nodes Node-Name node-role.kubernetes.io/master=:PreferNoSchedule
    

    固定结单调度

    指定调度节点
    Ⅰ、Pod.spec.nodeName 将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策略,该匹配规则是强制匹配
    在这里插入图片描述
    Ⅱ、Pod.spec.nodeSelector:通过 kubernetes 的 label-selector 机制选择节点,由调度器调度策略匹配 label,而后调度 Pod 到目标节点,该匹配规则属于强制约束
    在这里插入图片描述

    展开全文
  • 集群调度LSF-学习笔记

    2021-10-28 19:49:59
    集群调度-LSF:LSF 是一种强大的工作负载管理平台,提供基于各种策略的智能调度功能,利用分布式的基础架构资源来提高整体的系统性能。用户通过 LSF可以实现集群间的负载均衡,扩展集群构架和资源,最大限度的提高...

    集群-------多台设备
    HPC集群----多台用于计算的设备

    集群调度-LSF:LSF 是一种强大的工作负载管理平台,提供基于各种策略的智能调度功能,利用分布式的基础架构资源来提高整体的系统性能。用户通过 LSF可以实现集群间的负载均衡,扩展集群构架和资源,最大限度的提高集群的使用效率。

    主要命令:

    bsub             命令提交
    bqueues        队列查看
    bhosts          节点查看
    bjobs            作业查看


    运行bqueues:

    QUEUE_NAME:队列名称

    PRIO:优先级

    NJOBS:几个作业在并行

    PEND:阻塞的作业数量

    RUN:正在运行的作业数量

    SUSP:挂起的作业数量

    提交作业:bsub < demo.sh

    demo.sh:

    #BSUB -J testJob
    #BSUB -n 28
    #BSUB -o %J.out
    #BSUB -e %J.err
    #BSUB -q normal
    
    echo "111"

    -J 作业名称

    -n 作业至少需要的CPU核数(28的倍数),也可以是范围(表示方法如[28,56])

    -o 标准输出文件

    -i 标准输入文件

    -e 标准错误输出文件

    -q 作业所提交队列名

    -o -i -e 三个参数的文件名中可以包含%J用于表示JOBID;如果没有指定标准输出文件,那么系统会自动设定为 output_%J;如不想要输出文件请设置 -o /dev/null。

    执行 bsub < demo.sh 后,成功加入队列将显示:

    Job <175039> is submitted to queue <normal>.

    查看作业运行情况:bjobs

    查看作业详情:bjobs -l 作业号

    终止指定的作业:bkill   作业号

    查看任务日志,显示处于运行时作业的标准输出和标准错误输出信息:

    bpeek  -f  作业号  

    显示节点当前负载:lsload

    module av  查看可用软件

    module load xxx  加载所需软件 

    lsload  -gpuload  查看gpu各个卡的信息

    展开全文
  • 导读:随着公司业务的快速发展,离线计算集群规模和提交的作业量持续增长,如何支撑超大规模集群,如何满足不同场景的调度需求成为必须要解决的问题。基于以上问题,快手大数据团队基于YARN做了大量...

    导读:随着公司业务的快速发展,离线计算集群规模和提交的作业量持续增长,如何支撑超大规模集群,如何满足不同场景的调度需求成为必须要解决的问题。基于以上问题,快手大数据团队基于YARN做了大量的定制和优化,支撑了不同场景下的资源调度需求。

    今天的介绍会围绕下面四点展开:

    • 调度相关背景及快手数据规模与场景

    • 快手调度器Kwai scheduler介绍

    • 多调度场景优化介绍

    • 其他工作&未来规划

    01

    快手数据规模场景

    1. 快手数据规模

    目前快手离线计算单集群数万台机器,每日处理数百P数据量,百万级别作业,对大数据存储,计算,调度有非常大的挑战。首先介绍下快手大数据架构体系技术栈。

    2. 快手大数据体系架构介绍

    快手大数据架构底层采用hdfs/hbase构建数据存储层,用于支撑海量数据的存储;上层是YARN资源调度层,实现百万级别的作业和任务调度;再上层是各种计算引擎构成的执行层,如Flink、MR、SPARK,PRESTO,TensorFlow等计算框架用于执行业务的计算任务,最上层属于应用层如FLink作业托管平台,机器学习平台,以及SQL提交平台,面向用户提供服务。本次分享的YARN属于资源调度层,用于把计算引擎的Task快速调度到合适的机器上。

    3. YARN资源调度系统介绍

    YARN背景介绍:

    YARN是Apache Hadoop旗下的顶级项目,Hadoop 2.0发布时引入,主要用于解决hadoop1.0面临的集群调度性能和扩展性问题。通过把集群资源管理和作业资源管理拆分成ResourceManager和ApplicationMaster两个组件,实现调度架构从单级架构向二级架构的转变,提升了集群性能。YARN专注于集群资源管理和调度,包含ResourceManager和NodeManager两个核心组件;ResourceManager负责集群资源管理和分配;NodeManager在每台机器上部署,负责管理所在机器上资源。

    YARN调度器演进过程:

    原生YARN在调度过程中,先选择一个节点,并对队列进行排序,递归从root队列找到最优的叶子队列,再对叶子队列中运行的app进行排序,选出app在这个节点上调度资源。随着集群规模增长和队列数目的增加,调度耗时越来越长,调度吞吐成为制约集群规模的主要瓶颈。为提升调度吞吐,调度器的发展经历了三个阶段:第一阶段通过心跳触发调度过程,实现比较简单,但心跳处理逻辑和调度逻辑在同一个线程,调度和心跳处理逻辑会相互影响。第二阶段将调度逻辑剥离到单独的线程以降低调度和心跳逻辑耦合性,从而提升了调度性能;但调度逻辑和心跳处理共享一把大锁,并且调度过程中对队列排序占据大量时间,整体性能提升有限。第三阶段引入全局调度器的概念,可以并发对队列资源进行调度,最终通过统一的commit过程保证调度结果一致性。多线程并发调度可以提升调度性能,但没有解决调度过程中排序耗时过多问题,并且引入的多线程调度,会损害调度结果的公平性。

    快手基于fair scheduler 单线程调度版本,不断优化单线程调度的性能,但由于单线程调度的局限性,在集群节点接近万台规模时,集群性能出现瓶颈;上线自研的kwai scheduler调度器后,在集群调度性能上有极大的提升,目前单集群规模已达数万台,同时在调度策略方面,支持可插拔的调度架构,方便扩展新的调度策略。

    02

    Kwai scheduler调度器介绍

    kwai scheduler主要用于解决调度性能问题以及调度策略扩展性问题。性能方面,传统的调度器一次只能调度一个task,并且在调度过程中需要对所有队列以及APP进行排序,有很大的资源开销;kwai scheduler采用多线程并发批量调度模式,一轮可以调度数十万个task。在调度策略方面,传统的调度器先选择节点再选择APP,难以扩充新调度策略。kwai scheduler先选择 APP再选择节点,从而APP可以看到所有节点信息,通过对节点进行过滤与打分排序,可以针对不同场景扩展不同的调度策略。

    1. 基于集群状态做全局批量调度

    Kwai scheduler整体架构如上图所示,ResouceManager中RPC层和事件处理层基本保持不变,主要改动点是将调度逻辑做一个整体的剥离替换原先的fair scheduler调度。每次调度过程中拉取集群状态做镜像,基于集群镜像并发批量调度,调度完成后,将调度结果推送回去。App可以通过原有的心跳接口获取调度container。

    2. Kwai scheduler 调度流程

    Kwai scheduler 基于集群镜像(节点的资源使用情况;队列的最小资源和最大资源量,以及当前资源使用量,APP资源使用量和资源需求量等)进行资源的预分配,计算出每个APP可以在这一轮调度中分配多少资源。APP根据预先分配到的资源量,并发去竞争节点上的空闲资源,如果竞争成功,完成APP的资源调度过程。

    APP资源调度过程中,可以根据不同场景为 APP配置不同的调度策略,根据调度策略过滤节点并计算每个节点分数,选出分数最高节点尝试进行资源分配。调度过程中基本都是CPU密集操作,避免了锁的干扰(不同APP竞争节点资源时有轻量的自旋锁),有非常高的性能。并且不同的APP可以多线程并发调度,具备很好的扩展性。

    3. Kwai scheduler 调度策略

    Kwai scheduler 调度策略主要实现filter和score接口。filter接口用于过滤节点,score根据节点信息,为节点进行打分,然后选出最优节点进行调度。比如APP task打散策略,根据每个节点分配的APP资源量,对节点进行打分,节点上分配的APP资源量越多,节点分数越低,从而把APP的task在集群范围内打散到不同的节点。

    4. Kwai scheduler调度线上效果

    Kwai scheduler 上线后,支撑单集群数万台机器,1万+作业同时运行,每天调度吞吐量峰值5w/s+,资源分配率93%+,同时支持不同的调度场景。

    03

    多调度场景优化

    1. 离线ETL场景

    离线场景下如何保障核心作业的SLA是比较核心的问题。在快手,核心作业和普通作业在同一个队列中,通过完善作业分级保障能力和异常节点规避能力,保障核心作业的SLA。

    离线ETL场景中经常会遇到以下情况以及相应的优化方案:

    ① 其他队列作业大量占据资源不释放

    通过优化队列间资源抢占来解决这个问题。为防止抢占影响过大,默认情况下只有高优先级核心作业触发抢占,并且会限制每轮抢占的最大资源量。抢占过程中根据作业优先级,饥饿等待时间等条件动态计算每个队列可以抢占的资源量,从而把资源倾斜给优先级更高,饥饿等待时间更长的作业。

    ② 队列内低优先级作业占据大量资源不释放

    在生产场景下如果低优先级作业占用大量资源不释放,导致优先级比较高的任务无法获取到足够资源,从而导致产出延迟。为解决这个问题提出基于虚拟队列来保障高优先级作业产出。所谓虚拟队列,是在物理队列下,按照一定逻辑规则(比如优先级)抽象出的逻辑队列。每个虚拟队列有一定的资源配额,并且会触发物理队列内部的抢占,从而解决上面的问题。

    ③ 低优先级作业占据app solt不释放

    为方便AppSlot资源的管理,抽象出minApp概念,如果App启动时,队列running App小于minApp,将会立刻启动App,不会受限于父队列的maxRunningApp,这样在队列层面保障有可预期的app slot。但同样存在一个问题,队列内部低优先级作业占据大量AppSlot不释放,导致高优先级作业启动延迟。为此提出了App Slot抢占功能。如下图所示,如果发现高优先级作业(P0)长时间pending不能启动,扫描队列内runningApp,选择低优先级作业进入睡眠模式(不再调度新task,极端情况下回收task)从而释放出slot资源,保障高优先级作业能及时启动。

    ④ 回溯作业影响生产作业

    回溯作业的特点在于大量提交多个作业,如果不加控制可能会影响生产作业的产出。主要方案是限制回溯作业最大资源量和最大运行APP数目,将影响控制在一定的范围以内。但是限制最大资源量和运行数目导致大量回溯作业在yarn处于pending状态,对yarn有比较大的压力,通过与上游调度系统打通,反压上层工作流调度系统,阻止新提交的回溯作业,从而减轻了YARN负载。对于已经提交到yarn上的作业,会限制每个队列最大pending app个数,从而保障总体pending app数目可控。

    ⑤ 高优先级作业大块资源请求不能及时满足

    原有的Reserve机制中,调度器可以reserve一批节点,不再调度新task,等待节点上自然释放资源。如果被reserve节点资源长时间不释放,如何处理?针对这个场景开发了reserve抢占功能,用于抢占reserve节点上的低优先级的container,从而保障节点上有足够的空闲资源启动高优先级作业。

    ⑥ 规避异常节点,避免核心作业长尾

    通过采集节点物理指标,task失败率,task运行速度,以及shuffle失败率等,将此节点标记为异常节点,不再调度新Task。从而尽量减少异常节点的影响范围,规避其导致的Task长尾,失败问题。

    2. Adhoc即时查询场景

    AdHoc场景主要着力于提升每个用户的查询体验。

    通过虚拟队列技术,从user维度来划分虚拟队列,实现基于user公平的资源的分配,配合基于user的资源抢占,从而避免大量资源被某一个用户占用,导致其他用户长时间得不到资源。

    3. 机器学习训练场景

    机器学习训练场景下,资源需求呈现all or nothing特点,在队列资源紧张时,如果基于yarn原生的公平调度方式,为每个app分配部分资源,容易产生资源分配死锁问题。为此我们采用APP轮转调度策略,采用类似FIFO策略,保障头部APP(头部会动态变化,轮转策略名称的由来)的资源需求,避免死锁问题。

    4. Flink实时作业场景

    FLink实时场景下,主要介绍故障发生时,如何尽量减少故障的影响范围,以及如何快速恢复故障作业:

    • 通过cpu均衡调度,避免机器cpu热点。

    • 通过AM失败节点规避机制,避免调度到AM失败机器。

    • NM挂起(不调度新Task,介于RUNNING和LOST状态)机制,防止NM异常退出导致Task失败。

    • 基于Hawk秒级发现节点宕机,快速进行作业恢复。

    虽然可以基于Hawk秒级发现节点宕机,但作业恢复过程可能需要几分钟(申请资源,下载jar包,job recover等)。我们通过资源冗余分配策略,优化掉其中资源申请和下载jar包过程,最终实现秒级作业恢复。

    04

    其他工作&未来规划

    支持超大规模集群:

    主要目标支撑十万量级的集群规模,目前基于社区的federation方案进行改造。

    Hadoop跨IDC集群建设:

    受限于公司物理集群规划,离线集群会分布在不同的IDC,如何基于有限的跨IDC带宽,对数据和计算进行合理排布,是一个非常有挑战的问题。

    在离线资源混合部署:

    基于在线机器的空闲资源运行离线任务,在资源调度和隔离方面有很多工作要做,目前已经取得一定收益。

    在离线资源统一管理:

    目前YARN托管离线调度,k8s托管在线调度,如何让资源更弹性更统一?我们也在做一些尝试。

    流shuffle服务建设:

    shuffle过程产生大量大量的随机IO,通过流shuffle服务接管MR和SPARK shuffle过程,将随机IO转变成顺序IO,提升集群算力并减少在离线混部过程中IO影响。

    大家如何有兴趣或者疑问可以随时联系我,也欢迎考虑快手大数据架构的工作机会,一起解决更有挑战的事儿。

    今天的分享就到这里,谢谢大家。

    特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:
    
    
    

    长按订阅更多精彩▼
    
    如有收获,点个在看,诚挚感谢
    
    展开全文
  • 本文主要讲的是lvs的原理以及调度算法,因此关于其他面的内容可能只是简单过一下,大家如果是和小编一样想要再进一步了解这两个lvs方面的内容可以仔细看看哦。lvs也就是Linux Virtual Server的简写,意即Linux虚拟...

    本文主要讲的是lvs的原理以及调度算法,因此关于其他面的内容可能只是简单过一下,大家如果是和小编一样想要再进一步了解这两个lvs方面的内容可以仔细看看哦。

    lvs也就是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。

    LVS主要组成部分

    负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

    服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有web、MAIL、FTP和DNS等。

    共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

    LVS体系结构

    LVS虚拟服务器的体系如下图所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在这组服务器之前有一个负载调度器(load balance)。负载调度器负责将客户的请求调度到真实服务器上。这样这组服务器集群的结构对用户来说就是透明的。客户访问集群系统就如只是访问一台高性能,高可用的服务器一样。客户程序不受服务器集群的影响,不做任何修改。

    d64c2a76da27d16cbe5dd5ae3709ac1a.png

    LVS的基本工作原理

    90ba379552326245a39a3498c297b814.png

    客户请发送向负载均衡服务器发送请求。负载均衡器接受客户的请求,然后先是根据LVS的调度算法(8种)来决定要将这个请求发送给哪个节点服务器。然后依据自己的工作模式(3种)来看应该如何把这些客户的请求如何发送给节点服务器,节点服务器又应该如何来把响应数据包发回给客户端。

    LVS的优缺点

    1.优点

    (1)开源,免费

    (2)在网上能找到一些相关技术资源

    (3)具有软件负载均衡的一些优点

    2.缺点

    (1)最核心的就是没有可靠的支持服务,没有人对其结果负责;

    (2)功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;

    (3)开启隧道方式需重编译内核;

    (4)配置复杂;

    (5)主要应用于LINUX,目前没有专门用于Windows的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。

    LVS的三种工作模式

    1)VS/NAT模式(Network address translation)

    2)VS/TUN模式(tunneling)

    3)DR模式(Direct routing)

    LVS的调度算法

    LVS的调度算法共有十种,具体为以下:

    1.轮叫调度(Round Robin)(简称rr)

    调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

    2.加权最少链接(Weighted Least Connections)(WLC)

    在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    3.最少链接(Least Connections)(LC)

    调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。

    4.加权轮叫(Weighted Round Robin)(简称wrr)

    调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    5.基于局部性的最少链接(Locality-Based Least Connections)(LBLC)

    “基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。

    6.最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)

    基于wlc算法。这个必须举例来说了

    ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算

    A(1+1)/1

    B(1+2)/2

    C(1+3)/3

    根据运算结果,把连接交给C 。

    7.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)

    “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

    8.源地址散列(Source Hashing)(SH)

    “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    9. 目标地址散列(Destination Hashing)(DH)

    “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    10.最少队列调度(Never Queue Scheduling NQ)(NQ)

    无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算。

    关于LVS的其他方面内容,比如其三种模式等,如果大家想看可以搜索来看,在我们课课家教育也有这方面的内容哦。本文就讲到这里了,感谢大家的支持!若是想要学习更多的内容,大家可以关注课课家教育的官方网站以及微信号【课课家IT精品】和【课课家】。

    展开全文
  • 为应用部署工具(KubeVela, ArgoCD 等)提供丰富的多集群负责调度策略和可靠的资源分发引擎。 拓展现有的 Kubernetes 单集群安全策略治理工具(Open Policy Agent,Falco 等)使其具有多集群安全策略治理的能力。 ...
  • k8s 集群调度

    2021-02-25 11:25:50
    k8s 集群调度 了解k8s 调度策略,人为干预调度过程 k8s 调度器 概念 类似CPU调度 调度过程 调度分为预选和优选 下面以一些预选的算法 自定义调度器 调度亲和性 节点亲和性 更倾向于于哪个node 软策略...
  • 但是当执行任务的机器数量变之后,就需要将任务有序合理的分配到不同的机器上去执行,这也催生了一些分布式集群中任务调度的算法。 集群任务调度算法 当前较为主流的经典算法有如下两个,Min-Min算法和Max-Min算法...
  • 但当机器越、定时任务越,各个任务联系越紧密的情况下,用crontab进行定时任务的管理配置,就会非常混乱,严重影响工作效率。机器、定时任务的情况下,就会遇到以下问题:1、每个服务器各个用户下的crontab...
  • k8s中的集群调度

    2021-05-17 16:29:07
    kube-scheduler是k8s集群的默认调度器,该调度器会将Pod放到合适的Node上,然后对应Node上的Kubelet才能够运行这些Pod; 对每一个新建的Pod或者是未被调度的Pod,kube-scheduler会选择一个最优的Node去运行这个Pod。...
  • k8s调度器SchedulerScheduler工作原理请求及Scheduler调度步骤:节点预选(Predicate):排除完全不满足条件的节点,如内存大小,端口等条件不满足。节点优先级排序(Priority):根据优先级选出最佳节点节点择优(Select...
  • 比赛内容: Apache Dubbo 作为一款可拓展性极高的 RPC 框架,支持高度自定义化的集群调度机制,本次比赛要求参赛者基于 Dubbo 提供的集群调度自定义化能力,辅以调用过滤链机 制、自定义负载均衡机制等功能,设计一...
  • 前言:大部分情况下,kubernetes中的Pod只是容器的载体,通过Deployment、DaemonSet、RC、Job、Cronjob等对象来完成一组Pod的调度与自动控制功能。Pod调度是由Scheduler组件完成的,可见图中位置。Scheduler工作原理...
  • 本文主要讲的是lvs的原理以及调度算法,因此关于其他面的内容可能只是简单过一下,大家如果是和小编一样想要再进一步了解这两个lvs方面的内容可以仔细看看哦。lvs也就是Linux Virtual Server的简写,意即Linux虚拟...
  • 因存在两台调度中心,顾思考是否会产出重复调度的问题,于是查看源码,调度中心源码实现如下,只贴出部分 原因分析: 根据上述代码可见,采用了数据库for update获取行锁,来保证同一时间只有一台服务器可查询...
  • 1 背景随着公司这两年业务的迅速扩增,业务数据量和数据处理需求也是呈几何式增长,这对底层的存储和计算等基础设施建设提出了较高的要求。本文围绕计算集群资源使用和资源调度展开,将带大家了解集群...
  • 海豚调度集群安装详细步骤1.基础软件安装(必装项)2.创建部署用户和hosts映射3.下载DolphinScheduler二进制tar.gz包4.配置hosts映射5.集群服务器免密登陆6.数据库初始化7.修改运行参数8.一键部署9.查看bigdata1、big...
  • Twine:Facebook 集群调度管理系统

    千次阅读 2021-03-14 00:24:56
    除了分片之外,联邦也是解决集群管理规模的有效手段,Kubernetes 社区的联邦可以让同一个任务在个独立集群运行,可以支持地区、混合云甚至多云的部署,但是因为需要跨集群同步信息,所以实现相对比较复杂;...
  • 用户作业的环境下,如何将集群资源在它们之间进行分配,需要特定的策略。 FIFO 公平调度器 能力调度器 延迟调度策略 主资源公平调度策略 1. FIFO 最简单的资源调度策略。 提交的作业,按照提交时间先后...
  • 调度中心集群 调度中心支持集群部署,提升调度系统容灾和可用性。 调度中心集群部署时,几点要求和建议: DB配置保持一致; 集群机器时钟保持一致(单机集群忽视); 建议:推荐通过 nginx 为调度中心集群做...
  • kubernetes集群常用POD调度策略 1、kubernetes集群POD调度策略 (1)、NoSchedule: 一定不能被调度 (2)、PreferNoSchedule: 尽量不要调度 (3)、NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod 2、将master...
  • Cuckoo-Schedule对调度模块与执行模块进行解耦,调度模块支持集部署、任务分组、任务依赖、权限管理、邮件告警、调度日志记录等功能,并提供WEB页面对任务进行管理,支持任务实时调度情况的查看、变更以...
  • k8s调度概念 默认调度策略 亲和性 节点亲和性 硬节点亲和 kubectl get node --show-labels查看node节点上面的标签 k8s硬亲和,所有主机节点默认都有标签 硬亲和标签筛选 一直kubectl delete pod --all &&...
  • 在配置文件加上org.quartz.jobStore.acquireTriggersWithinLock=true,这样,在拉取待即将触发的triggers时,是上锁的状态,不会同时存在个线程拉取到相同的trigger的情况,避免了复调度的危险。 ...
  • k8s集群调度

    2021-08-23 21:25:51
    k8s集群调度一、概述二、Pod启动典型创建过程三、调度过程指定调度节点强制约束亲和性键值运算关系亲和性与反亲和性四、污点(Taint)和容忍(Tolerations)污点(Taint)容忍(Tolerations)其它注意事项五、相位Phase六、...
  • 集群式服务VIP随机轮询调度的解决方案 项目背景 服务集群为二主四从集群模式,现实现一个域名(对应一个公网ip)访问服务器集群同时实现负载均衡和容灾处理。 解决方案...
  • 1 背景随着公司这两年业务的迅速扩增,业务数据量和数据处理需求也是呈几何式增长,这对底层的存储和计算等基础设施建设提出了较高的要求。本文围绕计算集群资源使用和资源调度展开,将带大家了解集群...
  • 文章目录国产牛逼系列 dolphinscheduler1 调度工具对比话不说 直接开干安装包部分 TODO基础搭建解压缩,重命名mysql 依赖 ip 改一下,注释源 postgresql运行 MySQL 初始化脚本运行环境修改一键部署配置文件 conf/...
  • LVS Linux Virtual Server 1995 中国 章文嵩 Linux内核默认组件 接受用户请求并转发给后端服务器由后端服务器响应请求 LVS四种工作模式 ...ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
  • 摘要:在华为开发者大会(Cloud)2021上,工商银行Paas云平台架构师沈一帆发表了《工商银行k8s集群管理及容灾实践》主题演讲,分享了工商银行使用多云容器编排引擎Karmada的落地实践过程。
  • 【技术实现步骤摘要】一种基于Slurm作业管理的可视化调度系统本专利技术涉及高性能集群作业调度领域,尤其涉及一种基于Slurm作业管理的可视化调度系统。技术介绍高性能计算集群是一组通过网络连接的高性能服务器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,096
精华内容 67,238
关键字:

多集群调度