Nginx 中的多个备份服务器如何工作?

Nginx 中的多个备份服务器如何工作?

对于该backup指令,请参阅 Nginx 文档状态相当简单:

将服务器标记为备份服务器。当主服务器不可用时,它将被传递请求。

如果您有多个备份服务器,而主服务器出现故障,其中一个备份服务器会被指定为新的主服务器吗?还是 Nginx 会在它们之间进行轮询?

语境

我有一个主服务器和多个备份服务器,但所有连接都应该始终转到同一个主服务器或备份服务器。有点像ip_hash负载平衡模式,但它应该使用相同的服务器全部连接和客户端。

答案1

虽然它不支持多备份服务器,正如@Alberto Mendoza 回答的那样——

如果您将备份放置到运行NGINX负载均衡器的另一个 VPS 中以进行其自己的备份……这是我目前用于多区域网络的一种解决方法。

upstream routing {
    server main_server:8080 max_fails=2 fail_timeout=5;
    server backupServer1:8080 max_fails=1 fail_timeout=5;
    server backupServer2:8080 backup;
}

如果您的主服务器在 2 次故障中没有响应 —— 它将尝试您的第一个 VPS 备份 —— 如果由于某些奇怪的原因(例如 DDOS 或其他原因)也关闭了 —— 它将转到您的第三个 VPS。您可以根据需要继续进行菊花链连接。

答案2

这是我 6 年多以来的 NGINX 配置,它允许多个备份服务器。但是,我认为它需要位于不同的端口上。如果使用同一个端口并且端口繁忙,则无法正确备份。我使用 PM2 在 5 个端口上启动我的应用程序,我的 nginx 使用这些应用服务器。

server 127.0.0.1:3000;             # NodeJS Server 1
server 127.0.0.1:3002;             # NodeJS Server 2
server 127.0.0.1:3003;             # NodeJS Server 3
server 127.0.0.1:3004 backup;      # NodeJS Server 4 - backup 1
server 127.0.0.1:3005 backup;      # NodeJS Server 5 - backup 2

答案3

嗯,最近我也做了测试......就像@alberto-mendoza一样:

upstream a {
    least_conn;
    server main_server:8080 max_fails=2 fail_timeout=5;
    server backup1:8080 backup max_fails=1 fail_timeout=30;
    server backup2:8080 backup max_fails=1 fail_timeout=60;
}

当主服务器出现故障时,nginx 会在备份服务器之间进行正确的负载平衡(使用与主服务器相同的平衡方法)。

它还接受备份服务器的 max_fails 和 fail_timeout 等参数。

答案4

我做了一个测试,似乎nginx不支持多备份服务器。

upstream a {
    server main_server:8080 max_fails=2 fail_timeout=5;
    server backup1:8080 backup;
    server backup2:8080 backup;
}

每当main_server:8080发生故障时,backup1:8080都会正确回复。当main_server:8080backup1:8080发生故障时,连接会被拒绝,并且永远不会到达backup2:8080

相关内容