我在一家小型 ISP 工作,我们托管大约 250 个域名以及与之相关的所有东西:DNS、邮件、垃圾邮件过滤和备份。目前,我们有独立的 DNS 服务器(两个)和邮件服务器(外发邮件实际上在辅助 DNS 服务器上,但以前在自己的服务器上)。过去,这样做是作为一种保险措施。我们最不希望看到的是一些傻瓜(通常是我本人)破坏服务器,同时破坏 DNS 和邮件,或者垃圾邮件发送者堵塞我们的传入 SMTP 服务器,阻止外发邮件发送。过去,这是一个问题,我们的服务器设置为现在这样是为了解决这个问题。
然而,像 Sun 的 Cobalt RAQ(过去)和 Virtualmin 这样的集群解决方案似乎迎合了一种一体化方法,然后通过冗余服务器处理故障。到目前为止,我一直避免这样做,但我们已经在我们的 Web 服务器上使用 Virtualmin 有一段时间了,我想扩展到使用它来构建高可用性集群。我们的网络合作伙伴最近建立了一个数据中心,消除了我们所有其他的麻烦,如网络、冷却和电源问题,所以现在唯一可能出错的就是我本月早些时候发生的服务器故障。
我们避免采用这种方式的一个主要原因是我们对硬件的要求不是特别高。一台服务器可以轻松处理我们托管的所有网站(其中大多数是平面网站)。此外,负载平衡路由器往往既昂贵又复杂。我真正期望做的就是构建一个双节点集群以实现冗余,这样当我关闭一台服务器时(无论这种情况多么罕见),我们不会因为重建它而停机 8-12 小时。
我需要知道的是如何开始,以及我是否真的有能力去处理这种事情。
答案1
我发现使用负载平衡是实现 Web 服务器高可用性的首选解决方案。它有利于分阶段部署代码、不让可用资源闲置以及引入冗余。 低压开关柜是我首选的解决方案。其他人似乎喜欢磅我也对HAProxy。使用 LVS,配置 ldirectord 服务器并在 Web 服务器上使用 arptables 是一种简单的实现方式。您可以通过使用具有故障转移功能的主动/被动服务器实现来防止 LVS 的单点故障心跳。
现在,如果您是共享主机销售账户,那么引入具有自动故障转移的高可用性将变得更加复杂。因此,您可能必须考虑使用冗余存储解决方案,多个服务器可以访问并使用心跳配置主动/被动服务器。 DRBD看起来它在这里可能有用。
您可以使用完全开源和商用硬件实现完整的高可用性解决方案,而不会出现单点故障。如果您需要更多建议,我很乐意提供帮助。这是我最喜欢关注的领域之一。
答案2
我们最近做的是设置乌卡普 在我们的集群上,并设置 4 个配置相同的节点。我们运行内部开发的 Web 应用程序,因此这 4 个节点在不充当前端时实际上会执行后端工作。
当服务节点开始出现问题时,UCARP 和我编写的一些脚本会自动在另一个节点上调出 IP。NGINX 是我们的前端服务器,它负责确保请求被路由到可用的节点。
所有这些的结果是,我可以毫无预警地关闭我们 4 个节点中的任何一个,服务将在几秒钟内自动迁移到另一个可用节点。(与该节点的现有连接被中断,但在任何给定时刻只有少数几个,当它们重新加载时,其他地方的一切都会恢复全速。)UCARP 将检测 IP 连接中的故障 --- 如果其他事情变糟,您必须想办法关闭坏节点的 IP 连接,以便其他正常运行的节点接管。
所有 4 个节点都挂载一个 nfs 导出的文件系统,由一对运行 drbd 的机器处理