设计弹性系统


本文档介绍了在 Compute Engine 上设计弹性系统的最佳做法。它提供了一般性建议,介绍了 Compute Engine 中的某些功能,这些功能有助于减少实例停机时间,以及为应对虚拟机 (VM) 实例的意外故障做好准备。

弹性系统是指可以承受一定数量的故障或中断,而不会中断您的服务或影响用户的服务使用体验的系统。虽然 Compute Engine 会不遗余力防止此类中断,但某些事件是不可预测的,因此最好是为这些事件做好准备。

故障类型

在某些时候,您的一个或多个虚拟机可能会由于系统或硬件故障而无法工作。以下列表包含您可以缓解的某些类型的故障场景:

  • 意外的单个虚拟机故障

    意外的单个虚拟机故障可能是由硬件或系统故障导致的。您可以使用永久性磁盘启动脚本来保存数据,并在重启后重新启用软件,从而缓解这些事件虚拟机。

  • 意外的单个虚拟机重新启动

    有时,您可能会遇到意外的单个虚拟机故障和重新启动。与意外的单个虚拟机故障不同,Compute Engine 会在虚拟机失败后自动重新启动。为缓解此类事件的影响,请备份数据,使用永久性磁盘,并使用启动脚本快速重新配置软件。

  • 地区或区域故障

    可用区和区域故障非常罕见,但一旦发生就可能会导致给定可用区或区域内的所有虚拟机无法访问或失败。为缓解此类事件的影响,请在不同的区域和可用区创建实例并实现负载均衡。您还应该备份数据或跨多个地区复制永久性磁盘

有关设计弹性系统的提示

为了帮助缓解虚拟机故障,请将您的应用设计为能够针对故障、网络中断和意外灾难进行恢复。弹性系统可以顺利应对故障,例如将流量从无法访问的虚拟机重定向到活跃虚拟机,或者在重启时自动执行任务。

以下的一般性提示有助于设计弹性系统,抵御故障。

使用实时迁移

Google 会定期对其基础架构进行维护,方法是使用最新软件修补系统、执行日常测试和预防维护,以及全面确保其基础架构尽可能安全、快速和高效。Compute Engine 采用实时迁移来确保此基础架构维护在默认情况下对于您的虚拟机是透明的。

实时迁移是一项技术,用于将正在运行的虚拟机从即将进行维护的系统中移出。Compute Engine 会自动执行此操作。

在实时迁移期间,您的虚拟机可能会出现短暂的性能下降情况。对于需要维持最高性能的虚拟机,您可以使用可在其未参与维护事件的主机上停止和重启的配置。此选项适用于同样用于处理虚拟机故障或重新启动的整体应用。

如需将您的虚拟机配置为可进行实时迁移,或者将其配置为重新启动而不是迁移,请参阅设置实例的安排选项

分布虚拟机

您可以跨多个区域和可用区创建虚拟机,这样如果您的一个虚拟机所在的可用区或区域发生服务中断情况,您就可以改用备用虚拟机。如果您在同一可用区或区域中托管所有虚拟机,那么一旦该可用区或区域因服务中断而无法访问,您将无法访问其中的任何虚拟机。

使用地区特有的内部 DNS 名称

将您的项目或组织的默认内部 DNS 类型设置为区域 DNS。在您的应用中,请在访问其他虚拟机时使用区域 DNS 名称。内部 DNS 服务器会分布在所有区域,因此即使其他地点发生故障,您也可以依靠区域 DNS 名称进行解析。

由于单点故障,全球 DNS 的弹性较低。区域 DNS 可降低跨区域服务中断的风险。区域 DNS 不要求项目中所有区域的虚拟机名称具有唯一性,因此可以更快地创建虚拟机。

如需检查虚拟机使用的是区域 DNS 名称还是全球 DNS 名称,请参阅确定虚拟机实例的内部 DNS 名称

如果您的项目使用的是全球 DNS 名称,您可以改用区域 DNS 名称。如需了解详情,请参阅改用区域 DNS 名称

创建虚拟机组

您可以使用代管式实例组来创建同类实例组,使负载均衡器能够将流量定向到多个虚拟机,以防某一虚拟机健康状况不佳。

代管式实例组 (MIG) 还提供自动扩缩自动修复等功能。借助自动扩缩功能,您可以根据特定信号增加或减少虚拟机数量,从而应对流量高峰;而自动修复功能会执行健康检查,并在必要时自动重新创建健康状况不佳的虚拟机。

MIG 也适用于区域,因此您可以创建一组分布在单个区域内的多个可用区的虚拟机组。如需了解详情,请参阅创建和管理区域级 MIG

使用负载均衡

Google Cloud 提供了负载均衡服务,可帮助您应对流量巨大的时段,以免虚拟机过载。使用 Cloud Load Balancing,您可以执行以下操作:

  • 使用区域级 MIG 在多个可用区内的虚拟机上部署应用。然后,您可以配置转发规则,以将流量分布到该区域内的所有地区中的所有虚拟机中。每个转发规则都可以使用外部 IP 地址来定义应用的一个入口点。

  • 使用全局负载均衡在多个区域中部署虚拟机。HTTP(S) 负载均衡使您的流量能够在离客户端最近的位置进入 Google Cloud 系统。跨区域负载均衡可实现冗余性,以便在流量无法到达某个区域时自动转移至其他区域。这样,您的服务仍然可以使用相同的外部 IP 地址访问。

  • 使用自动扩缩功能,根据负载的增减自动在 MIG 中添加或删除虚拟机。

此外,Cloud Load Balancing 提供虚拟机健康检查,从而在检测和处理虚拟机故障方面提供支持。

使用启动和关停脚本

Compute Engine 提供了启动和关停脚本,这两种脚本分别在虚拟机启动或关停时运行。启动和关停脚本可以自动执行安装软件、运行更新、进行备份和记录数据等任务。

启动脚本和关闭脚本是一种高效且极具价值的方式,用于引导或妥善关闭虚拟机。与使用自定义映像配置虚拟机相比,使用启动脚本配置虚拟机可以有诸多益处。

启动脚本会在虚拟机因故障而重新启动时运行,可用于安装软件和更新。您还可以使用启动脚本来确保服务在虚拟机内运行。与尝试找出自定义映像中哪些文件和字节发生了变化相比,将更改以代码形式写入到启动脚本中来配置虚拟机则更为简单。

关停脚本会在虚拟机关停时(无论有意还是无意)运行。这些脚本可以在您停止虚拟机之前执行最后的任务,如备份数据、保存日志以及平稳停止连接。

如需了解详情,请参阅运行启动脚本运行关停脚本

备份数据

定期在多个位置备份数据。您可以将文件上传到 Cloud Storage创建永久性磁盘快照,或将数据复制到其他区域或地区中的永久性磁盘。