设置故障转移
- 本主题中描述的程序应通过 PostgreSQL DBA 执行。
- 需要 Data Movement gateway 2024.11.14 或更高版本
本主题解释了如何设置 PostgreSQL 和 Data Movement gateway 以支持故障转移场景。您需要执行的过程取决于您的特定 PostgreSQL 故障转移设置。
如果主数据库和辅助数据库的数据库对象 ID 在故障转移后保持不变(通常是这种情况),则只需使用辅助数据库服务器的 IP 地址更新 Data Movement gateway 计算机上的 hosts 文件。但是,如果故障转移后辅助数据库的数据库对象 ID 与主数据库不同,则需要进行其他配置。通常无法事先知道对象 ID 是否会更改,但如果您知道,请在主数据库和辅助数据库的对象 ID 不同时执行设置故障转移,如下所述。如果您不知道对象 ID 是否会更改,我们建议在主数据库和辅助数据库的对象 ID 相同时执行设置故障转移中描述的更简单的过程,因为故障转移后对象 ID 通常会保持不变。
如果您执行了更简单的设置,但在故障转移过程中 Data Movement gateway 无法恢复,那么当主数据库和辅助数据库的对象 ID 不同时,您将需要执行设置故障转移过程。
当主数据库和次要数据库的对象 ID 相同时设置故障转移
当发生故障转移时,数据任务将遇到可恢复的错误,并将尝试重新连接到主数据库服务器的 IP 地址。不过,这通常不会成功,因为辅助数据库服务器(几乎总是)拥有不同的 IP 地址。
如果 DNS 故障转移服务不处理 IP 地址的切换,则需要在 Data Movement gateway 计算机上的 hosts 文件中指定新的 IP 地址。hosts 文件的路径是 /etc/hosts。更新主机文件后,数据任务将自动恢复。
当主数据库和辅助数据库的对象 ID 不同时设置故障转移
在标准操作中,当从 PostgreSQL 源移动数据时,数据任务会自动创建一个席位。席位名称在其名称中包含数据库的对象 ID。在极少数情况下,主数据库和辅助数据库的对象 ID 会不同。在这种情况下,数据任务将在故障转移过程中失败,因为它将无法在辅助数据库中找到为主数据库创建的席位。在这种情况下,将出现以下错误:
[SOURCE_CAPTURE ]E: Can't resume task after replication slot was dropped. [1020101] (postgres_endpoint_capture.c:445)
如果遇到此类错误,请执行以下操作:
-
在连接器设置内部属性部分,添加内部属性 slotName 并设置席位名值。
指定的 slotName 必须已存在于主 PostgreSQL 服务器中。您可以创建一个新席位,也可以使用现有席位。
要创建一个新席位并检索其 LSN,请运行以下查询:
SELECT lsn FROM pg_create_logical_replication_slot ('user_provided_slot_name', 'test_decoding');
有关可用席位及其 LSN 的列表,请运行以下查询:
SELECT slot_name, restart_lsn FROM pg_replication_slots WHERE slot_type = 'logical';
-
在高级运行选项对话框的源更改位置字段中输入指定 slotName 的 LSN,然后准备并启动数据任务。
如果发生故障转移,辅助服务器将几乎立即接管并成为主服务器。故障转移应由 pg_failover_slots 扩展处理。
-
当发生故障转移时,数据任务将遇到可恢复的错误,并将尝试重新连接到主数据库服务器的 IP 地址。但是,它通常不会成功,因为辅助数据库服务器(几乎总是)具有不同的 IP 地址。 如果 DNS 故障转移服务不处理 IP 地址的切换,则需要在 Data Movement gateway 计算机上的 hosts 文件中指定新的 IP 地址。hosts 文件的路径是 /etc/hosts。更新主机文件后,数据任务将自动恢复。