Как настроить слоты репликации в patroni для сохранения неограниченного кол-ва WAL при отключении реплики?
Кто-нибудь может подсказать, как адекватно использовать слоты репликации в patroni (v. 3.2.1), чтобы иметь возможность хранить неограниченные WAL?
Дано: мастер-слэйв, репликация через слот репликации.
Если слэйв отключается, то мастер почему-то не хранит неограниченные WAL при настройке max_slot_wal_keep_size=-1. Максимум, что он сохранит - это установленное значение wal_keep_size (которое, не может быть меньше 128MB в patroni,кстати почему?). В итоге получается, что, отключая слэйв на небольшое время, мы теряем возможность его нормального запуска, так как нужные WAL уже будут удалены на мастере. Гуглил, проблема такая есть, можно решать ее увеличением wal_keep_size или через archive_command, но тогда какой смысл здесь имеют слоты, если они не работают?
Решил проблему через постоянные слоты репликации. Важно, чтобы имена данных слотов совпадали с именами, заданными для членов кластера. При этом в каждом инстансе будет создан 1 слот, не совпадающий с текущим именем. Тогда мы сможем использовать параметр max_slot_wal_keep_size как положено. При отсутствии связи реплики с мастером и превышении max_slot_wal_keep_size, после checkpoint WAL адекватно удалятся.
Если wal_status становится lost - значит max_slot_wal_keep_size был изменён с дефолтного значения -1 и установлен в какое-то другое значение.
Потому что именно для этого добавляли настройку max_slot_wal_keep_size, чтобы отставший слот репликации не ронял базу.
Прошу прощения, это действительно так, убрал. Но при выставлении max_slot_wal_keep_size=-1 проблема не решается. WAL не сохраняются больше чем wal_keep_size.
Melkij,
Проверил наличие слота репликации после остановки реплики и истечения ttl в patroni. По всей видимости, patroni удаляет слоты репликации при отключении реплики и истечения ttl. После включения наблюдается картина, когда слот inactive, необходимые wal уже удалены, lag репликации не уменьшается:
Поэтому данный конфиг max_slot_wal_keep_size не работает. Вроде бы можно как-то настроить постоянные физические слоты через patroni, чтобы они не удалялись. Пойду ресерчить...
ну если patroni удаляет неактивный слот (я не помню так ли это) - то чем тут max_slot_wal_keep_size может помочь... Конечно не нужно учитывать слоты которые администратор удалил.
по второму скрину впрочем видно, что слот сохранён и wal'ы он удерживает как положено. Почему отстаёт реплика надо поинтересоваться у реплики, в первую очередь в логах