对于运行网站、内容管理系统、交易平台和企业应用的数据库来说,数据库实例发生故障,影响的往往不只是几个页面无法打开,而是整个业务链条可能被迫暂停。Google Cloud提供的Cloud SQL高可用功能,可以通过同一区域内不同可用区之间的冗余部署,降低单个实例或可用区故障造成的停机风险。但需要明确,高可用、只读副本和跨区域灾难恢复并不是同一回事。只有理解它们各自解决的问题,才能设计出真正可执行的数据库恢复方案。
Cloud SQL的高可用实例通常被称为区域实例(Regional Instance)。在这种架构中,主实例与备用实例分布在同一个Google Cloud区域的不同可用区。主实例负责处理数据库请求,备用实例并不是供应用程序读取数据的普通只读副本,而是用于故障切换的备用计算实例。Cloud SQL会将写入数据同步到两个可用区的区域持久化磁盘,只有相关数据完成冗余写入后,事务才会被报告为提交成功。因此,区域内的高可用机制与普通的异步只读复制存在本质区别。
当主实例或所在可用区发生符合条件的故障时,Cloud SQL会自动执行故障转移,让备用实例接替主实例提供服务。应用程序通常继续使用同一个数据库连接地址或实例网络标识,不需要像传统自建主从架构那样,手动修改数据库IP地址。故障转移期间数据库可能暂时无法访问,官方文档指出,常见情况下停机时间大约为一分钟,但实际时长会受到实例状态、连接池、应用程序重连机制以及具体故障类型影响。因此,“自动故障转移”并不等于业务完全无感。
配置高可用时,首先应在创建Cloud SQL实例时选择区域级高可用选项,并指定主区域和备用可用区。对于已经运行的实例,也可以通过Cloud SQL控制台或Google Cloud命令行工具启用高可用功能。具体选项会受到数据库引擎、实例版本、区域和机器配置等条件影响,部署前应确认当前使用的是MySQL、PostgreSQL还是SQL Server,并依据对应引擎的官方配置要求执行操作。
以Google Cloud命令行工具为例,创建支持高可用的Cloud SQL实例时,可以使用类似以下的配置方式:
gcloud sql instances create my-sql-instance \
--database-version=MYSQL_8_0 \
--cpu=4 \
--memory=16GiB \
--region=northamerica-northeast1 \
--availability-type=REGIONAL \
--storage-type=SSD \
--storage-size=100
其中,--availability-type=REGIONAL表示创建区域级高可用实例。示例中的数据库版本、区域、CPU、内存和存储容量仅用于说明配置结构,实际参数必须根据业务规模、当前可用版本和所在区域的资源情况调整。对于已有实例,启用高可用功能可能涉及数据复制、资源变更和一定的维护影响,不应在生产高峰期直接执行。
高可用配置还应配合自动备份和时间点恢复(Point-in-Time Recovery,PITR)。高可用主要解决的是实例或可用区发生故障后如何快速恢复服务,而备份与时间点恢复主要解决的是数据被误删、错误更新、应用程序写坏数据或数据库遭到破坏后如何恢复到某个时间点。两者的目标不同,不能因为已经启用高可用,就认为数据库不再需要备份。对于高可用实例,Google Cloud要求启用自动备份和时间点恢复,具体保留期限则应按照业务恢复目标、合规要求和成本预算进行设置。
需要特别区分“可用区故障”和“区域故障”。如果只是某个可用区或单个实例出现问题,区域级高可用通常可以自动将服务切换到另一个可用区的备用实例。但如果整个Google Cloud区域发生严重中断,主实例和备用实例可能同时受到影响。区域级高可用并不能自动把数据库搬到另一个区域,因此不能单凭REGIONAL配置就宣称系统具备跨区域灾难恢复能力。
如果业务必须应对整个区域不可用的情况,就需要额外配置跨区域只读副本(Cross-Region Read Replica)。这类副本位于另一个Google Cloud区域,通过异步复制从主实例获取数据。它可以在主区域发生重大故障时,被人工提升为新的主实例,从而恢复数据库写入能力。与同区域高可用不同,跨区域只读副本并不会因为主实例发生故障,就自动接管成为新的主实例。通常需要运维人员确认灾难情况、评估复制延迟,并主动执行提升副本的操作。
跨区域复制采用异步机制,因此副本可能落后于主实例。当主区域突然失效时,尚未复制到备用区域的最近一部分事务可能无法出现在新主实例中。这涉及恢复点目标(Recovery Point Objective,RPO):如果业务要求区域故障后完全不丢失已经提交的数据,就不能简单地把普通跨区域只读副本视为零数据丢失方案。企业需要根据业务的重要程度,评估复制延迟、备份策略、应用级日志和其他数据保护机制。
一个较完整的Cloud SQL架构,可以采用“区域级高可用加跨区域灾难恢复”的组合方式。主区域内设置主实例和备用实例,用于应对硬件、实例和可用区故障;另一个区域设置跨区域只读副本,用于应对主区域整体中断。应用程序的读写连接应明确区分:写入请求通常发送到当前主实例,读取请求可以根据一致性要求发送到主实例或只读副本。不能把所有读取请求无条件发送到异步副本,因为复制延迟可能导致用户读到旧数据。
故障发生后,恢复流程应当根据故障范围执行,而不是所有问题都采用同一种处理方式。如果是区域级高可用实例的普通实例故障,Cloud SQL可能自动执行故障转移。运维人员需要通过Cloud SQL控制台、Cloud Monitoring、操作日志和数据库日志确认故障转移是否完成,并检查应用程序连接池是否成功重连。某些资源耗尽问题,例如内存不足,Cloud SQL可能执行实例重启,而不是切换到备用实例。因此,看到数据库短暂中断时,不能直接认定已经发生了高可用故障转移。
应用程序本身也必须具备恢复能力。PHP、Java、Node.js或其他应用使用的数据库连接,可能在故障转移期间失效。连接池应当能够丢弃失效连接并重新建立连接;应用程序需要设置合理的连接超时、重试次数和退避间隔。对于写入请求,重试不能简单地无限执行,因为数据库操作可能已经提交成功,只是应用程序没有及时收到响应。如果再次执行,可能造成重复扣款、重复创建订单或重复写入。关键业务应结合幂等键、唯一约束、事务和业务状态机处理重试风险。
如果主区域整体不可用,运维团队需要先确认这是否属于必须执行灾难切换的情况。随后,可以将跨区域只读副本提升为新的主实例,并把应用程序的数据库连接重新指向新的主实例。普通跨区域副本提升通常是有意执行的人工操作,不等同于区域内备用实例的自动故障转移。提升完成后,还需要检查数据库权限、用户账户、扩展、参数配置、应用连接、后台任务和写入功能是否正常,不能只看到数据库能够连接,就宣布整个业务已经恢复。
如果使用的是Cloud SQL Enterprise Plus,并且符合相关功能条件,还可以研究高级灾难恢复机制。高级灾难恢复支持指定跨区域灾难恢复副本,并提供专门的副本故障转移和切换能力。在相应架构下,写入端点可以随着主实例角色变化而更新,从而减少应用程序手动修改连接配置的工作量。不过,高级灾难恢复仍然需要提前设计、配置和演练,不能在区域已经发生故障后才临时建立完整的跨区域恢复体系。
故障恢复之后,还必须处理原主区域重新上线所带来的数据分叉风险。如果旧主实例恢复后仍然可以被应用程序访问,而新主实例已经在另一个区域接受写入,就可能出现“双主”或脑裂风险:一部分请求写入旧数据库,另一部分请求写入新数据库,最终形成两套不一致的数据。Google Cloud的灾难恢复流程强调,在重新启用旧区域之前,必须确保客户端无法继续访问旧主实例,并按照规定重新建立复制关系、恢复高可用架构,必要时再安排人工回切。回切并不是简单地把连接地址改回去,而是一个需要验证数据同步和业务状态的运维过程。
监控体系是高可用方案的重要组成部分。至少应关注CPU利用率、内存使用量、存储空间、数据库连接数、事务延迟、磁盘吞吐量、实例重启、备份状态和只读副本复制延迟。对于跨区域副本,复制延迟直接影响灾难切换时可能丢失的数据范围。对于应用程序,还应监测数据库连接失败率、请求超时、重试次数和接口错误率。Google Cloud Monitoring可以用于设置指标告警,但告警并不等于自动恢复机制,运维团队仍然需要明确谁负责确认故障、谁有权执行灾难切换,以及切换后如何通知业务部门。
故障转移测试也不能被忽略。可以在业务低峰期安排受控的故障转移演练,验证应用程序是否能够重新连接、后台任务是否会重复执行、读写流量是否正确路由,以及监控和告警是否正常工作。对于跨区域灾难恢复,还应定期演练副本提升、连接切换、权限检查、数据验证和恢复后的拓扑重建。只有真正执行过恢复流程,企业才能知道纸面上的RTO和RPO是否能够在现实环境中实现。
成本方面,区域级高可用通常会增加计算、内存和存储相关费用。Google Cloud文档指出,高可用实例的价格通常约为独立实例的两倍,具体费用仍取决于数据库版本、机器类型、存储、备份、网络传输和其他服务项目。跨区域只读副本还可能产生额外的实例运行成本和跨区域网络费用。企业不应盲目追求多区域、多副本,而应先明确业务可以容忍多少分钟的停机、最多可以丢失多少数据,以及恢复后需要多长时间才能恢复完整生产能力。
Cloud SQL高可用的核心,并不是简单地增加一个“备用数据库”,而是把不同故障类型分别纳入设计:同一区域的高可用机制负责应对实例和可用区故障,自动备份与时间点恢复负责应对数据损坏和误操作,跨区域副本负责应对区域级灾难,而应用程序的重连、幂等和切换逻辑则负责把基础设施恢复转化为真正的业务恢复。只有将这些环节组合起来,并通过持续演练验证,数据库发生故障后才能避免临时救火式的混乱,让服务恢复从一项临时操作变成可重复、可审计的工程流程。
Cloud SQL 高可用怎么配置,数据库发生实例故障后如何恢复服务
图片说明:示意图 图片来源:Public Domain(公有领域)
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP