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

提升是指命令副本结束其副本模式并转换到完全读写操作的过程。

重要

升级操作不是自动的。 如果主服务器上发生故障,系统不会独立切换到只读副本。 提升操作始终需要用户操作。

您可以通过两种不同的方式提升副本:

提升到主服务器

此操作将副本提升为主服务器的角色。 在此过程中,当前主服务器将降级为副本角色,两者的角色将会交换。 若要成功完成提升,您需要为当前主节点配置一个虚拟终结点作为写入器终结点,并为计划提升的副本配置一个虚拟终结点作为读取器终结点。 仅当目标副本包含在读取方终结点配置中时,提升才会成功。 在源服务器上具有 Microsoft.DBforPostgreSQL/servers/write 权限的用户可以执行切换操作。

如果主服务器具有任何损坏的副本,请先删除这些副本,然后再启动提升到主服务器操作。 在这一过程中,只读副本被提升为新的主服务器。 此操作可能会导致大约 1-3 分钟的短暂停机时间,具体取决于升级时的复制延迟(对于计划的升级)。 升级完成后,将重新配置以前的主服务器以作为只读副本运行。

下图显示了升级前的服务器配置,以及升级操作成功完成后生成的状态。

显示“提升为主服务器”操作的示意图。

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

选择此选项时,副本将提升成为独立服务器并从复制过程中移除。 因此,主服务器和提升后的服务器都将充当两个独立的读写服务器。 虽然可以配置虚拟终结点,但它们不需要执行此操作。 新提升的服务器不再是任何现有虚拟终结点的一部分,即使读取器终结点之前指向它。 如果应用程序应连接到新提升的副本,请更新应用程序的连接字符串以指向该副本。

下图显示了这些服务器在被提升之前的设置方式,以及在成功成为独立服务器之后的配置。

显示“提升为独立服务器并从复制中删除”操作的示意图。

重要

“提升为独立服务器并从复制中删除”操作与以前的提升功能后向兼容

重要

Server Symmetry:要通过“提升为主服务器”操作成功完成提升,主服务器和副本服务器必须具有相同的级别和存储大小。 例如,如果主副本有 2 个 vCore,而副本有 4 个 vCore,则唯一可行的选项是使用“提升为独立服务器并将其移出复制”操作。 此外,他们需要为 分配共享内存的参数共享相同的值。

对于这两种升级方法,请考虑以下选项:

  • 计划:此选项可确保在提升之前同步数据。 它在接受客户端连接之前应用所有待处理的日志以确保数据一致性。

  • 强制:此选项可以在发生区域服务中断等情况时实现快速恢复。 一旦服务器处理了实现最接近的一致状态所需的 WAL 文件,服务器就可以开始运行,而无需等待同步主服务器中的所有数据。 如果使用此选项提升副本,则在将副本与主副本解除链接时的延迟表明会丢失多少数据。

重要

“强制”提升选项用于解决区域性中断问题,在这种情况下,它会跳过所有检查(包括服务器对称要求)并继续提升。 此优先级是处理灾难方案的即时服务器可用性。 但是,如果未满足文档中规定的只读副本要求,尤其是服务器对称性要求,则不允许在区域故障场景之外使用“强制”选项,因为这可能会导致复制中断等问题。

了解如何 将只读副本切换到主服务器提升为独立服务器并从复制关系中移除

配置管理

控制平面将只读副本视为单独的服务器,因此可以独立管理配置。 此方法为读取扩展方案提供了灵活性。 但是,使用副本进行灾难恢复时,必须确保配置是所需的。

提升操作不会继承特定的配置和参数。 下面是一些值得注意的事项:

  • PgBouncer:在提升过程中不会复制内置 PgBouncer 连接池的设置和状态。 如果您在主节点上启用了 PgBouncer,但未在副本上启用,那么在提升后,PgBouncer 在该副本上仍将保持禁用状态。 若要在新升级的服务器上使用 PgBouncer,必须在升级操作之前或之后启用它。
  • 异地备份存储:异地备份设置不会被传输。 由于副本无法启用异地备份,因此提升后的主服务器(以前为副本)将不会启用异地备份。 只能在创建标准服务器(而不是副本)时激活该功能。
  • 参数:如果主实例和只读副本上的参数值不同,则在提升过程中这些值不会发生更改。 影响共享内存大小的参数在主副本和副本上必须具有相同的值。 “ 参数 ”部分详细介绍了此要求。
  • Microsoft Entra身份验证:如果主要副本已配置Microsoft Entra身份验证,但副本使用 PostgreSQL 身份验证,则升级不会自动将副本切换到Microsoft Entra身份验证。 副本保留 PostgreSQL 身份验证。 您需要在提升过程之前或之后,手动在已提升的副本上配置 Microsoft Entra 身份验证。
  • 高可用性(HA):如果在提升后需要 HA,则必须在角色反转后,于新提升的主服务器上进行配置。

注意事项

提升期间的服务器状态

在计划的和强制升级方案中,服务器(主要和副本)都必须处于 就绪 状态。 如果服务器的状态不是就绪(例如正在更新正在重启),则提升操作通常无法顺利进行。 但是,在区域性中断情况下有一个例外。

在此类区域中断期间,无论主服务器的当前状态如何,都可以实现强制升级方法。 此方法允许快速采取措施应对潜在的区域性灾难,从而绕过对服务器可用性的正常检查。

如果以前的主服务器在其副本提升期间发生故障而无法恢复,则唯一的选择是删除以前的主服务器并重新创建副本服务器。

在非配对区域中提升期间的多个副本可见性

处理多个副本时,如果主要区域缺少 配对区域,则需要特别考虑。 如果区域性中断影响主要副本,新升级的副本不会自动识别任何其他副本。 尽管您仍可将应用程序定向到已提升的副本以继续运行,但未被识别的副本在中断期间仍会保持断开连接。 只有在原始主区域恢复后,这些额外副本才会重新建立关联并恢复其角色。

升级期间的时间点还原

在计划内和强制升级方案中,必须提供最新的自动备份,以确保时间点还原(PITR)操作成功。 存在以下已知问题:在故障转移和故障回复操作之后,PITR 操作可能会遇到以下错误。 我们计划在即将发布的版本中解决该问题。 若要确保 PITR 操作能够成功执行到最新时间点,请在提升操作后等待自动备份完成。

Error : Point-in-time-restore of server to the period when the siteswap operation for this server was in-progress or when the server was replica is not allowed.

常见问题

  • 如果我的主服务器启用了高可用性 (HA),我可以提升副本吗?

    是,无论主服务器是否启用了 HA,都可以提升其只读副本。 将只读副本提升为主服务器的功能与主服务器的 HA 配置无关。

  • 如果我有一个启用了 HA 的主实例和一个只读副本,并且我将该副本提升为主实例,然后再切换回原来的主实例,那么该服务器是否仍处于 HA 状态?

    否,升级过程禁用 HA,因为Azure Database for PostgreSQL不支持启用 HA 的只读副本。 将只读副本提升为主实例意味着原来的主实例会变为副本实例。 如果要切换回来,则需要在原始主服务器上启用 HA。