Cloud SQL 中的蓝绿部署简介

本文档概述了 Cloud SQL 蓝绿部署,该部署可让您在最大限度减少停机时间的情况下执行数据库更新,例如主要版本升级和硬件修改。

部署意图和使用情形

您可以创建蓝绿部署,无论是否打算执行主要版本升级:

  • 有目的地创建(主要版本升级):将数据库引擎升级到较新的主要版本。在创建部署期间,Cloud SQL 会运行主要版本升级预检 API 来验证兼容性,然后再继续执行升级工作流。
  • 无意创建(配置或硬件更改):在当前数据库版本中暂存修改。用例包括更改机器类型(CPU/RAM 伸缩)、测试数据库标志或评估存储修改,而无需升级引擎版本。

蓝绿部署的运作方式

Cloud SQL 蓝绿部署通过在临时辅助环境中暂存更改,然后在切换到实时流量之前,提供自动化工作流。

在蓝绿部署期间,Cloud SQL 会创建一个单独的预演环境(绿色),该环境与您现有的生产环境(蓝色)相同。该服务会持续维护从蓝色到绿色的逻辑复制。您可以在绿色环境中全面测试应用兼容性和性能,而不会影响生产流量。准备就绪后,您可以触发快速切换,将绿色环境分配为生产读取和写入状态,从而最大限度地减少应用停机时间(通常在几秒内)。

蓝绿部署的组成部分

蓝绿部署包含以下组件:

  • 蓝色环境(源):当前正在主动处理应用流量的现有生产环境。它包含源读取和写入实例以及任何关联的配置。
  • 绿色环境(目标):Cloud SQL 创建的临时隔离式预演环境,作为蓝色环境的克隆。绿色环境会纳入您请求的更改(例如更新的数据库版本),并通过使用持续复制与蓝色环境保持同步。Cloud SQL 会使用 BLUE_INSTANCE_NAME-green-UNIQUE_ID 模式自动命名绿色暂存实例(其中 BLUE_INSTANCE_NAME 最多截断为 48 个字符,UNIQUE_ID 是一个 8 字符的十六进制标识符)。
  • 切换:用户主动发起的计划性流程,用于将绿色环境转换为新的正式版读写实例。在切换期间,Cloud SQL 会交换连接端点,以便应用连接到绿色环境,但连接会短暂中断(通常在几秒内)。切换期间的预期停机时间因 Cloud SQL 版本而异:

    • Cloud SQL 企业 Plus 版:故障切换停机时间通常为亚秒级。
    • Cloud SQL 企业版:故障切换停机时间通常不到 60 秒,具体取决于工作负载和复制延迟。

    与计划外的故障切换(在中断期间自动触发)不同,切换是一项受控操作,用于计划性变更管理。

  • 删除:移除蓝绿部署资源的过程。 删除行为因是否已发生切换而异:

    • 切换之前:删除部署会移除绿色临时实例和部署资源。蓝色正式版实例不受影响,并继续提供流量。
    • 切换后:删除部署会移除部署元数据。默认情况下,转换后的实例(绿色)和蓝色实例都会保留。您可以选择删除蓝色实例,以免产生持续费用。

部署生命周期和状态

蓝绿部署会经历四个不同的生命周期阶段:

  1. 创建和暂存 (PROVISIONING):当您请求蓝绿部署时,Cloud SQL 会预配一个临时的绿色目标实例,该实例会克隆您的蓝色生产环境。如果进行主要版本升级,Cloud SQL 还会运行主要版本升级预检 API 来验证数据库兼容性,然后再继续执行升级工作流。Cloud SQL 会将请求的升级或配置更改应用于绿色环境,并开始从蓝色环境到绿色环境的持续逻辑复制。
  2. 预演验证(SWITCHOVER_READY 或 SWITCHOVER_NOT_READY):当初始复制完成时,部署会进入 SWITCHOVER_READY 状态(如果复制中断或发生错误,则进入 SWITCHOVER_NOT_READY 状态)。蓝色继续接收实时生产流量。您可以连接到绿色环境来运行验证测试、验证应用兼容性并测试查询性能。
  3. 切换执行(SWITCHOVER_IN_PROGRESS 或 SWITCHOVER_COMPLETED):当您触发切换时,Cloud SQL 会运行安全预检查,交换连接端点,并将绿色实例设置为您的有效生产读取和写入实例 (SWITCHOVER_COMPLETED),并将蓝色实例转换为独立的读取和写入实例。活跃的读写操作会专门路由到绿色实例,并且从蓝色到绿色的逻辑复制会终止。如需了解详情,请参阅执行蓝绿部署切换。
  4. 删除 (DELETING):完成测试或验证生产环境操作后,您可以删除部署资源。删除行为因部署状态而异:

    • 切换之前(取消):如果您决定不继续部署,或者出现验证问题,删除部署会移除绿色临时实例并删除部署元数据。原始蓝色生产实例保持不变,并继续不间断地处理流量。
    • 切换后(清理):切换完成后,并且您验证了新生产实例上的操作后,删除部署会移除部署元数据。默认情况下,新的生产实例(绿色)和蓝色实例都会保留为独立的读写实例。您可以选择指定 --delete-old-source 标志,以永久删除蓝色实例并停止为其付费。

    如需了解详情,请参阅删除蓝绿部署。

部署资源状态

