描述复制和逻辑解码
参数 wal_level 允许定义应将多少信息写入日志。 有两个选项:LOGICAL 或 REPLICA。 REPLICA 是默认值。 启动服务器时会设置此参数。
高可用性
高可用性是一项 Azure Database for PostgreSQL 服务,它提供备用服务器,如果实时服务器上发生故障,则随时可以接管。 Azure Database for PostgreSQL 灵活服务器中的高可用性使用复制通过数据更改自动更新备用服务器。
为 Azure Database for PostgreSQL 灵活服务器配置高可用性时,主服务器位于一个可用性区域中,备用服务器会在不同的可用性区域中创建。 使用 PostgreSQL 流式处理复制以同步模式将数据从主服务器复制到备用服务器。
每个可用性区域由一个或多个数据中心组成。 可用性区域有其自己的电源、冷却系统、网络基础结构等,使它们彼此独立。 数据文件和预写日志 (WAL) 文件的三个副本存储在每个可用性区域中的本地冗余存储中,在主服务器和备用服务器之间提供物理隔离。 如果一个可用性区域失败,其他两个可用性区域可能会继续工作。 区域中的可用性区域通过快速光纤网络进行连接,往返延迟小于 2 毫秒。
注意
并非所有区域都有可用性区域。
借助高可用性,数据在数据库使用时一直重复,从而提供原始数据的最新副本。 如果发生崩溃,则可以使用副本代替原始数据。 复制具有主服务器和备用服务器。 主服务器将 WAL 日志文件发送到备用服务器,该服务器接收 WAL 日志文件。
备用服务器报告回主服务器,其中包含其写入的最后一个预写日志以及刷新到磁盘的最后一个位置等信息。要定义 WAL 接收方发送回报告的最小频率,请设置wal_receiver_status_interval参数。 max_replication_slots 参数定义服务器可支持的最大复制槽数。 wal_level 设置为 REPLICA 时,max_replication_slots 必须至少为一,但允许的值范围介于 0 和 262,143 之间。
max_wal_senders 参数设置 WAL 发送方进程的最大数目。
监视主服务器和备用服务器,并采取适当的措施来修复问题,包括触发到备用服务器的故障转移。 下面列出了区域冗余高可用性状态:
- 正在初始化 - 正在创建新的备用服务器。
- 正在复制 - 数据复制处于稳定状态且正常运行。
- 正常 - 主服务器正在更新备用服务器。
- 故障转移 - 主数据库服务器正在故障转移到备用数据库。
- 正在删除备用服务器 - 正在删除备用服务器。
- 未启用 - 未启用区域冗余高可用性。
可以为现有数据库服务器添加高可用性。 如果要在实时服务器上启用或禁用高可用性,请在活动很少时执行该操作。
通过 Azure 门户:
- 导航到 Azure Database for PostgreSQL 服务器。
- 从“概述”部分,选择当前“配置”。 将显示“计算 + 存储”部分。
- 在“高可用性”下,选中“高可用性(区域冗余)”复选框以启用高可用性。 可突发层级不支持高可用性。
请务必注意,高可用性是灾难恢复选项。 不能将备用服务器用于任何其他目的,例如允许访问只读数据库。 但是,可以使用发布服务器和订阅服务器模型在两个 Azure Database for PostgreSQL 服务器之间配置复制。 此配置维护了两个服务器,在它们之间复制数据。 然后,你对订阅服务器具有完全访问权限,并且可以将数据库用于任何目的。 在本模块结束时,你会在本练习中练习此配置。
逻辑解码
逻辑解码还使用发送到预写日志的数据。 顾名思义,它会解码预写日志中的条目,使其易于理解。 所有 INSERT、UPDATE 和 DELETE 更改都可用于逻辑解码。
逻辑解码可用于审核、分析或任何其他原因,你可能有兴趣了解更改的内容,以及更改时间。
逻辑解码从数据库中的所有表中提取更改。 它不同于复制,因为它无法将这些更改发送到另一个 PostgreSQL 实例。 相反,一个 PostgreSQL 扩展提供用于流式传输更改的输出插件。
逻辑解码允许将预写日志的内容解码为易于理解的格式,无需了解数据库结构即可对其进行解释。 Azure Database for PostgreSQL 支持使用 wal2json 扩展进行逻辑解码,该扩展安装在 Azure Database for Postgres 服务器上。
可以使用其他扩展插件,例如允许逻辑流式处理复制的 pglogical 扩展插件。
若要在服务器参数中使用逻辑解码,请:
- 将 wal_level 设置为 LOGICAL
- 将 max_replication_slots 设置为 10
- 将 max_wal_senders 设置为 10
进行这些更改后,必须重启服务器。
若要从 Azure 门户使用 pglogical 扩展插件,请执行以下操作:
- 导航到 Azure Database for PostgreSQL 服务器。
- 选择“服务器参数”,然后搜索 shared_preload_libraries。 从下拉框中,选择“pglogical”。
- 搜索“azure.extensions”。 从下拉框中,选择“pglogical”。
- 要应用更改,请重启服务器。
还必须授予管理员用户复制权限:
ALTER ROLE <adminname> WITH REPLICATION;
有关详细信息,请查看pglogical 扩展插件文档联机文档。
逻辑解码会将数据更改输出为名为逻辑复制槽的流。
- 每个槽都有一个输出插件,你可以定义该插件。
- 每个槽仅提供一个数据库的更改,但数据库可以有多个槽。
- 每个槽通常发出一次数据更改。
- 如果 PostgreSQL 重启,槽可能会重新发出更改,客户端需要处理更改。
- 必须监视槽。 未占用的槽会保留这些未处理完的更改的所有 WAL 文件。 这种情况可能导致存储已满或事务 ID 回绕。