Azure Database for PostgreSQL 灵活服务器中的只读副本

只读副本功能允许将数据从Azure Database for PostgreSQL灵活服务器复制到只读副本。 副本使用 PostgreSQL 引擎的原生物理复制技术进行异步更新。 使用复制槽位的流复制是默认的操作模式。 必要时,使用基于文件的日志传送来进行跟进。 可将主服务器中的数据最多复制到 5 个副本。

副本是由你管理的新服务器,与常规 Azure Database for PostgreSQL 灵活服务器类似。 对于每个只读副本,您需要为预配的计算资源(按 vCore 计)和存储(按每月 GB 计)付费。

了解如何 创建读取副本。

何时使用只读副本

只读副本功能有助于提升读取密集型工作负载的性能和扩展能力。 您可以将读工作负载隔离到副本,同时将写工作负载定向到主副本。 如果需要进行灾难恢复,还可以在其他区域部署只读副本,并将其提升为读写服务器。

一个典型应用场景是让 BI 和分析工作负载将只读副本用作报告的数据源。

由于副本是只读的,因此它们不能直接减少主服务器上的写入容量负担。

注意事项

只读副本主要针对卸载查询有益且可以接受轻微延迟的应用场景设计。 它们经过优化,可为大多数工作负荷提供主要工作负荷的近实时更新,使其成为读取密集型方案的出色解决方案。 但务必注意,它们不适用于需要最新数据准确度的同步复制方案。 虽然副本上的数据最终与主副本保持一致,但可能会存在通常从几秒钟到几分钟不等的延迟,在某些工作负载繁重或延迟较高的方案中,这可能会延长到数小时。 通常,与主副本位于同一区域的只读副本比异地副本的延迟更低,因为后者通常会受到地理距离导致的延迟影响。 有关异地复制对性能造成的影响的更多见解,请参阅异地复制一文。 副本上的数据最终将与主服务器上的数据保持一致。 对于能够适应这种延迟的工作负荷,可以使用此功能。

注释

对于大多数工作负载,只读副本提供来自主服务器的准实时更新。 但是,如果主库持续承受写入密集型重负载,复制延迟可能会持续增大,并且可能始终无法追上主库。 这种情况还可能增加主库的存储占用,因为 WAL 文件只有在被副本接收后才会被删除。 如果这种情况持续存在,请在写入密集型工作负载完成后删除并重新创建只读副本,这样可使副本延迟恢复到正常水平。 异步读副本不适合如此高强度的写入负载。 评估应用程序的只读副本时,请监视整个应用工作负载周期中副本在其高峰和非高峰时间的滞后时间,以评估工作负载周期各个时间点上可能的滞后时间和预期的 RTO/RPO。

创建副本

可以在支持该服务的任何区域中为Azure Database for PostgreSQL灵活服务器部署主服务器。 可以在同一区域或不同Azure区域中创建主服务器的副本,Azure Database for PostgreSQL可用。 创建副本的功能现在扩展到一些特殊的Azure区域。 有关可在其中创建副本的特殊区域的列表,请查看异地复制一文。

开始创建副本工作流时,该流程会创建一个空白的 Azure Database for PostgreSQL 灵活服务器。 新服务器中填充了主服务器上的数据。 为了在同一区域中创建副本,此过程使用快照方法。 因此,创建时间与数据的大小无关。 异地副本是使用主副本的基础备份创建的,然后通过网络传输。 因此,创建时间可能从几分钟到几个小时不等,具体取决于其大小。

仅当满足两个条件时,才会考虑成功创建副本:将主副本的整个备份复制到副本,事务日志同步不超过 1 GB 延迟。

为了成功完成创建操作,请避免在事务负载较高的时段创建副本。 例如,在从其他源迁移到 Azure Database for PostgreSQL 灵活服务器时,或在执行大量批量加载操作期间,应避免创建副本。 如果要迁移数据或加载大量数据,请先完成此任务。 完成后,便可以开始设置副本。 迁移或大容量加载操作完成后,检查事务日志大小是否已恢复到其正常大小。 通常,事务日志大小应接近服务器参数中 max_wal_size 定义的值。 可以使用 事务日志存储已用 指标跟踪事务日志存储占用情况,该指标提供有关事务日志使用的存储量的见解。 通过监视此指标,可以确保事务日志大小在预期范围内,并且副本创建过程可以启动。