检查蓝绿部署时,state 字段会指明其当前的生命周期状态:

  • PROVISIONING:正在创建部署。对于主要版本升级,Cloud SQL 会运行预检 API 来验证兼容性,然后再继续。Cloud SQL 会预配绿色环境,应用所请求的升级,并设置持续的逻辑复制。
  • SWITCHOVER_READY:绿色环境已完成配置,从蓝色到绿色的逻辑复制运行正常,并且部署已准备好进行切换。
  • SWITCHOVER_NOT_READY:部署已配置,但无法启动切换。如果逻辑复制中断或停止、初始复制尚未完成,或者配对节点遇到错误,就会发生这种情况。
  • SWITCHOVER_IN_PROGRESS:切换操作正在运行。 Cloud SQL 正在交换连接端点,并将绿色实例转换为活跃的生产读取和写入实例。
  • SWITCHOVER_COMPLETED:切换操作已成功完成。绿色实例现在是您的有效生产读写实例,而蓝色实例则保留为独立的读写实例。
  • DELETING:正在删除部署。如果在切换之前删除,Cloud SQL 会移除绿色暂存实例并删除部署元数据。如果在切换后删除,Cloud SQL 会移除部署元数据,并可选择性地删除蓝色实例(如果指定了 --delete-old-source 标志)。
  • STATE_UNSPECIFIED:部署的状态未知。

切换状态和就绪情况

切换就绪取决于复制健康状况和节点状态,以保护生产数据库免遭数据丢失或长时间停机:

  • 复制健康状况和延迟时间:如果蓝色和绿色之间的逻辑复制中断、暂停或失败,部署状态会转换为 SWITCHOVER_NOT_READY。部署 state 和 describe 输出不会报告复制延迟,并且 Cloud SQL 在确定部署状态时不会将复制延迟作为预检项进行评估。不过,如果启动切换时复制延迟过高,切换操作会失败。为确保成功完成切换,请确保在开始切换之前,复制延迟时间尽可能短。您可以在 Cloud Monitoring 中监控复制延迟(通过查看 Cloud SQL 指标列表中的 replica_lag 等指标),也可以直接在绿色实例上监控。如需了解详情,请参阅监控复制延迟。
  • 配对节点状态:在 deploymentMappings 下,每个配对节点都会报告自己的节点状态(例如 PROVISIONED、UPGRADED、UPGRADE_FAILED、SWITCHOVER_IN_PROGRESS、SWITCHOVER_SUCCEEDED 或 SWITCHOVER_FAILED)。如果配对节点遇到错误(UPGRADE_FAILED 或 SWITCHOVER_FAILED),则整个部署状态会转换为 SWITCHOVER_NOT_READY。如果切换失败,路由将继续指向蓝色实例,且不会丢失任何数据。
  • 排查切换准备情况:如果您的部署报告 SWITCHOVER_NOT_READY,请检查 errorDetail 字段以诊断复制或节点错误。在启动切换之前,请确保复制延迟时间最短,并验证蓝色实例上正在进行中的批量 DDL 操作或长时间运行的写入事务是否已完成。

限制

在使用蓝绿部署之前,请查看以下限制:

  • 支持的引擎和版本:Cloud SQL for MySQL 实例(使用 MySQL 5.7 及更高版本)支持配置暂存(创建时不指定用途)。从 MySQL 8.0 到 8.4 的主要版本升级目标(有意创建)受支持。MySQL 8.0.18 不支持蓝绿部署。
  • 不支持的数据库引擎:不支持 Cloud SQL for PostgreSQL 和 Cloud SQL for SQL Server。
  • 具有读取副本的实例:蓝绿部署不支持具有读取副本的实例。
  • 不支持的网络配置:蓝绿部署不支持 Private Service Connect 出站配置。
  • IAM 群组身份验证:蓝绿部署与 MySQL IAM 群组身份验证不兼容,可能会导致切换失败。
  • 网络架构要求:Cloud SQL 实例必须使用新网络架构。不支持使用旧网络架构的实例。
  • 二进制日志记录要求:MySQL 实例必须启用自动备份和二进制日志记录,才能支持到绿色环境的持续逻辑复制。
  • 维护版本要求:在创建蓝绿部署之前,蓝色源实例必须运行最新维护版本。 如需查看或更新实例维护版本,请参阅执行自助维护。
  • 资源可用性:在蓝绿部署工作流期间(包括创建绿色暂存实例和在切换后创建蓝色实例)预配实例可能会受到所选区域或可用区计算资源限制的影响。
  • 计划外服务中断和故障切换:蓝绿部署切换严格来说是一项计划内操作,需要健康的RUNNING蓝色源实例。绿色临时实例充当专用读取副本;与标准读取副本一样,在源实例发生意外中断期间,绿色实例不能用作故障切换目标。如需自动执行中断恢复,请为实例配置高可用性,或使用灾难恢复 (DR) 副本。

结算和价格

使用蓝绿部署无需额外费用。不过,由于在部署期间会预配完整的并行绿色环境,因此您需要为蓝色实例和绿色实例支付标准费率,直到这两个环境都存在为止。

为避免产生不必要的费用,请删除部署和关联的实例:

  • 切换之前:如果您取消部署,请删除该部署以移除绿色暂存实例并停止相关费用。
  • 切换后:删除部署,并指定 --delete-old-source 标志,以便在验证新的生产实例后永久删除蓝色实例。如果您不删除蓝色实例,系统会继续向您收取这两个实例的费用。

后续步骤