在生产环境中用于负载均衡的主要有HAproxy、LVS还有nginx,它们用于负载均衡的算法各不相同。
LVS的常用负载均衡算法
- 轮叫:通过调度算法按照请求的顺序分配到集群的realserver上,并不考虑服务器当前的负载,只是单纯的按照请求的的次序,顺序轮流分配.
- 加权轮叫:加权轮叫,也是使用轮叫的方式来按照请求的次序轮流给给分配服务器,不同的是,可以调节服务器的权重值,这样性能较高的服务器就可以得到更好的使用。
- 最少连接:该算法就是将请求到达时,后台建立连接最少的服务器给与分配。
- 加权最少连接:考虑到服务器性能存在差异,所以通过加权以最少连接的算法进行调度,。
- 基于局部性的最少连接:这个算法是针对目标IP地址最近使用的服务器,如果这个服务器可用且没有超载,将请求分配到服务器上,如果服务器crash掉了或者处于一半的工作负载,就将请求按照最小连接的原则选出一个可用的服务器,予以分配。
- 带复制的基于局部性最小连接:也是针对目标IP地址的负载均衡,与上一个算法不同点在于,它维护的是一个目标IP地址到一组服务的映射,通过请求的IP地址找出该目标地址对应的服务器组,然后按照最小连接的原则从服务器组中找出一台合适的服务器予以分配。
- 目标地址散列:目标地址散列,根据请求的目标IP地址进行hash,从hash表中找出对应的服务器,必须确保服务器可用,否则返回为空。
- 源地址散列:根据请求的源目标IP地址进行hash,其余与目标地址散列一致。
- 源IP端口散列:使用hash算法将来自同一个源地址IP和源端口号的请求映射到后端同一台服务器上。
- 随机:随机地将请求分配到后端服务器上。
HAproxy的常用负载均衡算法
- 轮叫:同LVS的轮叫
- 静态轮询:根据权重进行轮询,但是运行时无法修改权重,是静态的,对服务器的数量没有限制。
- 最小连接:连接数最少的服务器优先接受连接
- 源地址哈希:将对请求源地址IP进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,一个客户端的IP地址总是访问同一个服务器。算法也是静态的。
- URI哈希:根据请求的URI地址进行哈希,也是将可用服务器除以哈希值进行分配,只要服务器正常一个URI也总是访问同一个服务器。
- URL参数调度:根据URL参数来进行调度,目的是将一个用户的信息都发到同一个后端服务器上。在HTTP GET请求的查询串中查找中指定的URL参数。
- hdr:在每个HTTP请求中查找HTTP头,然后算法根据HTTP请求头来锁定每一次的HTTP请求。
- rdp-cookie:查询每个进来的TCP请求并哈希RDPcookie,该机制会将同一个用户或者同一个会话ID总是发给一个服务器。
nginx的常用负载均衡算法
在我之前的博客中有写过
http://blog.youkuaiyun.com/parameter_/article/details/75452345