重要

目前,常规用途和内存优化服务器计算层级支持只读副本。 不支持可突发服务器计算层。

重要

执行副本创建、删除和升级操作时,主服务器将进入 更新状态。 在此期间,服务器管理操作(如修改参数、更改高可用性选项或添加或删除防火墙)不可用。 更新状态仅影响服务器管理操作,不会影响 数据平面 操作。 此条件意味着数据库服务器保持完全正常运行并能够接受连接,以及处理读取和写入流量。

了解如何创建只读副本。

配置管理

为Azure Database for PostgreSQL灵活服务器设置只读副本时,需要了解可以调整的服务器配置、副本从主服务器继承的配置以及任何相关限制。

继承的配置

创建只读副本时,它会从主服务器继承特定的服务器配置。 可以在副本创建期间或在设置副本后更改这些配置。 但是,读取副本不会从主服务器继承特定设置,例如异地备份。

副本创建期间的配置

  • 层、存储大小:对于 提升到主服务器 操作,层和存储大小必须与主服务器匹配。 对于提升为独立服务器并将其从复制关系中移除操作,层级和存储大小可以与主服务器相同或高于主服务器。
  • 性能层 (IOPS):可调整。
  • 数据加密:可调整,包括从服务管理的密钥移动到客户管理的密钥。

创建后的配置

  • 防火墙规则:可以添加、删除或修改规则。
  • 层、存储大小:对于 提升到主服务器 操作,层和存储大小必须与主服务器匹配。 对于提升为独立服务器并将其从复制关系中移除操作,层级和存储大小可以与主服务器相同或高于主服务器。
  • 性能层 (IOPS):可调整。
  • Authentication 方法:可调整的选项包括从 PostgreSQL 身份验证切换到Microsoft Entra。
  • 参数:大多数参数都是可调整的。 但是,影响共享内存大小的这些参数应与主服务器保持一致,尤其是在可能提升为主服务器的情况下。 若要 提升到独立服务器并从复制操作中删除 ,这些参数应匹配或超过主服务器上的参数。
  • 维护计划:可调整。

只读副本不支持的功能

主服务器支持某些无法在只读副本上配置的功能。 这些功能包括:

  • 备份,包括异地备份。
  • 高可用性(HA)。

如果源 Azure Database for PostgreSQL 灵活服务器实例使用客户管理的密钥进行加密,请参阅文档,了解其他注意事项。

创建级联只读副本

级联只读副本有助于分发读取工作负载,从而减少主服务器上的负载。 在不同区域(跨区域读取副本)中部署读取副本有助于使读取流量更接近分布在不同地理位置的用户。 可以将级联只读副本添加到 Azure Database for PostgreSQL 服务器。 此功能允许基于现有只读副本创建新的只读副本,并由现有只读副本作为下一层级的源。

第一级只读副本从主服务器异步复制数据。 然后,可以使用第一级副本作为其源创建第二级只读副本,形成两层复制层次结构。 此体系结构可提高可伸缩性,支持主服务器最多支持 30 个只读副本服务器,最多允许 5 个只读副本,每个副本支持其他 5 个副本。 若要将级联只读副本添加到Azure Database for PostgreSQL灵活服务器,请选择现有只读副本(从主服务器创建),转到“复制”选项卡,然后选择“创建副本”。

例如,主服务器最多可以有五个只读副本(级别 1)。 其中一个,例如 read-replica-1,充当另一个副本的源,该副本 read-replica-2 成为(级别 2)的一部分。

重要注意事项

  • 每个源只读副本最多可以创建五个只读副本,支持两个级别的复制。
  • 切换操作支持中间只读副本(源)和级联只读副本。
  • 提升为主操作不支持具有级联只读副本的中间只读副本。
  • 级联副本不支持使用虚拟终结点。
  • PostgreSQL 版本 14 及更高版本的中间副本支持级联只读副本。

连接到副本

创建副本时,它不会继承主服务器的防火墙规则或虚拟网络服务终结点。 可以在创建副本期间设置这些规则,稍后对其进行更改。

