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

     1  概述

             本文将介绍haproxy用到的10中调度算法 和hash算法,haproxy由命令 balance 指定后端服务器组内的服务器调度算法

  2  调度算法介绍

  定义算法格式

      balance  <algorithm>  [ <arguments> ]

     balance url_param <param>  [check_post]

  . 调度算法总共 10 种,注意和  lvs 的十种不一样:

          roundrobin :

  基于权重轮询,动态算法,支持权重的运行时调整,这个和 lvs 的 rr 不一样,相当于是lvs的 wrr, 且是动态算法。支持慢启动,指新加的服务器不会马上启用,如原来两台,后面加了一台,请求是慢慢加到新的服务器上的,不是一次直接加满三分之一的请求。每个后端 backend 中最多支持 4095 个 server

  server options : weight#

  static-rr :

  基于权重轮询,静态算法,不支持权重的运行时调整及慢启动;后端主机数量无上限

     leastconn :

  加权最少连接,动态算法,最少连接的后端服务器优先分配接收新连接,相同连接时轮询,推荐在较长会话的场景使用,例如 MySQL 、 LDAP 等,不适合 http

     first :

  根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务。一般不设置该调度方法,可以用于测试环境

    source :

  源地址 hash ,新连接先按权重分配,后续连接按 source 分配请求。起到会话绑定的作用,但是调度粒度太粗,使用的少,相当于是 ip hash.

    uri :

  对 URI 的左半部分或整个 uri 做 hash 计算,并除以服务器总权重取模,以后派发至某挑出的服务器 , 适用于后端缓存服务器

  请求: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

  左半部分 uri : /<path>;<params>

  整个 uri : /<path>;<params>?<query>#<frag>

  url_param :

  对用户请求的 uri 仅 <params> 部分中的参数的值作 hash 计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个 BackendServer

  hdr(<name>) :

  对于每个 http 请求,此处由 <name> 指定的 http 首部将会被取出做 hash 计算;并由服务器总权重相除以后派发至某挑出的服务器;无有效值的会被轮询调度,根据首部信或者是 cookie 息进行调度,

  如根据 cookie:hdr(Cookie)

  根据首部: hdr(host)

   rdp-cookie

  远程桌面相关,一般用于虚拟化

   rdp-cookie (<name>)

      表示根据据cookie(name)来锁定并哈希每一次TCP请求。

                       3  哈希算法

               格式: hash-type  <method>  <function>  <modifier>

      method 有以下两种:

  map-based :除权取余法,哈希数据结构是静态数组,一个服务器故障将重新计算所有的 hash 值,不建议用这个配置

  consistent :一致性哈希,哈希数据结构是一棵树,建议使用。

  如基于uri调度,同时设置了hash一致性

      balance uri

  hash-type  consistent

  <function>:  哈希函数三种: sdbm , djb2 , wt6

            

----------------------------
原文链接:https://blog.51cto.com/ghbsunny/1978989

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



[这个贴子最后由 flybird 在 2020-03-16 11:49:55 重新编辑]
  Java面向对象编程-->流程控制
  JavaWeb开发-->访问数据库(Ⅰ)
  JSP与Hibernate开发-->Spring、JPA与Hibernate的整合
  Java网络编程-->基于UDP的数据报和套接字
  精通Spring-->
  Vue3开发-->Vue CLI脚手架工具
  整理得吐血了,二叉树、红黑树、B、B+树超齐全,快速搞定数据...
  无向图的最短路径求解算法之——Dijkstra算法
  银行家算法范例
  haproxy调度算法
  分布式一致Hash算法-存储之道
  用Java写算法:快速排序
  全排列的六种算法
  Binary Search二分查找算法
  面试官问我:什么是消息队列?什么场景需要他?用了会出现什...
  字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序...
  LinkedList,LinkedHashMap,LruCache源码解析
  比较迭代和递归:人理解迭代 ,神理解递归
  谷歌面试算法题:两个排序数组的中位数
  分析递归和迭代的区别、优缺点及实例对比
  数据结构中的数组
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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