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信息来调度