Postgres: Как мне безопасно удалить реплику?

#postgresql #replication #database-replication

#postgresql #репликация #база данных-репликация

Вопрос:

Нужно ли мне что-либо делать с основным, если я навсегда удалю его единственную реплику? Я обеспокоен тем, что файлы WAL заполняют диск.

Я хочу удалить единственную реплику из настройки репликации с одним узлом:

P -> R

Я хочу удалить R.

Комментарии:

1. на самом деле это зависит от настроек recovery conf R .

Ответ №1:

Ваши опасения абсолютно верны. Реплика создает слот репликации на основном сервере, где restart_lsn хранится. Согласно документам, restart_lsn это:

Адрес (LSN) самого старого WAL, который все еще может потребоваться потребителю этого слота и, следовательно, не будет автоматически удален во время контрольных точек.

Если replica не продвигает LSN в этом слоте репликации, primary сохранит все сегменты WAL, начиная с этой позиции и игнорируя max_wal_size limit .

Если вы хотите удалить реплику и включить ротацию WAL, вам также необходимо удалить слот репликации:

 postgres=# SELECT * FROM pg_replication_slots;
postgres=# SELECT pg_drop_replication_slot('replication_slot_name');
 

На Postgres Commitfest есть исправление, которое вводит новый GUC для ограничения объема WAL, удерживаемого слотом репликации. Однако исправление является долгоживущим и все еще не зафиксировано.

Комментарии:

1. примечание: не все реплики используют слоты репликации, но это все равно хороший совет.