通过 Azure 门户、CLI 或 REST API 在 Azure Database for PostgreSQL 灵活服务器中创建和管理只读副本
适用于:Azure Database for PostgreSQL - 灵活服务器
本文介绍如何通过 Azure 门户、CLI 和 REST API 在 Azure Database for PostgreSQL 灵活服务器中创建和管理只读副本。 若要详细了解只读副本,请参阅概述。
先决条件
作为主服务器的 Azure Database for PostgreSQL 灵活服务器实例。
注意
在为持久性大量写入密集型主工作负载部署只读副本时,复制滞后时间可能会持续增加,并且可能永远无法赶上主工作负载。 这还可能增加主工作负载的存储使用量,因为只有在副本收到 WAL 文件后才会将该文件删除。
查看主服务器设置
在为 Azure Database for PostgreSQL 灵活服务器设置只读副本之前,请确保将主服务器配置为满足必要的先决条件。 主服务器上的特定设置可能会影响创建副本的能力。
存储自动增长:主服务器及其只读副本上的存储自动增长设置必须遵守特定准则,以确保一致性并防止复制中断。 有关详细规则和设置,请参阅存储自动增长。
在 Azure 门户中,选择要用于副本的 Azure Database for PostgreSQL 灵活服务器实例。
在“概述”对话框中,记下 PostgreSQL 版本(例如
15.4
)。 此外,请注意主服务器部署到的区域。在服务器边栏的“设置”下,选择“计算 + 存储”。
查看并记下以下设置:
计算层、处理器、大小(例如
Standard_D4ds_v4
)。存储
- 存储大小(例如
128GB
) - 自动增长
- 存储大小(例如
高可用性
- 已弃用/已禁用
- 可用性区域设置
备份设置
- 保留期
- 冗余选项
在“设置”下选择“网络” 。
查看网络设置。
创建只读副本
若要创建只读副本,请遵循以下步骤:
选择要用作主服务器的现有 Azure Database for PostgreSQL 灵活服务器实例。
在服务器边栏中的“设置”下,选择“复制”。
选择“创建副本”。
在“基本信息”窗体中输入以下信息。
选择“审阅 + 创建”以确认创建该副本,或者如果要添加、删除或修改任何防火墙规则,请选择“下一步: 网络”。
将其余字段保留默认值,然后选择页面底部的“查看 + 创建”按钮,或者转到下一个窗体以添加标记或更改数据加密方法。
查看最终确认窗口中的信息。 准备就绪后,选择“创建”。 将创建新部署。
在部署期间,你将看到主服务器处于
Updating
状态。
设置副本服务器名称。
提示
使用资源命名约定是云采用框架 (CAF) 的最佳做法,它会支持你轻松确定要连接到或管理的实例,以及实例的驻留位置。
选择与主服务器不同的位置,但请注意,可以选择同一区域。
提示
若要详细了解可以在哪些区域中创建副本,请访问只读副本概念文章。
将计算和存储设置为从主服务器记录的内容。 如果显示的计算不匹配,请选择“配置服务器”并选择相应的一个。
注意
如果选择的计算大小小于主服务器,则部署将失败。 另请注意,计算大小可能在其他区域中不可用。
重要
为了避免在提升副本期间出现问题,请先更改副本上的以下服务器参数,然后再在主服务器上应用它们:max_connections
、max_prepared_transactions
、max_locks_per_transaction
、max_wal_senders
、max_worker_processes
。
创建虚拟终结点
注意
涉及虚拟终结点的所有操作,例如添加、编辑和删除,都在主服务器的上下文中执行。
在 Azure 门户中,选择主服务器。
在服务器边栏中的“设置”下,选择“复制”。
选择“创建终结点”。
在对话框中,为终结点键入有意义的名称。 请注意正在生成的 DNS 终结点。
选择“创建”。
注意
如果未创建虚拟终结点,则会在进行升级副本尝试时收到错误。
列出虚拟终结点
若要列出虚拟终结点,请执行以下步骤:
修改应用程序以指向虚拟终结点
修改使用 Azure Database for PostgreSQL 灵活服务器实例的所有应用程序,以使用新的虚拟终结点(例如:corp-pg-001.writer.postgres.database.chinacloudapi.cn
和 corp-pg-001.reader.postgres.database.chinacloudapi.cn
)。
提升副本
所有必要的组件到后,即可执行将副本提升为主服务器的操作。
若要从 Azure 门户提升副本,请执行以下步骤:
在 Azure 门户中,选择主要 Azure Database for PostgreSQL 灵活服务器实例。
在服务器菜单中的“设置”下,选择“复制”。
在“服务器”下,选择副本的“提升”图标。
在对话框中,确保操作为“提升到主服务器”。
对于数据同步,请确保已选择“计划内 - 提升前同步数据”。
选择“提升”以开始该过程。 完成后,角色会反转:副本变为主服务器,主服务器承担副本的角色。
注意
要提升的副本必须分配有读者虚拟终结点,否则将会在提升时收到错误。
测试应用程序
若要执行某些操作,请重启应用程序,然后尝试这些操作。 应用程序应无缝运行,而无需修改虚拟终结点连接字符串或 DNS 条目。 这次让应用程序保持运行状态。
故障回复到源服务器和区域
重复相同的操作,以将源服务器提升为主服务器。
在 Azure 门户中,选择副本。
在服务器边栏的“设置”下,选择“复制”
在“服务器”下,选择副本的“提升”图标。
在对话框中,确保操作为“提升到主服务器”。
对于数据同步,请确保已选择“计划内 - 提升前同步数据”。
选择“提升”,该过程将开始。 完成后,角色会反转:副本变为主服务器,主服务器承担副本的角色。
测试应用程序
再次切换到使用的应用程序之一。 等待主服务器和副本状态更改为 Updating
,然后尝试执行一些操作。 在副本提升期间,应用程序可能会遇到终结点的临时连接问题:
添加次要只读副本
在单独的区域中创建次要只读副本以修改读者虚拟终结点,并允许根据第一个副本创建独立服务器。
在 Azure 门户中,选择主要 Azure Database for PostgreSQL 灵活服务器实例。
在服务器边栏中的“设置”下,选择“复制”。
选择“创建副本”。
将第三个区域中的信息输入“基本信息”表单(例如
chinanorth3
和corp-pg-chinanorth-001
)选择“审阅 + 创建”以确认创建该副本,或者如果要添加、删除或修改任何防火墙规则,请选择“下一步: 网络”。
验证防火墙设置。 请注意主服务器设置是如何自动复制的。
保留剩余的默认值,然后选择页面底部的“审阅 + 创建”按钮,或转到以下表单以配置安全性或添加标记。
查看最终确认窗口中的信息。 准备就绪后,选择“创建”。 将创建新部署。
在部署期间,你将看到主服务器处于
Updating
状态。
修改虚拟终结点
在 Azure 门户中,选择主要 Azure Database for PostgreSQL 灵活服务器实例。
在服务器边栏中的“设置”下,选择“复制”。
选择省略号,然后选择“编辑”。
在对话框中,选择新的次要副本。
选择“保存”。 读取者终结点现在指向次要副本,提升操作现在绑定到此副本。
将副本提升到独立服务器
还可以中断副本的复制,以将其设为它的独立服务器,而不是切换到副本。
在 Azure 门户中,选择 Azure Database for PostgreSQL 灵活服务器主服务器。
在服务器边栏中服务器菜单上的“设置”下,选择“复制”。
在“服务器”下,选择要提升为独立服务器的副本的“提升”图标。
在对话框中,确保操作为“提升为独立服务器并从复制中删除。这不会影响主服务器”。
对于数据同步,请确保已选择“计划内 - 提升前同步数据”。
选择“提升”,该过程将开始。 完成后,服务器不再是主服务器的副本。
注意
将副本提升到独立服务器后,将无法将其添加回复制集。
删除虚拟终结点
在 Azure 门户中,选择主服务器。
在服务器边栏中的“设置”下,选择“复制”。
在页面顶部找到
Virtual endpoints
分区。 导航到终结点名称旁边的三个点(菜单选项),展开它,然后选择Delete
。将显示确认删除对话框。 它会发出警告:“此操作会删除虚拟终结点
virtualendpointName
。 任何使用这些域连接的客户端都可能会失去访问权限。”确认知晓影响并单击“删除”以确认。
删除副本
删除只读副本的方法与删除独立 Azure Database for PostgreSQL 灵活服务器实例的方法类似。
在 Azure 门户中,打开只读副本的“概述”页。 选择“删除”。
也可以在“复制”窗口中遵循以下步骤删除只读副本:
删除主服务器
只有在删除所有只读副本后,才能删除主服务器。 若要删除副本,请按照删除副本部分中的说明操作,然后继续执行提供的步骤。
若要在 Azure 门户中删除服务器,请遵循以下步骤:
监视副本
可以使用两个指标来监视只读副本。
物理复制最大滞后时间
仅在主服务器上可用。
“物理复制最大滞后”指标显示主服务器与滞后最大的副本之间的滞后(以字节为单位)。
“只读副本滞后时间”指标
“只读副本滞后时间”指标显示自从在副本上最后一次执行重放事务以来所经历的时间。 如果主服务器上未发生任何事务,则该指标会反映此滞后时间。 例如,如果主服务器上未发生任何事务,并且最后一个事务是在 5 秒前重放的,则只读副本滞后将显示 5 秒延迟。