【问题标题】:Do you have to hardcode the number of servers you load balance between?您是否必须对负载平衡的服务器数量进行硬编码?
【发布时间】:2021-06-14 10:49:30
【问题描述】:

负载平衡器允许您跨多台服务器路由客户端请求,以最大限度地提高速度和容量利用率,并确保没有一台服务器过度工作。 NGINX 就是这样一种负载均衡器,它还充当 Web 服务器和反向代理。

如果您想使用 NGINX 在三台服务器之间进行负载平衡,您的 nginx.conf 配置文件中可能会有这样的内容。

http {
    upstream myapp {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp;
        }
    }
}

在这里,您将要在配置文件中实现负载平衡的三台服务器硬编码。如果要在更多服务器之间进行负载平衡,则必须为要添加的每个附加服务器添加一行,这意味着您必须将所有服务器硬编码到配置文件中。

有没有一种方法可以动态且轻松地扩展您想要在它们之间进行负载平衡的服务器数量?随着服务器负载的增加,负载平衡如何扩展?

【问题讨论】:

    标签: nginx load-balancing


    【解决方案1】:

    来自NGINX upstream documentation

    服务器地址[参数];

    定义服务器的地址和其他参数。该地址可以指定为域名或 IP 地址,带有可选端口,或者指定为“unix:”前缀后指定的 UNIX 域套接字路径。如果未指定端口,则使用端口 80。 解析为多个 IP 地址的域名一次定义多个服务器。

    创建一个指向多个 IP 地址的 DNS 记录;

    lb.example.com
        --> 10.0.1.20
        --> 10.0.1.21
        --> 10.0.1.22
        --> 10.0.1.23
    

    【讨论】:

    • 我认为值得一提的是,NGINX 不会检查记录中的更改,除非您拥有 NGINX Plus 并添加了“解决”选项。
    • 正如@anemyte 提到的,OSS 版本在动态上游配置方面的功能有限。我已经基于创建 upstream.conf 文件的 go-script 构建了一个解决方案,并在这样做之后重新加载 nginx 工作程序。除非您有数百个证书或巨大的配置文件,否则重新加载 nginx 在大多数情况下都不是问题。让我知道这是否是快乐的用例。很高兴分享代码。
    • 我想知道 NGINX 中是否有解决方案。第一个解决方案将负载平衡移动到 NGINX 外部的 DNS 级别,第二个解决方案使用位于 NGINX 外部的脚本。似乎不可能在 NGINX 中进行动态负载平衡。
    • 这是绝对可行的,但对于 NGINX 的免费(开源)版本则不行。 NGINX Plus(NGINX 的付费版本)将能够做到。 docs.nginx.com/nginx/admin-guide/load-balancer/…
    • 正如@Timo 提到的,这仅在 NGINX Plus 上开箱即用。他们甚至提供 API 来控制这些事情。正如您已经提到的,另一个可能是某种 bash 脚本来更改 NGINX 配置文件。
    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 2017-11-13
    • 2013-03-24
    • 1970-01-01
    • 2012-09-29
    • 2018-10-14
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多