执行蓝绿部署切换

在测试并验证绿环境后,您将开始切换,将绿环境转换为新的生产读写环境。

准备工作

在启动切换之前,请确保您拥有所需的权限,并且您的部署已准备好进行割接。

所需的角色和权限

如需获得执行切换所需的权限,请让管理员向您授予项目的以下 IAM 角色:

  • Cloud SQL Admin (roles/cloudsql.admin)

对于自定义角色,请确保您拥有以下权限:

  • cloudsql.blueGreenDeployments.switchover
  • cloudsql.blueGreenDeployments.get
  • cloudsql.instances.switchover
  • cloudsql.operations.get

如需详细了解 Cloud SQL 中的 IAM 角色和权限,请参阅角色和权限。

切换前验证

在启动切换之前,请验证以下条件:

  1. 部署状态:部署必须处于 SWITCHOVER_READY 状态。
  2. 工作负载验证:在绿色临时实例上完成所有测试和验证。
  3. 复制延迟时间短:确保蓝色环境和绿色环境之间的复制延迟时间最短,以缩短割接时间。

切换的运作方式

当您启动切换时,Cloud SQL 会按以下自动顺序执行操作:

  1. 切换前验证:在执行切换操作之前,Cloud SQL 会验证复制是否未中断,并执行一系列配置检查以确保部署已准备就绪。
  2. 切换工作流执行:在工作流执行期间,Cloud SQL 会准备实例以进行割接。如果复制延迟过高,或者有有效事务阻止割接,则切换操作会失败,并且生产环境蓝色环境会保持在线状态。
  3. 流量重定向:Cloud SQL 会交换蓝色实例和绿色实例之间的连接端点。
  4. 角色转换:绿色实例成为活跃的生产读写实例,蓝色实例成为独立的读写实例。

在切换期间,应用连接会短暂中断(通常只有几秒钟),然后自动重新连接到升级后的生产实例。切换停机时间因 Cloud SQL 版本而异:

  • Cloud SQL 企业 Plus 版:故障切换停机时间通常为亚秒级。
  • Cloud SQL 企业版:故障切换停机时间通常不到 60 秒,具体取决于工作负载和复制延迟。 无需更改应用配置或连接字符串。

切换生命周期状态

在切换之前、期间和之后,部署会在 state 响应字段中经历以下状态:

  • SWITCHOVER_READY:从蓝色到绿色的逻辑复制运行正常,并且部署已准备好进行切换。SWITCHOVER_READY 状态仅取决于复制是否正常。Cloud SQL 在设置此状态时不会评估复制延迟。
  • SWITCHOVER_NOT_READY:部署已配置,但无法启动切换。如果逻辑复制中断、暂停或停止,或者发生底层节点错误,就会出现这种情况。Cloud SQL 在设置此状态时不会评估复制延迟。检查 errorDetail 并解决错误,然后再尝试切换。
  • SWITCHOVER_IN_PROGRESS:切换命令正在积极执行。 Cloud SQL 正在交换连接端点,并将绿色实例转换为生产读取和写入实例。
  • SWITCHOVER_COMPLETED:切换已成功完成。绿色实例现在是您的活跃生产数据库实例,可处理读取和写入流量;蓝色实例将保留为独立的读取和写入实例,直到您删除部署为止。

切换前的最佳实践

  • 在低流量时段安排:虽然停机时间很短(通常只有几秒),但仍应在写入活动较少的时段(例如,非高峰时段或维护窗口,此时每秒查询次数 [QPS] 最低)开始切换。这样可以最大限度地减少复制延迟,并降低交易取消的风险。
  • 验证复制延迟时间:在开始切换之前,请确保复制延迟时间最短。描述蓝绿部署时不会显示复制延迟,并且 Cloud SQL 在切换操作之前不会检查复制延迟。不过,在工作流执行期间,如果复制延迟时间过长,切换会失败。如需监控复制延迟时间,请检查 Cloud Monitoring 指标(例如 replica_lag),或直接在绿色实例上检查复制状态。如需了解详情,请参阅复制延迟。
  • 检查活跃事务:确保在开始切换之前,长时间运行的 DDL 操作或批量写入已完成。

启动切换

使用 Google Cloud 控制台、gcloud CLI 或 Cloud SQL Admin API 启动切换操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 在蓝绿部署状态卡片中,点击详情以打开部署概览页面。
  4. 点击切换部署。
  5. 在实例设置差异对话框中,查看源实例和目标实例之间的设置差异,然后点击继续以开始切换。

gcloud

运行 blue-green-deployments switchover 命令:

gcloud beta sql blue-green-deployments switchover DEPLOYMENT_NAME \
  --region=REGION \
  --async

切换操作可能需要几分钟才能完成。您可能会看到一条消息,指示操作所花的时间超出了预期。您可以忽略此消息,也可以运行 gcloud sql operations wait 命令来关闭该消息,然后等待操作完成:

gcloud sql operations wait OPERATION_ID

如需检查切换操作的状态,请运行 gcloud sql operations describe 命令:

gcloud sql operations describe OPERATION_ID

替换以下内容:

  • DEPLOYMENT_NAME:蓝绿部署的名称。
  • REGION:创建部署的 Google Cloud 区域。
  • OPERATION_ID:切换操作的 ID。

REST v1

向 blueGreenDeployments.switchover 方法发送 POST 请求:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments/DEPLOYMENT_NAME:switchover

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • REGION:创建部署的 Google Cloud 区域。
  • DEPLOYMENT_NAME:蓝绿部署的名称。

REST v1beta4

向 blueGreenDeployments.switchover 方法发送 POST 请求:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments/DEPLOYMENT_NAME:switchover

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • REGION:创建部署的 Google Cloud 区域。
  • DEPLOYMENT_NAME:蓝绿部署的名称。

切换后监控

切换完成后:

  1. 验证您的应用是否已成功重新连接,以及生产数据库操作是否已恢复。
  2. 监控新生产实例上的查询吞吐量、错误日志和复制状态。
  3. 在升级后的初始验证期内,请保持蓝色独立实例完好无损。确认稳定性后,删除部署。如需了解详情,请参阅删除蓝绿部署。

后续步骤