为冗余而构建 Nginx

为冗余而构建 Nginx

这可能是一个愚蠢的问题,但在谷歌搜索一段时间后我找不到答案,或者只是不知道如何提问。

我在名为“myserver1”的服务器上运行一个 Web 应用程序。我已使用相同的 Web 应用程序实例启动了“myserver2”,并在两个机器上的两个数据库之间设置了复制。现在,我想使用 nginx 进行一些负载平衡,并且如果另一台服务器崩溃,则让一台服务器接管。

大多数 nginx 文档都是围绕这种简单场景编写的,但它似乎表明您将 nginx 服务器放在 Web 服务器前面。这似乎是另一个单点故障。如何使 nginx 本身冗余?您可以在两个 Web 服务器框上运行 nginx 吗?如果可以,您将 myapp.mydomain.com 的 DNS 条目指向哪里?

编辑:我想我应该补充一下,这是一款用户群相对较小的内部应用。我主要担心的是,如果我们失去服务器或与某个数据中心的连接,我们的内部用户仍然可以访问它。我只是不明白如何在 nginx 上做到这一点而不引入另一个单点故障。

答案1

nginx 中实现负载平衡的唯一方法是让单个前端(反向代理)托管负载平衡后端服务器。

这种设计背后的想法/假设是,负载只会发生在后端,并且您的单个入口点将始终能够应对它应该处理的任何流量,因为它只是重定向而不会自行处理任何事情。

你所说的实际上是故障转移, 不是负载均衡。您担心的是单一入口点的失败。

正如 @coding_hero 解释的那样,这与 nginx 无关,而是需要在底层(操作系统/网络)处理的事情。

以下页面提供了一种实现方法(虽然旧示例讨论的是 Debian oldstable,但命令可能需要更新):http://linuxmanage.com/fast-failover-configuration-with-drbd-and-heartbeat-on-debian-squeeze.html. Heartbeat 是一项众所周知的技术,允许多个相同的服务器互相监视、选举主服务器并在必要时将故障转移到从服务器。

您甚至有专用的网络硬件来完成同样的工作,通过将流量重新路由(或者可能动态重新配置路由器以重新路由?)到当前选举的主节点。

相关内容