1

我们的 Postgres BDR 数据库系统停止在节点之间复制数据。

当我使用 进行检查时,pg_xlog_location_diff我注意到复制槽中有一个不断增长的缓冲区。

SELECT slot_name, database, active, pg_xlog_location_diff(pg_current_xlog_insert_location(), restart_lsn) AS retained_bytes
FROM pg_replication_slots
WHERE plugin = 'bdr';
                slot_name                |   database   | active | retained_bytes
-----------------------------------------+--------------+--------+----------------
 bdr_26702_6275336279642079463_1_20305__ | ourdatabase  | f      |       32253352

我还注意到该插槽被标记为 active=false。

SELECT * FROM pg_replication_slots;
-[ RECORD 1 ]+----------------------------------------
slot_name    | bdr_26702_6275336279642079463_1_20305__
plugin       | bdr
slot_type    | logical
datoid       | 26702
database     | ourdatabase
active       | f
xmin         |
catalog_xmin | 8041
restart_lsn  | 0/5F0C6C8

我提高了 Postgres 日志记录级别,但是我在日志中看到的只有消息:

LOCATION:  LogicalIncreaseRestartDecodingForSlot, logical.c:886
DEBUG:  00000: updated xmin: 1 restart: 0
LOCATION:  LogicalConfirmReceivedLocation, logical.c:958
DEBUG:  00000: failed to increase restart lsn: proposed 0/7DCE6F8, after 0/7DCE6F8, current candidate 0/7DCE6F8, current after 0/7DCE6F8, flushed up to 0/7DCE6F8

如果您知道如何重新激活复制槽并允许复制恢复,请告诉我。

4

1 回答 1

0

除非您有非常大量的数据,否则我看不出有任何理由不从头开始重新创建复制。停止slave,删除master上的slot,删除slave上的数据目录,创建新的slot(同名以避免slave上的进一步更改),执行pg_basebackup。

你可以在这里找到一个很好的教程。

于 2016-05-30T15:38:23.440 回答