副本从主服务器继承管理员帐户。 主服务器上的所有用户帐户将复制到只读副本。 只能使用主服务器上可用的用户帐户连接到只读副本。

可以使用两种方法连接到副本:

  • 直接连接到副本:可以使用副本的主机名和有效的用户帐户连接到副本,就像在常规Azure Database for PostgreSQL灵活服务器上一样。 对于名称为 myreplica、管理员用户名为 myadmin 的服务器,可以使用 psql 连接到副本:
psql -h myreplica.postgres.database.chinacloudapi.cn -U myadmin postgres

在提示符下,输入用户帐户的密码。

为了简化连接过程,Azure门户提供了随时可用的连接字符串。 可以在 “连接” 页中找到这些连接字符串。 它们包括 libpq 为 bash 控制台定制的变量和连接字符串。

  • 通过虚拟终结点:备用连接方法使用虚拟终结点。 有关详细信息,请参阅 虚拟终结点。 通过使用虚拟终结点,可以将只读终结点配置为始终指向副本,而不管哪个服务器当前持有副本角色。

监视复制

Azure Database for PostgreSQL 中的只读副本功能依赖复制槽机制。 复制槽位的主要优势在于,它们可以自动调整所有副本服务器所需的事务日志(WAL 段)的数量。 此调整有助于防止副本不同步,因为它避免在副本接收它们之前删除主副本上的 WAL 段。 这种方法的缺点是,如果复制槽长时间处于非活动状态,主库可能会出现空间耗尽的风险。 在这种情况下,主库会累积 WAL 文件,从而导致存储使用量逐步增加。 当存储使用率达到 95% 或可用容量小于 5 GiB 时,服务器会自动切换到只读模式,以避免与磁盘完全相关的错误。
因此,监视复制滞后和复制槽状态对于只读副本至关重要。

为已用存储或存储百分比以及复制滞后时间设置警报规则(如果超出特定阈值,以便可以主动采取行动、增加存储大小和删除滞后的只读副本)。 例如,可设置当存储使用百分比超过 80%,或者副本延迟超过 5 分钟时发出警报。 事务日志存储已用指标显示 WAL 文件累积是否是过度存储使用的主要原因。

监视指标

Azure Database for PostgreSQL服务提供用于监视复制的以下指标。

可以使用增强指标来监视和提醒读取复制。

启用增强指标

  • 默认情况下,大多数新指标处于“已禁用”状态。 不过,默认情况下会启用一些例外情况。 下表中最右侧的列指示默认情况下是否启用每个指标。
  • 若要启用默认情况下未启用的那些指标,请将参数 metrics.collector_database_activity 设置为 ON。 此参数是动态的,不需要重启实例。
逻辑复制
显示名称 指标 ID 单位 Description 尺寸 默认启用
最大逻辑复制延迟 logical_replication_delay_in_bytes 字节 所有逻辑复制槽的最大滞后时间。 不适用 是的
重复
显示名称 指标 ID 单位 Description 尺寸 默认启用
最大物理复制延迟 physical_replication_delay_in_bytes 字节 所有异步物理复制槽的最大滞后时间。 不适用 是的
读取副本延迟 physical_replication_delay_in_seconds 秒 只读副本滞后时间(秒)。 不适用 是的

要了解详细信息,请参阅只读副本操作说明文章。

物理复制最大滞后时间指标显示主服务器与滞后时间最长的副本之间的滞后时间(以字节为单位)。 此指标仅适用于主服务器,且仅在主服务器上可用;并且只有在至少一个只读副本连接到主服务器时,该指标才可用。 当副本正在与主服务器同步时、在副本创建期间或当复制变为非活动状态时,也会显示滞后信息。

“只读副本滞后时间”指标显示的是自上次重放事务以来所经历的时间。 例如,如果主服务器上没有事务发生,并且最后一笔事务是在 5 秒前完成回放的,则“只读副本延迟”会显示为 5 秒。 此指标仅在副本上适用且可用。

请设置警报,以便在副本滞后时间达到工作负载不可接受的值时收到通知。

若要获取更多见解,请直接查询主服务器,以获取所有副本上的复制滞后时间。

