复制功能是指创建 Cloud SQL 实例的副本并将工作分流到副本。
简介
使用复制功能的主要原因是在不降低性能的情况下扩大数据库中的数据使用量。
复制的其他原因包括在区域之间迁移数据。
此外,如果原始实例已损坏,可以将副本提升为独立实例(在这种情况下,现有副本不会认为该实例是主实例)。
在引用 Cloud SQL 实例时,用于复制的实例称为主实例,而副本则称为读取副本。主实例和只读副本都驻留在 Cloud SQL 中。
创建第一个副本时:
- 主实例设置为主实例上所有数据库的完整恢复模型。
系统会创建一个临时磁盘,获取完整备份并将其存储在临时磁盘上。临时磁盘在副本创建过程完成后会被删除。
如果用户在创建第一个副本的时间段内切换到简单恢复模型,副本创建将会失败。
以下内容适用于在创建副本后添加到主实例的数据库:
- 数据库会自动添加到可用性组,并使用自动种子填充在副本中。
- 每个副本创建操作都会调用主实例上数据库的完整(完整恢复模型)备份。系统不会复制在副本创建后创建的登录和服务器对象。
Cloud SQL 支持以下类型的副本:
通过使用连接器强制执行,您可以强制仅使用 Cloud SQL Auth 代理或 Cloud SQL 语言连接器连接到 Cloud SQL 实例。强制使用连接器后,Cloud SQL 会拒绝与数据库的直接连接。您无法为启用了连接器强制执行的实例创建读取副本。同样,如果实例具有读取副本,则您无法为该实例启用连接器强制执行。
Cloud SQL 不支持两个外部服务器之间的复制。
只读副本
您可以使用读取副本从 Cloud SQL 实例中分流工作。读取副本是主实例的精确副本。主实例上的数据和其他更改几乎在读取副本上实时更新。
只读副本是只读副本;您无法将数据写入其中。只读副本会处理查询、读取请求和分析流量,从而减少主实例的负载。 每个主实例最多可以有 8 个只读副本。
您可以使用副本的连接名称和 IP 地址直接连接到副本。如果您要使用专用 IP 地址连接到副本,则无需为副本创建其他 VPC 专用连接,因为连接是从主实例继承的。
如需了解如何创建只读副本,请参阅创建只读副本。如需了解如何管理只读副本,请参阅管理只读副本。
在主实例上使用 HA 时,最好将只读副本放在与主实例不同的可用区中。这种做法可确保只读副本在包含主实例的可用区中断服务时继续运行。如需了解详情,请参阅高可用性概览。
选择适当的机器类型
读取副本的机器类型可以与主实例不同。您应该监控实例上的指标(例如 CPU 和内存用量),以确保副本实例的大小适合其工作负载,特别是在副本实例小于主实例时。容量不足的副本实例更有可能出现性能不佳的情况,例如频繁的内存不足 (OOM) 事件。
跨区域读取副本
您可以利用跨区域复制功能,在与主实例不同的区域中创建只读副本。创建跨区域只读副本的方式与创建区域内副本的方式相同。
对于 SQL Server 读取副本,假设副本与主要副本位于同一虚拟网络中,或者它们使用公共 IP 进行通信。使用跨区域副本具有以下优势:
- 在更接近应用所在区域的位置提供副本,从而提高读取性能。
- 提供更高的灾难恢复能力,可防范区域性故障。
- 可让您将数据从一个区域迁移到另一个区域。
如需详细了解跨区域副本,请参阅提升副本以实现区域性迁移或灾难恢复。
级联读取副本
通过级联复制功能,您可以在相同或不同区域中的一个读取副本下创建另一个读取副本。级联复制是使用分布式可用性组实现的。级联副本的一些应用场景如下:
- 灾难恢复:您可以使用读取副本的级联层次结构来模拟主实例及其读取副本的拓扑。在服务中断期间,您选择的读取副本将提升为主实例,并且新主实例下的读取副本会继续复制并可供使用。旧主实例在可用后会成为新主实例的次要实例,您可以在旧主实例恢复后使用切换操作切换回旧主实例。如需详细了解如何使用级联副本进行灾难恢复,请参阅灾难恢复简介。
- 性能提高:通过将复制工作分流到多个读取副本来减轻主实例的负担。
- 扩缩读取:您可以有更多副本来分担读取负载。
- 费用降低:通过在其他区域中将单个级联副本与跨区域复制结合使用,您可以减少网络费用。
术语
- 可级联副本:一种跨区域读取副本,可用于在使用 Cloud SQL for SQL Server 的高级灾难恢复 (DR) 中执行切换和副本故障切换操作。
- 级联副本:自身可以具有副本的读取副本。
- 级层:您可以在级联副本层次结构中创建多个级层的副本。例如,如果您向一个实例添加 4 个副本,则这 4 个副本处于同一级层。
- 同级实例:从同一主实例复制的多个副本。同级对象在副本层次结构中处于同一级层。一个副本最多支持 8 个同级对象。
- 叶副本:自身没有任何副本的读取副本。 在多级复制层次结构中,叶副本处于最后一个级层。
- 提升:用于将处于层次结构中任意级层的副本转换为主实例的操作。提升后,副本的级联副本层次结构会保留。
配置级联副本
级联副本让您可以将读取副本添加到任何现有副本。您最多可以添加 4 个级层的副本,包括主实例。将副本提升到级联副本层次结构的顶层后,它将成为主实例,并且其级联副本会继续复制。
如需详细了解如何配置分布式可用性组,请参阅配置始终开启分布式可用性组。
限制
- 您无法删除其下包含副本的副本。如需删除副本,您必须从叶副本开始,然后向上通过层次结构。
- 系统不支持循环区域依赖。如需将级联副本的副本存放在与主实例相同的区域,该级联副本自身也必须位于同一区域。
- 您必须在与主实例所在区域不同的区域中创建可级联副本。然后,您可以在与可级联副本相同的区域中创建级联副本。
复制功能的使用场景
以下使用场景适用于每种复制类型。
名称 | 主实例 | 副本 | 优势和用例 | 更多信息 |
---|---|---|---|---|
读取副本 | Cloud SQL 实例 | Cloud SQL 实例 |
|
|
跨区域读取副本 | Cloud SQL 实例 | Cloud SQL 实例 |
|
|
SQL Server 复制 | Cloud SQL 外部的实例 | Cloud SQL for SQL Server 实例 |
|
结算
- 读取副本按与标准 Cloud SQL 实例相同的费率计费。系统不会对数据复制操作收费。
- 跨区域读取副本的价格与在同一区域中创建新 Cloud SQL 实例时的价格相同。请参阅 Cloud SQL 实例价格并选择相应的区域。除了与实例关联的常规费用之外,跨区域副本还会因从主实例发送到副本实例的复制日志而产生跨区域数据传输费用,如网络出站流量价格中所述。
Cloud SQL 读取副本的快速参考信息
主题 | 讨论 |
---|---|
备份 | 您不能为副本配置备份。 |
核心和内存 | 读取副本使用的核心数和内存量可能与主实例不同。 |
删除主实例 | 您必须先将主实例的所有读取副本提升为独立实例或删除它们,然后才能删除主实例。 |
删除副本 | 删除副本对主实例的状态没有影响。 |
删除复制的数据库 | 您可以使用 Google Cloud 控制台或 gcloud 命令删除复制的 SQL Server 数据库,删除操作会自动传播到副本。您无法使用 T-SQL 命令删除复制的 SQL Server 数据库。 |
故障切换 | 仅当副本是灾难恢复副本时,主实例才能故障切换到副本。在服务中断期间,读取副本无法以任何方式进行故障切换。 |
负载均衡 | Cloud SQL 不会在各副本之间提供负载均衡。 |
维护期 | 读取副本与主实例共享维护窗口。副本遵循主实例的维护设置,包括维护窗口、重新安排和拒绝维护期。在维护期间,Cloud SQL 会先更新所有读取副本,然后再更新主实例。 |
多个读取副本 | 您最多可以为一个主实例创建 8 个只读副本。 |
专用 IP | 如果您要使用专用 IP 地址连接到副本,则无需为副本创建其他 VPC 专用连接,因为它是从主实例继承的。 |
恢复主实例 | 当副本存在时,您无法恢复副本的主实例。在通过备份来恢复实例或对实例执行时间点恢复之前,您必须先提升或删除实例的所有副本。 |
设置 | 主实例的设置会传播到副本,包括对可以访问该实例的用户的数据所做的更改。 |
停止副本 | 您不能对副本执行 stop 操作。您可以对它执行 restart 或 delete 操作,但不能像停止主实例那样对其执行停止操作。 |
升级副本 | 读取副本随时可能出现升级中断。 |
用户表 | 您不能对副本进行更改。所有用户更改都必须在主实例上完成。 |
限制
此功能仅适用于以下版本的 Cloud SQL for SQL Server:
- SQL Server 2017 Enterprise
- SQL Server 2019 Enterprise
- SQL Server 2022 Enterprise
登录不会传播到副本。
您必须使用 T-SQL 和/或 SQL Server Management Studio 监控副本。
在删除数据库之前,您必须关闭数据库连接。
创建副本时,主实例不能包含单用户模式下的数据库。否则,副本创建将失败。
后续步骤
- 了解如何创建只读副本。
- 了解如何配置实例以实现高可用性。