日拱一卒无有尽,功不唐捐终入海

Nginx负载均衡原理和配置

开发环境 Sam 797℃ 0评论

当单机无法支撑一个网站应用时,就要考虑使用多台机器横向扩展的方式来处理更多请求了。把请求分发到多台服务器上的技术就是负载均衡。专业的负载均衡服务有 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 常用的负载均衡配置参数。

转载请注明:PHP笔记 » Nginx负载均衡原理和配置

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)