对于一个项目,我的任务是为网上商店和 CMS 系统规划高可用性设置。但是,该项目的预算当然很紧张。因此,高端解决方案可能不在预算之内。
将有两台机器运行 Web 服务器(CMS、商店),一台机器运行数据库,一台机器运行传真服务器,传真服务器用于向合作伙伴发送订单。所有系统都运行 Linux。所有这些组件都需要高可用性,并且应支持透明故障转移。
为了降低硬件成本,我考虑使用虚拟化环境。有很多信息,但我不知道从哪里开始。显然,至少需要两台服务器作为虚拟机的主机,这样就不会出现单点故障。
哪种方式是支持高可用性的最佳方式?
第一个问题是,在这种情况下哪种虚拟化解决方案最好。需要某种管理界面。需要有一种将正在运行的虚拟机从一台主机移动至另一台主机的方法,以便对主机进行维护。需要某种机制,以便在一台主机发生故障时虚拟机仍然可用。您能就此提出有效的解决方案建议吗?
在大多数情况下,共享文件存储似乎是高可用性的先决条件(VMware vSphere 除外,但它相当昂贵)。但是,宁愿在虚拟机主机上投入更多资金,也不愿在设置中添加另外两台服务器来提供冗余的 NFS 文件存储。是否有可能只使用两台虚拟机主机?一种解决方案可能是将这两台主机也用作 NFS 主机。这样做会严重影响性能吗?
编辑:我的目标是 99.9% 的可用性。但是,不需要 24/7 的可用性,因为有固定的营业时间,这为操作留出了一定的空间。必须以某种方式保证的可用性时间段是上午 10 点到午夜之间。
答案1
总体而言,要实现高可用性,您需要:
- 多台服务器
- 数据的多个一致副本
- 可以在多个服务器之间访问一致的数据
- 在备用服务器上自动启动第二个实例的方法
第一条听起来很简单——购买两台相同的服务器。
第二个目标可以通过复制 SAN(昂贵、非常快、非常可靠)或每台服务器上复制的文件系统(便宜、速度和可靠性取决于您对所选技术的了解)来实现。
第三个可以通过 SAN(一个存储 LUN,由两台服务器访问)或复制文件系统(两个独立的存储区域,每台服务器只能看到自己的区域)来实现。
第四点可以通过心跳应用来实现。
为了以较小的预算实现这一点,假设使用 VMWare vSphere,您可以使用 SAN或者VMWare 现在提供自我复制存储设备它在两台服务器上提供两个不同的数据存储,可用于实现高可用性。vSphere 还提供内置心跳和高可用性配置。
要做到这一点不预算,您可以采用 Xen 路径,并使用 DRBD 在两个节点之间复制存储。然后,您设置心跳,以便在第一个主机发生故障时切换活动的 DRBD 存储节点和 Xen 实例以启动第二个主机上的 VM。
使用这些基本建议,你无法获得 5 个 9 (99.999%) 的正常运行时间,但你可以很容易地如果您清楚自己在做什么,那么可以使用最便宜的方法获得 3 个 9 (99.9%) 的效果。
答案2
在讨论共享存储时,您谈到“费用”时,指的是“购买这个需要多少钱”。当然,这是一个完全正确的观点,资金紧张到处。
但如果你谈论的是高可用性,那么你还需要问“为什么我们是否需要高可用性?”如果答案是“因为企业的在线销售额每小时为 2000 美元,所以如果我们停工一小时,就会损失 2000 美元”,那么费用和可负担性的问题就可以变成“我们能负担得起吗不是购买一些能够实现或大大改善我们的高可用性部署的东西?”
这是一个重要的细节,它与您关于预算的评论有关 - IT“尾巴”绝不能通过坚持对小问题采用过于复杂和昂贵的解决方案来摇动业务“狗”,但与此同时,如果业务对其 IT 基础设施有一定的要求,那么它必须准备好为它们进行适当的预算或调整其要求。
我认为虚拟化在提高系统可用性方面具有很大的潜力,但它并不是一根魔杖。硬件方面虽然很重要,但与软件要求相比,它还是次要的——如果与数据库通信的前端应用程序因无法处理故障转移而出现故障,那么在 SQL 服务器崩溃的情况下,SQL 数据库集群毫无问题地崩溃是没有好处的。
数据中心中并排放置的两台“高可用性”服务器仍然容易受到电源故障、盗窃等的影响。同样,这取决于对“为什么我们要这样做吗?”,您可能需要非常仔细地考虑这个方面,因为它可能会给项目的很多部分增加费用和复杂性。
答案3
如果不知道您使用哪种数据库和应用程序服务器,我建议:
- 在 PV 模式下为虚拟机使用 XEN >3.2(我个人最喜欢的) - 隔间或其他轻量级虚拟化解决方案也可能适合(OpenVZ 就是其中之一)。
- 在每个物理节点上构建四台VM机器
- 使用带有 SAS 3.5 英寸磁盘的本地 RAID 5 - 本地磁盘数量越多越好(5 个最好)
- 使用 15k RPM 磁盘(你的数据库将需要它)
- 使用 DRBD 和 OCFS2 提供廉价的“共享”存储,使用快速、安全、可靠的本地网络进行此连接(绑定直接互连非常快且好)。
- 在应用程序级别实现 HA
- 在机器对之间使用负载平衡,这样你就有 8 台机器同时执行任务
HA-示例:
- 应用服务器:在集群主动/主动模式下使用 Tomcat
- LVS:使用 lvs 的并发从属和主复制
- Oracle-DB:使用 RAC(我不知道是否有针对开源数据库的等效解决方案)
如果您在应用程序层上实现 HA,该层最了解如何复制会话。如果一个节点发生故障(计划内或计划外),幸存的节点将接管 - 包括会话。