我们的Postgres BDR数据库系统停止在节点之间复制数据。
当我使用l = []
for m in Message.objects.filter(dst=p).order_by('-date_last_modif'):
for c in m.conversations.all():
if c not in l:
l.append(c.pk)
conversations_read = [c for c in Conversation.objects.filter(pk__in=l)]
进行检查时,我注意到复制槽中有一个不断增长的缓冲区。
pg_xlog_location_diff
我还注意到插槽被标记为active = false。
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
我增加了Postgres日志记录级别,但只有我在日志中看到的消息是:
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
如果您知道如何重新激活复制插槽并允许复制恢复,请告诉我。
答案 0 :(得分:0)
除非你真的有数量的数据,否则我看不出有任何理由不从头开始重新创建复制。停止从站,删除主站上的插槽,删除从站上的数据目录,创建新插槽(使用相同的名称以避免从站进一步更改),执行pg_basebackup。
你可以找到一个好的教程here。