一、Nginx负载均衡介绍
跨多个应用程序实例的负载平衡是优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。
可以使用nginx作为非常高效的HTTP负载均衡器,将流量分配给多个应用程序服务器,并通过nginx提高Web应用程序的性能,可伸缩性和可靠性。
二、内置负载策略
Nginx负载均衡是通过upstream模块来实现的,内置实现了三种负载策略,配置还是比较简单的。
官网负载均衡配置说明:http://nginx.org/en/docs/http/load_balancing.html
轮循(默认)
Nginx根据请求次数,将每个请求均匀分配到每台服务器
最少连接
将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。
IP Hash
绑定处理请求的服务器。第一次请求时,根据该客户端的IP算出一个HASH值,将请求分配到集群中的某一台服务器上。后面该客户端的所有请求,都将通过HASH算法,找到之前处理这台客户端请求的服务器,然后将请求交给它来处理。
proxy_pass http://myapp1:表示将所有请求转发到tomcats服务器组中配置的某一台服务器上。
upstream模块:配置反向代理服务器组,Nginx会根据配置,将请求分发给组里的某一台服务器。myapp1是服务器组的名称。
upstream模块下的server指令:配置处理请求的服务器IP或域名,端口可选,不配置默认使用80端口。通过上面的配置,Nginx默认将请求依次分配给srv1.example.com,srv2.example.com,srv3.example.com来处理,可以通过修改下面这些参数来改变默认的分配策略:
nginx中的反向代理实现包括HTTP,HTTPS,FastCGI,uwsgi,SCGI和memcached的负载均衡。要为HTTPS而非HTTP配置负载平衡,只需使用“https”作为协议即可。
weight
默认为1,将请求平均分配给每台server
上例配置,表示6次请求中,srv1.example.com分配2次,srv2.example.com分配3次,srv3.example.com分配1次。
max_fails
默认为1。某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,新的请求将不会分配给这台机器。如果设置为0,Nginx会将这台Server置为永久无效状态,然后将请求发给定义了proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream指令来处理这次错误的请求。
fail_timeout
默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它。
srv1.example.com这台机器,如果有3次请求失败,nginx在15秒内,不会将新的请求分配给它。
backup
备份机,所有服务器挂了之后才会生效
在srv1.example.com和srv2.example.com都挂了之前,srv3.example.com为不可用状态,不会将请求分配给它。只有当srv1.example.com和srv2.example.com都挂了,srv3.example.com才会被启用。
down
标识某一台server不可用。可能能通过某些参数动态的激活它吧,要不真没啥用。
表示srv1.example.com这台Server为无效状态,不会将请求分配给它。
max_conns
限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置
表示最多给srv1.example.com这台Server分配1000个请求,如果这台Server正在处理1000个请求,nginx将不会分配新的请求给到它。假如有一个请求处理完了,还剩下999个请求在处理,这时nginx也会将新的请求分配给它。
会话持久性
请注意,通过循环或最不连接的负载平衡,每个后续客户端的请求都可能被分发到不同的服务器。不能保证相同的客户端将总是定向到相同的服务器。
如果需要将客户端绑定到特定的应用程序服务器 - 换句话说,就始终尝试选择特定服务器而言,使客户端的会话“粘性”或“持久性” - ip-hash负载平衡机制可以用过的。
使用ip-hash,将客户端的IP地址用作散列键,以确定应该为客户端的请求选择服务器组中的哪个服务器。此方法可确保来自同一客户端的请求将始终定向到同一服务器,除非此服务器不可用。
本文暂时没有评论,来添加一个吧(●'◡'●)