注释

如果主服务器或只读副本重启,“副本滞后时间”指标中会反映重启以及跟上进度所花费的时间。

复制状态

若要监视复制和升级操作的进度和状态,请参阅Azure门户中的 Replication 状态列。 此列位于复制页面中,并且会显示各种状态,让你可以深入了解只读副本的当前状态及其与主服务器的连接情况。 对于依赖 Azure 资源管理器 API 的用户,在调用 GetReplica API 时,状态在 replica 属性包中显示为 ReplicationState。

可能的值有:

复制状态 说明 促进秩序 只读副本创建顺序
正在重新配置 正在等待副本与主服务器开始建立连接。 如果副本或其所在区域不可用(例如由于灾难),此状态可能会持续更长时间。 1 N/A
预配 只读副本正在创建中,两台服务器之间的复制尚未开始。 在预配完成之前,无法连接到只读副本。 N/A 1
正在更新 在触发诸如提升或创建只读副本等操作后,正在准备服务器配置。 2 2
同步 正在副本上应用 WAL 文件。 在提升期间,此阶段的持续时间取决于所选的数据同步选项 - 计划或者强制。 3 3
活动 正常状态,指示只读副本已成功连接到主副本。 如果服务器已停止但之前已成功连接,则状态将保持为活动。 4 4
中断 不正常状态,表示提升操作可能失败,或者副本由于某种原因无法连接到主服务器。 若要解决此状态,请删除副本并重新创建副本。 N/A N/A

了解如何监视复制。

注意事项

本部分汇总了有关读取副本功能的注意事项。 以下注意事项适用。

  • 电源操作:可以将电源操作(包括 启动 和 停止 操作)应用于主服务器和副本服务器。 但是,若要保持系统完整性,请遵循特定的顺序。 在停止只读副本之前,请务必先停止主服务器。 开始操作时,在启动主服务器之前,请在副本服务器上开始启动操作。
  • 如果服务器具有只读副本,请先删除只读副本,然后再删除主服务器。
  • Azure Database for PostgreSQL 灵活服务器的原地执行主版本升级要求移除该服务器上已启用的任何只读副本。 删除副本后,可以将主服务器升级到所需的主版本。 升级完成后,可以重新创建副本以恢复复制过程。
    • 重置管理员密码:当前不支持重置副本服务器上的管理员密码。 此外,不支持在同一请求中更新管理员密码以及 提升 副本操作。 如果要执行这些操作,请先升级副本服务器,然后单独更新新升级服务器上的密码。

新复制品

您可以将只读副本创建为一个新的 Azure Database for PostgreSQL 灵活服务器。 不能将现有服务器设为副本。

资源移动

可以在与主实例不同的资源组中创建只读副本。 但是,不支持在创建只读副本后将其移动到另一个资源组。 此外,不支持将副本移动到另一个订阅中。 不支持将具有只读副本的主实例移动到其他资源组或订阅。

存储自动增长

为Azure Database for PostgreSQL灵活服务器配置只读副本时,请确保副本上的存储自动增长设置与主服务器的存储自动增长设置匹配。 存储自动增长功能允许数据库存储自动增加,以防止空间不足导致数据库服务中断。 下面介绍如何有效管理存储自动增长设置:

  • 无论主服务器的设置如何,都可以在任何副本上启用存储自动增长。
  • 如果在主服务器上启用了存储自动增长,则还必须在副本服务器上启用它,以确保存储扩展行为的一致性。
  • 要在主服务器上启用存储自动增长,必须先在副本上启用它。 这种操作顺序对于维护复制完整性至关重要。
  • 相反,如果你希望禁用存储自动增长,请首先在主服务器上禁用它,然后再在副本上禁用它,以避免复制复杂化。

备份和还原

为Azure Database for PostgreSQL灵活服务器管理备份和还原时,请记住服务器在不同升级方案中的当前和以前的角色。 请记住以下要点:

提升到主服务器

  • 没有来自只读副本的备份:无论其过去的角色如何,系统都不会从只读副本服务器获取备份。
  • 保留过去的备份:如果服务器曾经是主服务器,并且系统在该时间段内进行了备份,则会将这些备份保留到用户定义的保留期。
  • 还原操作限制:即使服务器存在过去备份(转换为只读副本),还原操作也会受到限制。 仅当服务器升级回主角色时,才能启动还原操作。

