上一篇文章中介绍了如何使用nginx配置负载均衡,nginx如何实现反向代理负载均衡。接下来将来介绍下负载均衡的几种分配方式。
- 轮询
upstream的默认方式,来自客户端的请求按时间顺序轮流分流给各后端服务器,如果后端服务器不可用,能够自动剔除掉。默认的是每个后端服务器weight=1,即权重为1,加权轮询接下来介绍。
upstream backend {
server www.a.com;
server www.b.com;
server www.c.com;
}
- 加权轮询
轮询算法是以轮叫的方式依次将请求调度不同的服务器。加权轮询算法是能够为各个不同性能的服务器添加各自的权重,可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,按权值的高低和轮询方式分配请求到各服务器。权值大的后端服务器处理更多的请求连接,权值相同的后端服务器则相同。
upstream bakend {
server www.a.com;
server www.b.com weight=2;
server www.c.com weight=3;
}
如上的权值,a服务器的权重为weight=1,另外的两个分别为2,3。如果有6个请求连接,则a,b,c三个服务器对应的连接数分别为1,2,3。
加权轮询方式适用于每个请求所占用的后端时间基本相同,负载情况最好。常用于短连接服务,例如 HTTP 等服务。
- ip_hash方式
根据请求的源 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。可以解决session不能跨服务器的问题。
upstream backend{
ip_hash;
server www.a.com;
server www.b.com;
server www.c.com;
}
将请求的源地址进行哈希运算,并结合后端的服务器的权重派发请求至某匹配的服务器,这可以使得同一个客户端 IP 的请求始终被派发至某特定的服务器。因此在不支持会话保持的场景可以使用 ip_hash 进行简单的会话保持实现。
- fair方式(需安装第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。不过采用这种方式是需要第三方插件的。
upstream backend{
server www.a.com;
server www.b.com;
server www.c.com;
fair;
}
nginx的fair模块的添加可以参考这篇文章,有详细的安装步骤介绍,Nginx学习之负载均衡fair模块
- url_hash方式(需安装第三方插件)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。
upstream backend{
server www.a.com;
server www.b.com;
server www.c.com;
hash $request_uri;
hash_method crc32;
}
在upstream中加入hash语句,hash_method是使用的hash算法.