Ответ вслух Senior NoSQL и выбор хранилища обновлено

Репликация и отказоустойчивость PostgreSQL

Вопрос

Расскажите, как устроить отказоустойчивый PostgreSQL для продакшена: репликация, переключение, чтение с реплик.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

База: потоковая физическая репликация с мастера на две реплики в разных зонах. Слоты репликации гарантируют, что мастер не удалит WAL, нужный реплике, но если реплика пропала, слот копит WAL и может заполнить диск, так что за ним следят и задают maxslotwalkeepsize.

Что должно прозвучать в ответе

  • Потоковая физическая репликация: мастер и одна-две реплики, слоты репликации

  • Асинхронная против синхронной: потеря последних транзакций против задержки коммита, кворум `ANY 1 (...)`

  • Автоматическое переключение через Patroni (или аналог) с хранилищем консенсуса, защита от split brain

  • Приложение ходит через единую точку входа (VIP, HAProxy, DNS), умеет переподключаться

  • Чтение с реплик: лаг, read-your-writes, отмена долгих запросов на реплике и `hot_standby_feedback`

  • Бэкапы отдельно от реплик: базовый бэкап плюс архив WAL, PITR, регулярная проверка восстановления

Что могут спросить следом

  • Что такое split brain и как его избегают?
  • Почему реплика не заменяет бэкап?
  • Зачем слоты репликации и чем они опасны?

Разбор

База: потоковая физическая репликация с мастера на две реплики в разных зонах. Слоты репликации гарантируют, что мастер не удалит WAL, нужный реплике, но если реплика пропала, слот копит WAL и может заполнить диск, так что за ним следят и задают max_slot_wal_keep_size. Асинхронный режим быстрый, но при аварии теряются последние транзакции; синхронный с кворумом ANY 1 (r1, r2) не теряет подтверждённое, но добавляет задержку на коммит. Переключение автоматизирую Patroni: он держит лидерство через etcd или Consul, при падении мастера поднимает самую свежую реплику и не даёт двум узлам одновременно считать себя мастером (split brain). Приложение ходит через единую точку (HAProxy с проверкой роли, VIP) и умеет переподключаться и повторять идемпотентные операции. Чтение с реплик даёт масштаб, но надо помнить о лаге и о конфликтах: долгие запросы на реплике отменяются при применении WAL, а hot_standby_feedback спасает их ценой раздувания на мастере. И отдельно бэкапы: реплика честно повторит DROP TABLE, поэтому нужны базовые бэкапы с архивом WAL (pgBackRest, WAL-G), восстановление на момент времени и регулярные учения по восстановлению.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.