对于一个项目,我的任务是为网上商店和 CMS 系统规划高可用性设置。但是,当然,该项目的预算很紧。因此,高端解决方案可能不在预算之内。
将有两台机器运行 Web 服务器(CMS、商店),一台运行数据库的机器,以及一台运行传真服务器的机器,用于向合作伙伴交付订单。所有系统都运行 Linux。所有这些组件都需要高度可用,并且应该支持透明的故障转移。
为了降低硬件成本,我想到了虚拟化环境。那里有很多信息,但我不知道确切地开始。很明显,至少需要服务器作为虚拟机的主机,因此不存在单点故障。
支持高可用性的最佳方式是什么?
第一个问题是在这种情况下哪种虚拟化解决方案是最好的。需要有某种管理界面。需要有一种方法将正在运行的虚拟机从一台主机移动到另一台主机,以便维护主机。需要某种机制,以便在一台主机出现故障时虚拟机仍然可用。你能在这里就一个有效的解决方案提出建议吗?
在大多数情况下,共享文件存储似乎是高可用性的先决条件(期望相当昂贵的 VMware vSphere)。但是,宁可在虚拟机主机上投入更多资金,也不愿向设置中添加另外两台服务器以提供冗余 NFS 文件存储。有没有可能只和两个虚拟机主机相处?一个解决方案可能是两个也将这两个用作 NFS 主机。这样做有很大的性能损失吗?
编辑:我的目标是 99.9% 的可用性。但是,不需要 24/7 可用,因为有正常的营业时间,这提供了一些操作空间。必须以某种方式保证可用性的时间段是上午 10 点到午夜之间。
我必须为 Magento 进行设置。我的限制主要是易于设置和容错/故障转移。此外,成本也是一个问题。我有三个相同的物理服务器来完成工作。每个服务器节点在软件 RAID 1 配置中都有一个 i7 四核、16GB RAM 和 2x3TB HD。每个节点都运行 Ubuntu 12.04。马上。我有一个额外的 IP 地址,可以路由到这些节点中的任何一个。
Magento 商店有最大。1000个产品,其中50%是捆绑产品。我估计最大。10 个用户同时处于活动状态。这使我得出结论,性能不是这里的重中之重。
一个节点 (lb) 将 nginx 作为负载均衡器运行。附加 IP 与域名一起使用并默认路由到此节点。Nginx 将负载平均分配给其他两个节点(shop1、shop2)。Shop1 和 shop2 配置相同:每个服务器运行 Apache2 和 MySQL。Mysqls 配置了主/从复制。
我的故障转移策略:
这是一个明智的策略吗?有没有人用 Magento 做过类似的设置?
另一种方法是使用 drbd 将 MySQL 数据文件存储在 shop1 和 shop2 上。我知道在这种情况下,只有一个节点/MySQL 实例可以处于活动状态,另一个用作热备用。因此,如果 shop1 失败,我会在 shop2 …