Nginx 负载均衡原理和配置初探

举报
华为的冬天 发表于 2018/10/25 19:42:41 2018/10/25
【摘要】 当单机无法支撑一个网站应用时,就要考虑使用多台机器横向扩展的方式来处理更多请求了。把请求分发到多台服务器上的技术就是负载均衡。 专业的负载均衡服务有 LVS,HAProxy 等,在网站服务器还没达到一定规模的情况下,使用 Nginx 的负载均衡也许是个更简单好用的选择。为了演示使用 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 中了解更多与负载均衡相关的配置和说明。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。