nginx.org的Using nginx as HTTP load balancer页面翻译

来源:互联网 发布:js包装函数是什么 编辑:程序博客网 时间:2024/05/01 03:13

英文文档对应页面:Using nginx as HTTP load balancer

使用nginx作为HTTP负载均衡器

简介

在多个应用程序实例之间的负载均衡是一种常用的技术,用于优化资源利用率,最大限度地提高吞吐量,减少延迟,并确保容错配置。
使用nginx作为一个高效的HTTP负载均衡器是可能的,用于处理:分发网络流量到几个应用服务器,提升we应用的性能、可扩展性以及安全性。

负载均衡方法

nginx支持下列负载均衡机制(方法):
  1. round-robin - 以 'round-robin'(轮询) 模式分发对应用服务器的所有请求
  2. least-connected - 下一个请求被分配给 '具有最少激活状态的链接的服务器'
  3. ip-hash - 根据一个 'hash-function' 决定下个请求应该分配给哪个服务器

默认的负载均衡配置(round-robin)

nginx最简单的负载均衡配置,可能就像下面一样:
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 服务器上。当负载均衡的方法没有明确的被配置,默认是 'round-robin' 方法。所有请求,被代理给服务器集群 "myapp1",同时nginx应用HTTP负载均衡来分发这些请求。
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-conencted。当一些请求需要花费更长的时间来完成(理解为:长链接?),least-connected方法可以让负载分配你的更平均
least-connected负载均衡,nginx将不会分配请求到一个过度负载的应用服务器上,而是会将新的请求分配到一个较少负载的服务器上。
在服务器集群配置中使用 "least_conn" 指令,就会激活least-connected负载均衡,例如:
upstream myapp1 {    least_conn;// 激活 least_connected     server srv1.example.com;    server srv2.example.com;    server srv3.example.com;}

session持久化

注意:使用 "round-robin" 或 "least-connected"负载均衡,客户端请求的每个子请求,可能被分发到一个不同的服务器上。不能保证相同的客户的请求总是被分配到相同的服务器上。
如果有需要将客户端绑到某个特定的应用程序服务器上-换句话说,使客户端的session持久化,以保证同一客户端都连接一台特殊的服务器,在这种情况下,可以使用 "ip-hash" 负载均衡机制
配置 "ip-hash" 负载均衡,仅仅需要添加 'ip_hash' 指令到服务器集群配置中,例如:
upstream myapp1 {    ip_hash;    server srv1.example.com;    server srv2.example.com;    server srv3.example.com;}

负载均衡权重

当使用服务器权重,对nginx的负载均衡算法可能影响更大。
在上面的例子中,没有配置服务器权重,意味着在一个特殊的负载均衡方法中,集群中所有指定的服务器被同等的对待。
提供足够多的请求,并且当请求以统一的方式处理并且完成的足够快时,使用 'round-robin' 方法,也意味着各个服务器之间有一个或多或少均等的请求分配。
当对一个服务器指定了 'weight' 参数,权重也会被计算,作为负载均衡决策的一部分。
upstream myapp1 {    server srv1.example.com weight=3;    server srv2.example.com;    server srv3.example.com;}
使用上面的配置,每5个请求将使用如下的规则来分配:3个请求指向srv1,一个分配给srv2,另一个分配给srv3.
在nginx的最近版本中,针对 "least-connected" 和 'ip-hash' 负载均衡方法,权重(weight)的使用同 "round-robin" 方法中的使用相似.

健康检查

nginx中反向代理的实现包含 "in-band"(or passive-被动)服务器健康检查。如果来自一个特殊服务器的响应失败,并返回一个错误,nginx将标志这台服务器为失败服务器,之后的后续请求将会避免选用这台失败的服务器。
"max_fails"指令设置了在 "fail_timeout" 设置的时间段内,尝试连接服务器的连续不成功次数。默认,"max_fails"设置为1,当设置为0,将关闭服务器的健康检查。"fail_timeout" 参数,也决定了多久服务器将被标志为失败服务器。在 "fail_timeout" 时间段后,服务器请求失败,nginx将开始使用活跃的客户端请求,友好地去探查服务器。一旦服务器被探查成功,该服务器将被标记为活跃服务器

进一步阅读

此外,nginx中,有很多其他的指令和参数,用于控制服务器负载均衡,例如:proxy_next_upstream, backup, down, and keepalive。查看更多信息,请查看文档。
最后但并不是最不重要的,服务器集群的 application load balancing, application health checks, activity monitoring and on-the-fly reconfiguration ,作为Nginx plus 订阅的一部分,也是有用的。
下面的文章,描述了nginx plus负载均衡的更多细节:
Load Balancing with NGINX and NGINX Plus
Load Balancing with NGINX and NGINX Plus part 2



0 0