如何修改自动备份窗口而不触发实例重启?

解读

在国内金融、政企类客户的上云实践中,**“零重启”**是生产红线:任何一次实例重启都意味着业务闪断、连接池重建、甚至监管告警。Google Cloud SQL 的备份窗口(backup window)虽然被官方文档归为“online 可在线调整”,但候选人必须区分“online”与“zero-impact”——online 仅表示 API 调用立即返回,不代表底层不会发生 fail-over。因此,面试官真正想考察的是:

  1. 你是否熟悉 Cloud SQL 的维护策略(maintenance timing)高可用架构(HA + Regional)
  2. 能否在国内网络隔离+专线接入场景下,用最小权限、最小影响完成变更;
  3. 是否具备灰度验证回滚预案意识,而不是简单改完就交差。

知识点

  1. 备份窗口与维护窗口解耦:backup window 仅决定“备份启动的最早时间”,实际 I/O 由后台 Agent 在实例内部完成,不触碰数据库进程;而 maintenance window 才可能导致重启。
  2. HA 实例的“透明重启”陷阱:即使只改 backup window,若实例处于非 HA 或单可用区,后台仍可能触发 master 重启;Regional(跨区 HA)实例则先切到 standby,再对旧 master 做维护,业务仅秒级闪断。
  3. 国内灰度手段
    • 使用标签+ Terraform 先改测试实例,通过 Cloud Monitoring 观察“database/uptime”指标是否掉零;
    • 利用维护期排除(maintenance exclusion) 把正式实例的“紧急维护”锁定,再改 backup window,确保变更落入下一次常规维护期。
  4. 最小权限:在国内多账号模型下,仅授予 roles/cloudsql.editor + 自定义条件 resource.name.extract("instances/{name}") == "target-instance",防止横向越权。
  5. 命令行细节
    gcloud sql instances patch INSTANCE_ID \
      --backup-start-time=02:00 \
      --maintenance-window-day=SUN \
      --maintenance-window-hour=04 \
      --async
    
    加上 --async 让 CLI 立即返回,再用 gcloud sql operations wait 轮训直到 status=DONE,可脚本化嵌入发布平台。

答案

  1. 先确认实例类型为Regional HA(国内叫“高可用版”),否则无法做到零重启;
  2. 把正式流量切换到只读实例或缓存层(如 Redis)做兜底,虽然理论上无需,但国内银行客户要求双保险
  3. 通过 gcloud 或 Terraform 只改 settings.backupConfiguration.startTime不显式指定 maintenance window
  4. 在操作前创建维护期排除(exclusion)锁定 7 天,防止后台把该变更标记为“需要重启”;
  5. 变更后观察 Cloud Monitoring 指标:
    • database/uptime 无掉零;
    • cloudsql.googleapis.com/database/mysql/backup_duration 在次日 02:00 正常出账;
  6. 若需回滚,再次 patch 回原 startTime,同样不会触发重启。
    结论:只要实例是 Regional HA,且变更仅涉及 backup window,不触碰 DB flag、机型、磁盘扩容,就不会触发用户可见的重启。

拓展思考

  1. 如果客户要求**“备份窗口必须跨时区漂移”**(例如跟随夏令时),可封装一个 Cloud Scheduler + Cloud Function,每半年自动算出新 startTime 并调用 patch;函数内部先检查实例 maintenanceVersion 是否落后,若落后则先预约维护窗口升级,再改备份时间,避免两次重启
  2. 国内等保 2.0 要求**“异地备份”**,可同步开启 transactionLogRetentionDays=7pointInTimeRecoveryEnabled=true,但日志保留会额外占用磁盘,需提前评估 SSD 磁盘增长率(经验值:OLTP 每 1000 QPS 约 3~5 GB/日)。
  3. 当实例已开启私有 IP(VPC peering) 且客户使用Cloud SQL Auth Proxy sidecar 模式时,备份窗口变更虽无重启,但代理会每 30 min 重新拉取实例元数据;若元数据返回 404 超过 5 次,proxy 会主动断链。此时需在国内华北/华东双栈出口配置 Private Service Connect 兜底,防止“看似无重启,实则连接闪断”的误报警。