《Nginx官方文档》使用nginx作为HTTP负载均衡

   介绍

       跨多个应用程序实例进行负载均衡是一种常用的技术,它被用于优化资源的利用率, 最大化吞吐量,减少延迟并确保容错配置。
       可以使用nginx作为一个非常有效的HTTP负载均衡器,将流量分配给多台应用服务器,并通过nginx提高Web应用程序的性能,可扩展性和高可靠性。

负载均衡方法

       在nginx中支持以下负载平衡机制(或方法):
  •        round-robin (轮询)—  Nginx以轮询的方式对收到的请求进行分发
  •        least-connected(最少连接) — Nginx会把下一个连接分配给具有最小活动连接的服务器
  •        ip-hash  (IP绑定)— 使用hash函数去决定下一个连接应该分配给哪一台服务器(基于客户端的IP地址)

 

默认负载平衡配置

使用nginx做一个最简单的负载均衡配置可能如下所示:

 

[code lang=”java”]
http {//协议
upstream myapp1 {//服务器群
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;//监听端口
location / {
proxy_pass http://myapp1;//对服务器群进行负载均衡
}
}
}
[/code]

在上面的例子中,服务器srv1-srv3上运行了三个具有相同应用程序的实例. 当负载均衡方法没有进行特别的配         置
的话,默认为轮询。这时所有的请求都被nginx代理到服务器群组myapp1 中,同时nginx使用HTTP负载均衡来对
请求进行分发。

nginx的反向代理可以实现包括HTTP,HTTPS,FastCGI,uwsgi,SCGI和memcached在内的负载均衡

如果想配置HTTPS协议的负载均衡而不是HTTP协议的负载均衡,只需要使用”https”作为协议即可

当为FastCGI,uwsgi,SCGI或memcached配置负载均衡时,分别使用 fastcgi_pass, uwsgi_passscgi_pass               和 memcached_pass 指令。

   最小连接负载均衡

另一种负载均衡机制是基于最小连接的。在一些请求需要更长的时间才能完成的情况下,最小连接机制可以更加公正的控制应用程序实例的负载均衡。

使用最小连接的负载均衡,nginx将尽量不会把过多的请求来使忙碌的应用程序服务器超负荷运行,而是将新的请求分发到不太忙的服务器。

当使用 least_conn指令作为服务器组配置的一部分时,将激活nginx的最小连接负载均衡:

 

[code lang=”java”]
upstream myapp1 {//配置服务器群组
least_conn;//最小连接机制命令
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
[/code]

会话持久性

请注意,通过轮询或最小连接的负载均衡,每个后续客户端的请求都可能会被分配到不同的服务器。在这里并不能保证同一个客户端始终指向同一个服务器。

如果需要将客户端绑定到特定的应用服务器–换句话说,使客户端与nginx的会话进行”粘滞”或者” 持久化”,就总是尝试去选择一个特定的服务器而言,ip-hash负载均衡机制在这里可以被使用。

使用ip-hash 机制,客户端的ip地址被用作hash表里的键,nginx根据键来确定应该为客户端请求选择服务器群组里的哪一个服务器。此方法会确保从同一个客户端发来的请求会始终定向到同一台服务器,除非当这台服务器出现不可用的时候。

       要配置ip-hash负载均衡,只需将ip-hash指令配置到服务器(upstream)组的配置中。

 

[code lang=”java”]
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
[/code]

加权负载均衡

       还可以通过使用服务器权重进一步影响nginx负载均衡算法。

在上面的示例中,服务器权重没有配置,这就意味着所有指定的服务器被看做对特定负载均衡方法具有同等资格。

       特别是轮询使用的时候,这也意味着只要有足够多的请求,并且以统一的方式处理请求并且完成速度足够快,这时 通过服务器进行的请求分配或多或少概率是相等的。

       当为服务器的配置指定权重参数时,权重将会作为负载均衡决策的一部分进行计算。

[code lang=”java”]
upstream myapp1 {
server srv1.example.com weight=3;// 为此服务器增加权重
server srv2.example.com;
server srv3.example.com;
}
[/code]

通过这种配置,每五个新的请求将会通过应用实例进行分发,如下所示:3个请求将会被分发给srv1,1个请求将会分发给srv2,另一个请求分发给srv3。

在最近的nginx版本中,同样可以在最小连接和ip-hash机制中使用负载均衡的权重。

健康检查

         nginx 中的反向代理实现包括内带(或被动)的服务器运行状况检查。如果特定服务器的响应失败并出现错误, nginx则会把这台服务器标记为失效,并会尝试在一段时间内避免后续入站的请求选择此服务器。

max_fails 指令设置在fail_timeout期间与nginx服务器连续的不成功的尝试连接的通信数量。默认情况下,

max_fails设置为1,当设置为0时,该服务器的运行状况检查会被禁用。fail_timeout参数还定义了服务器将被标记为失效的时间。在 服务器发生故障后的 fail_timeout间隔之后,

nginx将开始以实时客户端的请求优雅地探测服务器。如果探测成功,则将服务器标记为活动的。

延伸阅读

最后但并非最不重要的是, 应用程序负载平衡应用程序运行状况检查活动监控和 服务器组 的即时重新配置可 作为我们付费NGINX Plus订阅的一部分。

以下文章详细介绍了NGINX Plus的负载均衡:

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Nginx官方文档》使用nginx作为HTTP负载均衡

  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

return top