到目前为止,我总是在单个实例(云或 vps)上设置我的项目。始终是相同的例程:安装 LAMP,让它制作 mysql 转储以进行备份,保护 ssh,让它运行多年而无需太多维护。
这些都是小项目,从来没有出现过任何问题。
项目现在变得越来越大,我刚刚在 Rackspace 遇到了硬件故障。停机 4 个小时,客户只能等待。等等。
因此,我的问题是:我需要学习什么才能达到下一个“级别”?
我是否应该开始拆分东西:一个单独的数据库服务器,一个单独的网络服务器等。我是否应该学习如何在停机时快速部署新的云实例?我应该......一些我还没有想到的事情......?
答案1
这取决于您的应用程序对任务的重要性。您可以设置 HA(高可用性)配置,将集群规模扩大一倍(价格翻倍),并在出现任何问题时自动进行故障转移。
至于拆分服务器,这可能是一个好主意。例如,您可以有两个负载平衡的前端节点为您的网页提供服务。如果您发现其中一台服务器出现任何问题,您可以在检查问题的同时将发生故障的节点从负载平衡器中移除。与此同时,所有流量将继续由剩余节点提供服务。
答案2
您应该规划高可用性(HA)和灾难恢复(DR)策略。
1. Build for server failure
云端实例(就像典型的数据中心一样)是短暂的。您需要为服务器故障做好准备。为应对服务器故障,首先要设计无状态应用程序,这些应用程序在服务器或服务重启或重新启动后具有弹性。
设置自动扩展,以便您的应用程序可以根据一组性能指标响应动态流量模式。设置数据库镜像、主/从配置和/或启动,以确保数据完整性和最短停机时间。使用动态 DNS 和静态 IP,以便应用程序基础架构的组件始终具有正确的上下文。
2. Build for zone failure
有时,不仅仅是单个服务器发生故障,还有电源故障、网络中断和雷击。您需要确保您的应用程序已为区域故障做好准备。区域(Amazon Web Services 将其称为“可用区域”)是经过精心设计以免受其他区域故障影响的不同位置。
将每个应用程序层的服务器分布在至少两个区域中。跨区域复制数据。