本文档介绍了在 Compute Engine 上设计弹性系统的最佳做法。它提供了一般性建议,介绍了 Compute Engine 中的某些功能,这些功能有助于减少实例停机时间,以及为应对 Compute Engine 实例的意外故障做好准备。
弹性系统是指可以承受一定数量的故障或中断,而不会中断您的服务或影响用户的服务使用体验的系统。虽然 Compute Engine 会不遗余力防止此类中断,但某些事件是不可预测的,因此最好是为这些事件做好准备。
故障类型
在某些时候,您的一个或多个计算实例可能会由于系统或硬件故障而无法工作。以下列表包含您可以缓解的某些类型的故障场景:
意外的单个实例故障
意外的单个实例故障可能是由硬件或系统故障导致的。您可以使用永久性磁盘和启动脚本来保存数据,并在重启后重新启用软件,从而缓解这些事件虚拟机。
意外的单个虚拟机重新启动
有时,您可能会遇到意外的单个虚拟机故障和重新启动。与意外的单个虚拟机故障不同,Compute Engine 会在虚拟机失败后自动重新启动。为缓解此类事件的影响,请备份数据,使用 Hyperdisk 或永久性磁盘,并使用启动脚本快速重新配置软件。
地区或区域故障
可用区和区域故障非常罕见,但一旦发生,就可能会导致指定可用区或区域内的所有实例无法访问或失败。为缓解此类事件的影响,请在不同的区域和可用区创建实例并实现负载均衡。您还应备份数据或跨多个可用区复制磁盘。
有关设计弹性系统的提示
为了帮助缓解计算实例故障,请将您的应用设计为能够针对故障、网络中断和意外灾难进行恢复。弹性系统可以顺利应对故障,例如将流量从无法访问的实例重定向到活跃实例,或者在重启时自动执行任务。
以下的一般性提示有助于设计弹性系统,抵御故障。
使用实时迁移
Google Cloud 会定期对其基础架构进行维护,方法是使用最新软件修补系统、执行日常测试和预防性维护,以及全面确保其基础架构尽可能安全、快速和高效。Compute Engine 采用实时迁移来确保此基础架构维护在默认情况下对于您的计算实例是透明的。
实时迁移是一项技术,用于将正在运行的实例从即将进行维护的系统中移出。Compute Engine 会自动为受支持的实例类型执行此操作。
在实时迁移期间,您的实例可能会出现短暂的性能下降情况。对于需要维持最高性能的实例,您可以将实例配置为在其他主机上重启,而不是进行实时迁移。如果您选择此选项,Compute Engine 会停止实例,然后在不受维护事件影响的主机上重启该实例。终止并重启实例适用于同样用于处理实例故障或重启的整体应用。
如需将您的实例配置为可进行实时迁移,或者将其配置为重新启动而不是迁移,请参阅为实例设置主机维护政策。
分布实例
您可以跨多个区域和可用区创建实例,这样如果您的一个实例所在的可用区或区域发生服务中断情况,您就可以改用备用计算实例。如果您在同一可用区或区域中创建所有实例,那么一旦该可用区或区域因服务中断而无法访问,您将无法访问其中的任何实例。
使用地区特有的内部 DNS 名称
将您的项目或组织的默认内部 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、创建磁盘快照,或使用同步复制将数据复制到其他可用区的磁盘,也可以使用异步复制将数据复制到其他区域。