Nginx 负载均衡原理和配置初探
当单机无法支撑一个网站应用时,就要考虑使用多台机器横向扩展的方式来处理更多请求了。把请求分发到多台服务器上的技术就是负载均衡。 专业的负载均衡服务有 LVS,HAProxy 等,在网站服务器还没达到一定规模的情况下,使用 Nginx 的负载均衡也许是个更简单好用的选择。
为了演示使用 Nginx 的负载均衡功能有多容易,下面将先展示一个极简的 Nginx 负载均衡配置:
upstream app { server 192.168.1.10; server 192.168.1.11; server 192.168.1.12; } server { listen 80; location / { proxy_pass http://app; } }
Nginx 使用 upstream 来定义一组参与负载均衡的服务器。上面的配置中,定义了三个服务器。然后在 server 配置段中使用 proxy_pass 来使用定义的服务器组。使用 Nginx 的负载均衡功能就是这么简单。
Nginx 的负载均衡功能还可以配置轮询策略。上面的配置就是默认的按顺序轮询。如果服务器的硬件能力参差不齐。还可以使用加权轮询的策略,来使配置高的服务器承受更多的请求。使用加权轮询策略的配置如下:
upstream app { server 192.168.1.10 weight=1; server 192.168.1.11 weight=5; server 192.168.1.12 weight=3; }
上面的服务器后面,使用了 weight 来设置权重。数字越大权重越高,分配的请求就越多。除了加权轮询外,另一种轮询策略是 IP Hash。这种轮询策略是将请求 IP 和服务器建立起稳固的关系。与其他策略相比,IP Hash 策略可以轻松的解决使用负载均衡时单机 session 变化的问题。IP Hash 的配置示例如下:
upstream app { ip_hash; server 192.168.1.10; server 192.168.1.11; server 192.168.1.12; }
IP Hash 同样也会存在轮询请求不均衡的问题,所以一般情况下并不推荐使用。如果是为了 Session,可以考虑把 Session 迁移到数据库来解决。除了以上 Nginx 内置的负载均衡策略外,还有一些扩展的轮询规则,如: fair,consistent hash 等。因为要先安装扩展包以后才能使用,这里就不多介绍了。下面将再介绍几个关于负载均衡服务器的配置参数。
定义服务器的时候,有时候可能使用的并不是标准 80 端口,可以使用冒号(:)在 ip 后定义端口:
server 192.168.1.11:8000;
服务器如果因为临时维护不能参与服务,可以使用 down 参数指定服务器不参与分发请求:
server 192.168.1.11 down;
还可以使用 backup 指定候补服务器,这样的服务器正常情况下不会被分配请求,只有当正常服务器繁忙时才会使用。定义候补服务器的示例如下:
server 192.168.1.11 backup;
还可以使用 max_fails 来审核服务器的健康状况,max_fails 可以设置一个请求失败的最大限度,超过限度就会被认为服务器不可用,不再分发请求到该服务器。使用示例如下:
server 192.168.1.11 max_fails=3;
以上只是一部分 Nginx 常用的负载均衡配置参数,了解了以上知识,应付每天千万请求应该不成问题了。除此之外,还可以到 Nginx 的官方文档 Module ngx_http_upstream_module 中了解更多与负载均衡相关的配置和说明。
- 点赞
- 收藏
- 关注作者
评论(0)