Переключение при сбое и выбор лидера (Patroni, Stolon)
Используйте Patroni или Stolon для автоматического переключения при сбое и настройте кворум, чтобы избежать расщепления кластера
«Переключение при сбое и выбор лидера (Patroni, Stolon)» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Зачем нужна автоматическая смена основного сервера?
Ручное переключение при отказе выполняется медленно и часто приводит к ошибкам. Инструменты обнаруживают отказ основного сервера и автоматически повышают роль реплики без вмешательства человека.
Этапы переключения при отказе
Необходимо выполнить следующие действия:
- Обнаружить, что основной сервер недоступен: проверки работоспособности и консенсус
- Выбрать реплику с наиболее свежим WAL
- Повысить её роль (pg_promote / команда повышения роли)
- Перенастроить остальные реплики на следование за новым основным сервером
- Обновить маршрутизацию подключений приложения
Риск раздвоения мозга
При разделении сети можно повысить роль реплики, пока старый основной сервер всё ещё работает. Два основных сервера → конфликтующие записи → повреждение данных. Избегайте этого с помощью кворума.
Patroni
Демон на Python, использующий внешнее DCS — распределённое хранилище конфигурации, обычно etcd, Consul или Zookeeper — для выбора лидера:
# patroni.yml
name: pg1
scope: my_cluster
etcd:
hosts: 10.0.0.10:2379,10.0.0.11:2379,10.0.0.12:2379
postgresql:
data_dir: /var/lib/postgresql/dataКак Patroni выбирает нового лидера
Демон Patroni на каждом узле пытается первым получить блокировку лидера в etcd. Удерживать её может только один узел; он становится основным сервером. Остальные следуют за ним.
Stolon
Альтернатива на Go. Использует похожую модель консенсуса, но отличается эксплуатационными характеристиками. Распределяет обязанности между наблюдателем, хранителем и прокси.
repmgr
Более лёгкий инструмент от 2ndQuadrant: автоматизации меньше, ручного управления больше. Хорошо подходит для небольших конфигураций.
Переключение при отказе в облачных сервисах
RDS, Cloud SQL и Aurora выполняют переключение при отказе за вас. Вы жертвуете гибкостью ради простоты эксплуатации.
Маршрутизация подключений после переключения
Приложениям нужно знать, какой сервер стал основным. Возможные варианты:
- Обновление DNS (медленное из-за TTL)
- Плавающий IP, которым управляет инструмент переключения при отказе
- Слой прокси: HAProxy, pgbouncer со скриптом или конечная точка AWS RDS
Синхронная репликация и переключение при отказе
Синхронный резервный сервер гарантирует отсутствие потери данных. Сочетайте его с автоматическим переключением при отказе для максимальной HA.
Кворум
Для синхронной репликации задайте synchronous_standby_names с кворумом: ANY 2 из 3 реплик должны подтвердить операцию. Это позволяет пережить работу одной медленной или неисправной реплики без блокировки подтверждения транзакций.
synchronous_standby_names = 'ANY 2 (replica1, replica2, replica3)'Чтение собственных записей
После переключения при отказе или при отставании репликации приложение может записать данные на новый основной сервер, а затем сразу прочитать устаревшие данные с реплики. Направляйте чтение после записи на основной сервер или отслеживайте состояние с помощью pg_last_wal_replay_lsn.
Тестирование переключения при отказе
Проверьте процедуру до того, как она понадобится. Ежемесячно отключайте основной сервер в тестовой среде. Отрабатывайте пошаговую инструкцию. Настоящее переключение при отказе и так создаёт достаточно стресса — неожиданности ни к чему.
Итоги
Автоматическое переключение при отказе исключает человека из критического пути.
- Patroni и Stolon для самостоятельного управления
- RDS и Cloud SQL для управляемых сервисов
- Остерегайтесь раздвоения мозга — используйте кворум
- Регулярно отрабатывайте переключение при отказе
Быстрая проверка
Что означает «раздвоение мозга» в контексте репликации PostgreSQL?
Часто задаваемые вопросы
Урок «Переключение при сбое и выбор лидера (Patroni, Stolon)» бесплатный?
Да — полный текст урока «Переключение при сбое и выбор лидера (Patroni, Stolon)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Переключение при сбое и выбор лидера (Patroni, Stolon)»?
Используйте Patroni или Stolon для автоматического переключения при сбое и настройте кворум, чтобы избежать расщепления кластера Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Переключение при сбое и выбор лидера (Patroni, Stolon)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Потоковая репликация и WAL
- Логическая репликация для шардинга
- Переключение при сбое и выбор лидера (Patroni, Stolon)
- Реплики для чтения и маршрутизация соединений