如何在两台机器上设置 Nginx,以便当主机崩溃时,可以自动故障转移到第二台机器?这里的最佳做法是什么?
关于如何对 nginx 路由到的后端服务器进行故障转移的文章似乎已经很多了。这不是我问的。
答案1
我们在环境中使用 Corosync 和 Pacemaker 组成主动/被动 nginx 集群,运行效果非常好。
根据我最近的经验,以下是需要记住的几个关键点。
- 使用 Corosync()而不是 Pacemaker 来加入集群节点
/etc/corosync/corosync.conf
,在我的环境中,使用后者时经常出现诸如脑裂之类的问题。 默认选项是使用
pcs
命令来配置集群。但是,您crm
也可以使用少数人喜欢的命令。您必须crmsh
根据操作系统从 Suse 存储库安装。这是我在基于 Red Hat 的发行版中使用的。wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo -nd -O /etc/yum.repos.d/crmsh.repo && yum install crmsh
安装后,请确保禁用 stonith 和 quorum,并设置资源粘性。假设您有一个双节点集群,这些命令应该可以正常工作。
pcs property set stonith-enabled=false pcs property set no-quorum-policy=ignore pcs resource defaults resource-stickiness="INFINITY" pcs resource defaults migration-threshold="1"`
您可以使用 rysnc 或 unison 等工具在主动节点和被动节点之间同步文件。对于块级同步(可能
/etc/nginx
安装在文件系统上),您可以使用 drbd,它可以轻松作为集群中的资源添加最后,确保对所有资源进行分组,并使用类似命令对其进行
pcs constraint colocation
排序pcs constraint order
您可以轻松地使用 Google 找到以上所有信息,下面有几个链接可以帮助您入门。
- 主动被动集群设置 Apache(使用 nginx 资源而不是 apache)
- 确保资源在同一主机上运行
- 确保资源按顺序启动和停止
答案2
对于简单的故障,使用 Heartbeat 守护进程将 IP 地址传输到备用机器是一个很好的解决方案。请参阅 Cameron Miller 的 HOWTO许多其他指南可通过以下方式获取:谷歌搜索“心跳nginx“。
答案3
看看我在 POSIX shell 中编写的故障转移群集 https://github.com/nackstein/back-to-work/ 有很多关于如何 d 的文章,您将需要 3 个节点来获得仲裁(其他集群软件使用 2 个节点 + 共享存储或 STONITH 方法,其中每个节点都尝试杀死其他节点,但这需要专门的硬件)。
您可以设置 3 个具有 ssh 访问权限的节点,这些节点将用作锁定服务器(仲裁服务器)。然后选择其中 2 个节点,这些节点将具有虚拟 IP 和运行的 http 服务器。如果发生故障,back-to-work 将切换虚拟 IP 和 http 服务器。如果您需要帮助设置一切,请通过邮件联系我(请参阅代码以获取地址)
答案4
您有很多选择。
便宜又有效,使用 DNS 轮询,几乎所有大公司都使用这种方法(尽管不仅限于故障转移)。以下是示例:
$ host amazon.com
amazon.com has address 176.32.98.166
amazon.com has address 205.251.242.54
amazon.com has address 176.32.103.205
amazon.com mail is handled by 5 amazon-smtp.amazon.com.
$
在这种情况下,浏览器负责处理故障转移。实际上,它非常有效,您只需配置 DNS 条目即可。
不限于 HTTP / SMTP 的另一种选择是使用硬件负载均衡器,例如 F5 的 BIG-IP。
然后还有大量其他解决方案,没有足够的空间来列出它们,但很容易通过谷歌找到它们。