美文网首页
Haproxy、Nginx、Lvs 负载均衡算法

Haproxy、Nginx、Lvs 负载均衡算法

作者: 猪肉楠 | 来源:发表于2017-02-20 09:34 被阅读0次

Lvs

##缺陷
  没有后端主机健康状态检查,但可以通过自己编写脚本来检测
## 轮询(Round Robin)
  轮询,依次向每个服务器发送请求
## 加权轮询(Weight Round Robin)
  根据权重进行请求的发送
## 源地址哈希(Source Hashing)
  根据客户端ip进行hash,实现session绑定
## 目标地址哈希(Destination Hashing)
  把对于同一个IP地址的请求,发送给同一个server
## 最少连接(Least-Connection)
  把新的连接分配到当前活动连接数最小的服务器,active代表当前服务器活动连接,inactive代表当前服务器非活动
  具体算法 active*256+inactive,得到的值,谁的最小,给谁分配
## 加权最少连接(Weighted Least-Connection)
  具体算法 (active*256+inactive)/weight,得到的值,谁的最小,给谁分配,权值标识机器处理性能。
  如果第一个进来的时候,每台服务器算出来的结果都一样,这样可能就要选到性能最差的那台(都一样就轮询),这是一个缺点,加权和不加权都有这个缺点
## 最短期望延迟(Shortest Expected Delay)
  改进的wlc算法
  具体算法 (active+1)*256/weight
  同上一个比较,除去了影响不大的inactive数目,但是在计算活动连接数的时候,先加上1,保证了,即使在活动连接数为0的情况下,还避免使用轮询,随机选择
## 不排队(Never Queue)
  改进的sed算法
  如果有连接为0的主机,则先给此主机,如果没有,则按照sed算法进行分配
## 基于局部性的最少连接(Locality-Based Least Connection)
  类似于dh算法,通常先按照最少连接来分配,然后以后的对应ip的访问就要调度到第一次响应的那台主机上,如果此主机down或者负载到一半以上,则会再按照最少连接找一台服务器,然后发送请求
## 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
  基于lblc算法,只不过,此算法是将目标ip和后端集群做绑定,其他和lblc一样

Nginx

##以前版本
### 加权轮询(weight)
  根据权重来进行后端主机的分配
### 源地址hash(ip_hash)
  根据访问者ip来进行分配后端主机,固定的IP会被分配到固定的主机上,可以解决session问题,但是会破坏负载均衡特性
### 最小响应时间(fair、第三方)
  按后端主机响应时间来分配请求,响应时间短的优先分配,一般不用,因为网络问题不确定性太多
### 目标地址hash(url_hash、第三方)
  按客户端访问的主机url进行分配客户端,比较适合后端是缓存服务器的场景
##2016-08-17 版本(增加或者改变的)
### 自定义hash内容(hash key [consistent])
  这个不知道在那个版本加入的,可以自己指定hash的键,如果指定为hash $remote_addr 就和ip_hash是一样的,hash 后边的那个变量为nginx可用变量,查手册获得。如果后边的 consistent 被指定,则说明要使用一致性hash代替普通hash,这样的话在后端是缓存服务器的时候,出现down机或者新添加机器的时候,就可以使缓存失效的情况大大减少。(具体原因请百度 一致性hash)
### 最少连接(least_conn)
  显而易见,按照后端主机的最少活动连接数分配,后端主机性能越强,处理能力越强,则越能接受到多的连接(抛开网络因素)
### 最短时间和最少连接(least_time connect | first_byte | last_byte)
  如果参数选择connect,则和least_conn一样,如果是first_byte,则根据第一个字节到达后端主机的时间,如果是last_byte,则根据最后一个字节到达后端主机的时间。

Haproxy

### 最少活动连接 (leaseconn)
  最少的活动连接数,在sql,ldap等服务中使用
### 源地址hash (source)
  按照客户端地址hash值进行分配
### 目标uri hash(uri)
  根据访问的地址的uri进行hash,len基于多少个uri字符,depth基于多少个目录层次
### url参数 (url_params)
  根据访问的地址的参数进行调度,参数指url http://www.baidu.com/index.html?name=lilei  中的name=lilei
### 请求头信息调度(hdr(name))
  根据访问的头信息来调度,比如 hdr(Host) 是根据访问的主机名调度。
### cookie (rdp-cookie)
  根据访问者的cookie信息来调度

相关文章

网友评论

      本文标题:Haproxy、Nginx、Lvs 负载均衡算法

      本文链接:https://www.haomeiwen.com/subject/ziuswttx.html