>>分享数据结构和算法相关的知识和技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 25283 个阅读者 刷新本主题
 * 贴子主题:  LVS的调度算法-个人理解 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2020-03-15 21:15:08     消息  查看  搜索  好友  邮件  复制  引用

    1、LVS的调度算法

  我们对LVS的调度算法分为两类:静态算法和动态算法。

                1.1、静态算法

  仅根据算法本身进行调度,而不考虑后端真实服务器的实际连接情况和负载情况。

                1.1.1 轮询(RR)--Round Robin

  负载调度器将用户请求按顺序轮流分配到后端的真实服务器上。

  它均等的对待每一台真实服务器,而不管服务器实际的连接数和系统负载。权重值相同,权重值若为0则表示真实服务器不可用。

                1.1.2 加权轮询(WRR)--Weighted Round Robin

  负载调度器会根据权重值来判断后端真实服务器的性能,优先将请求分配到后端性能较好的真实服务器上。

  假如主机A的权重值为2、主机B的权重值为1,则主机A的性能是B的两倍,调度顺序会变为AAB,权重值若为0则表示真实服务器不可用。

                 1.1.3 源地址散列(SH) --Source Hash

  这种调度算法一般用于需要会话保持的WEB集群中。

  当用户请求时,负载调度器会将同一个来源IP的请求转发给同一台真实服务器处理。

  当用户第一次请求时,负载调度器会根据轮询算法按顺序将请求转发到后端的真实服务器上,并会将用户请求的源IP+转发到后端的真实服务器对应关系以散列键=值的方式存放到一张散列表(哈希表)中,当用户再一次请求时,负载调度器会根据请求的源IP,匹配散列表中对应关系,将请求分发到后端的同一台真实服务器上。若后端的真实服务器超载或不可用,则会返回空。

                 1.1.4 目标地址散列(DH) --Destination Hash

  当用户请求时,负载调度器始终会将请求发往以真实服务器为目标IP的真实服务器上。

  若后端的真实服务器超载或不可用,则会返回空。

  这种调度算法一般用于后端真实服务器为缓存服务器的场景下,我们希望将所有请求可以一直都匹配到缓存,通过缓存服务器直接返回响应给用户,这种调度算法就基本失去了负载均衡的意义,基本上不会用。

                1.2、动态算法

  根据算法及真实服务器当前的负载状态进行调度。

                1.2.1 最少连接(LC)--Least Connection

  负载调度器会将用户请求分配到后端连接数最少的真实服务器上;

  当所有的真实服务器连接数都为0时则会按照轮询按顺序将请求转发至后端;

  负载调度器会记录每个真实服务器已建立的连接数,当一个请求被调度到后端某台真实服务器上时,则活动连接数(Active)+1,当连接中止或超时,活动连接数-1,即非活动连接(InActive)+1,当非活动连接超过空闲等待时间,则-1。权重值若为0则表示真实服务器不可用。

                 1.2.2 加权的最少连接(WLC) -- Weighted Least Connection

  负载调度器会将用户请求分配到后端连接数最少、性能最优的真实服务器上;

  当所有的真实服务器连接数都为0时则会按照轮询按顺序将请求转发至后端,不管权重值大小。

  负载调度器会记录每个真实服务器已建立的连接数,同时也可以通过权重值来判断真实服务器的性能。

                 1.2.3 最少期望延迟(SED) --Shortest Expected Delay Scheduling

  负载调度器会将用户请求分配到后端连接数最少、性能最优的真实服务器上;

  当所有的真实服务器连接数都为0时则会根据权重值来判断真实服务器的性能,并将请求转发至后端。

  SED算法弥补了WLC算法的不足。

                 1.2.4 永不排队(NQ) --Never Queue

  在主机A权重值为1,主机B权重值为5的环境下,如果根据SED算法分配请求的话,则可能前4次请求都会交给主机A处理,而主机B为空闲状态,这并不是我们期望所看到的,所以NQ算法又是SED算法的改进;

  当所有的真实服务器连接数都为0时则会根据权重值来判断真实服务器的性能,并将请求转发至后端;

  当有新的用户请求,有一台真实服务器活动连接数为0时,则会立即转发、无需排队等待;

  当所有的真实服务器都在处理连接时,则负载调度器会将用户请求分配到后端连接数最少、性能最优的真实服务器上。

                 1.2.5 基于局部性的最少连接(LBLC) -- locality Based Least Connections

  这种算法是DH算法的改进算法,一般也应用于后端真实服务器是缓存服务器的场景下,弥补了DH算法的不足,其实基本上也不常用,可以实现后端缓存服务器的高可用。

  当用户请求时,负载调度器始终会将请求发往以真实服务器为目标IP的真实服务器上。

  若后端的真实服务器超载或不可用,则会将请求转发到后端最少连接的可用的真实服务器上。

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

  LBLCR算法是LBLC算法的升级版。LBLC维护一台为目标的真实服务器,而LBLCR则维护一组为目标的真实服务器,实现目标的负载均衡,目前主要用于缓存集群。

  当用户请求时,负载调度器从一组真实服务器中找出一台连接数最少的服务器处理请求。

  若服务器超载时,则负载调度器会按照最少连接数原则从真实服务器中选出一台服务器,将其加入到组中并处理请求,当组一段时间没有发生变动,则会将最忙的真实服务器从组中删除。

            

----------------------------
原文链接:https://blog.51cto.com/10978134/2122127

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-16 11:31:28 重新编辑]
  Java面向对象编程-->输入与输出(下)
  JavaWeb开发-->使用过滤器
  JSP与Hibernate开发-->立即检索和延迟检索策略
  Java网络编程-->Java网络编程入门
  精通Spring-->Vue Router路由管理器
  Vue3开发-->通过Vuex进行状态管理
  Charges Convert Heads As soon as Luring ESPN Analyst Int...
  位运算指南
  算法学习与收集:一些有用的算法网站和网页
  常见的调度算法
  算法的概念、特征和基本类型简介
  java 通配符的应用范例, java 排序算法
  分布式一致Hash算法-存储之道
  Java 选择排序算法
  Citrix Netscaler负载均衡算法
  令牌桶算法
  无向图的最短路径求解算法之——Dijkstra算法
  ipvsadm及lvs的调度算法
  字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序...
  LinkedList,LinkedHashMap,LruCache源码解析
  RSA 非对称加密原理(小白也能看懂哦~)
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。