nginx负载均衡配置
原文http://nginx.org/en/docs/http/load_balancing.html
本文依照自己的理解翻译
在多个应用程序间提供负载均衡是一种常用的提高资源利用率的技术,提高服务器的吞吐量,减少延迟,确保应用程序容错。Nginx可以做为一个高效的http负载均衡器来将负载分发到多个应用程序上以提高性能,它也是一种可靠地,可伸缩的web应用程序服务器。
负载均衡的类别
轮询 -应用程序轮流来响应请求
最少连接 -请求被分配到活动连接最少的服务器上
ip-hash -通过一个hash函数决定哪个服务器来响应用户的请求(依据客户端的请求ip)
下面是最简单的负载均衡的配置
</div> </div>
http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } }
上面这个配置中3个相同的应用程序的服务器srv1-srv3,默认的负载均衡方式是轮询,所用的请求通过反向代理给了myapp1组,nginx通过负载均衡来分发这些请求到三个服务
上。
在nginx中HTTP, HTTPS, FastCGI, uwsgi, SCGI, and memcached. 的负载均衡都是通过反向代理实现的。
要配置https的负载均衡只需要将http协议改https就可以了,其他配置不变。
要实现FastCGI, uwsgi, SCGI, or memcached的负载均衡可以分别使用 fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass指令。
另一种负载均衡方式是least-connected,在“请求需要更长的时间来完成”的场景下采用least-connected方式可以更公平的将负载分配到多个机器上面。使用least-connected,nginx不会将请求分发到繁忙的机器上面,而且将新的请求分发的较清闲的机器上面。
可以在 upstream {}模块中配置least_conn;指令来激活least-connected负载模式。
</div> </div>
upstream myapp1 { least_conn; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
轮询和least-connected这两种负载均衡方式会将新的请求分发到不同的机器上,很难保证每个客户端会固定访问某一个服务器。
如果需要某个客户端只访问访问固定的一个服务器可以通过ip-hash负载均衡方式实现。
使用ip-hash时,客户端的ip作为一个散列的Key来决定服务器组中哪个服务器来响应请求,这种方式可以保证每个客户端每次访问的都是同一个服务器。
客户通过ip_hash指令来配置ip_hash负载均衡方式
</div> </div> 权重的负载均衡方式,在轮询的基础上为每个服务器配置权重可以保证某个服务器尽可能处理多的请求