为了清楚起见,下表说明了以下几点:

服务器角色 已创建备份 允许还原
主要 是的 是的
只读副本 否 否
提升为只读副本的主服务器 是的 是的

提升为独立服务器并从复制中移除

当服务器是只读副本时,系统不会进行备份。 但是,将它提升到独立服务器后,系统会为升级的服务器和主服务器创建备份。 可以在两台服务器上还原备份。

网络

只读副本支持 Azure Database for PostgreSQL 灵活服务器提供的所有网络选项。

重要

主服务器和只读副本之间的双向通信对于Azure Database for PostgreSQL设置至关重要。 Azure虚拟网络子网必须允许在目标端口 5432 上发送和接收流量。

此要求不仅有助于同步过程,而且还可确保提升机制正常运行。 副本可能需要按相反的顺序进行通信——即从副本到主副本——尤其是在提升为主副本的操作过程中。 此外,必须允许连接到存储 Write-Ahead 日志记录(WAL)存档的Azure存储帐户,以维护数据持久性并启用高效的恢复过程。

有关如何为只读副本配置专用访问(虚拟网络集成),并了解在专用网络上下文中跨Azure区域和虚拟网络进行复制的影响的详细信息,请参阅使用专用网络跨Azure区域和虚拟网络的复制。

复制槽问题的缓解措施

在极少数情况下,由于 WAL 文件累积,复制槽引起的高延迟可能会导致主服务器上的存储使用量增加。 如果存储使用率达到 95% 或可用容量低于 5 GiB,则服务器会自动切换到只读模式,以防止出现磁盘已满错误。

维护主服务器的运行状况和功能是一个优先事项。 在此类边缘情况下,服务器可能会删除复制槽,以确保主服务器仍可继续处理读写流量。 因此,复制将切换到基于文件的日志传送模式,这可能会导致更高的复制延迟。

密切监控存储使用情况和复制延迟,并在潜在问题升级之前采取必要措施加以缓解。

Parameters

创建只读副本时,它会从主服务器继承参数。 此继承可确保一致且可靠的起点。 但是,在创建只读副本后,您对主服务器上的参数设置所做的任何更改都不会自动同步到只读副本。 此行为提供对只读副本进行单独优化的优势,例如在不修改主服务器参数的情况下,增强其读取密集型操作的性能。 虽然此行为提供了灵活性和自定义选项,但当需要参数的统一性时,它还需要谨慎和手动管理,以保持主副本与其副本之间的一致性。

管理员可以更改只读副本服务器上的参数,并将其设置为与主服务器上不同的值。 唯一的例外是可能影响副本恢复的参数,以下“缩放”部分也提到了这些参数:max_connections、max_prepared_transactions、max_locks_per_transaction、max_wal_senders、max_worker_processes。 为了确保只读副本的恢复过程顺利,并避免遇到共享内存限制,请始终将这些特定参数设置为与主服务器上配置的值相同或 大于这些值。 在降低只读副本服务器上的参数值之前,请确保复制滞后时间最小或副本与主服务器完全接通,以避免潜在的复制或恢复问题。

Scale

可以纵向扩展和缩减计算(vCore),将服务层级从“常规用途”更改为“内存优化”(反之亦然),并纵向扩展存储。 但是,以下注意事项适用。

对于计算缩放:

  • Azure Database for PostgreSQL服务要求副本上的多个参数大于或等于主副本的设置以确保副本在恢复期间不会耗尽共享内存。 受影响的参数包括:max_connections、、max_prepared_transactionsmax_locks_per_transaction、max_wal_sendersmax_worker_processes。

  • 扩容:先扩容副本的计算资源,然后扩容主节点。

  • 纵向缩减:先纵向缩减主服务器的计算,然后纵向缩减副本。

  • 主副本上的计算必须始终等于或小于最小副本上的计算。

对于存储缩放:

  • 纵向扩展:先扩展副本的存储容量,然后扩展主节点。

  • 主副本上的存储大小必须始终等于或小于最小副本上的存储大小。