Документация Patroni 4.1.5
Работа Patroni на системах с ограниченной памятью и Python 3.11+
Если Patroni работает в системе со строгими ограничениями памяти, например с vm.overcommit_memory=2 (рекомендуется для PostgreSQL), и используется Python 3.11 или новее, может наблюдаться неожиданное поведение:
- Patroni выглядит исправным
- PostgreSQL продолжает работать
- REST API Patroni перестаёт отвечать
- Операционная система сообщает, что Patroni прослушивает порт REST API
- Журналы Patroni выглядят нормально, однако однократно могут появиться сообщения
Exception ignored in thread started by: <object repr() failed>,MemoryError - Журналы ядра могут содержать сообщения наподобие
not enough memory for the allocation
Это поведение вызвано ошибкой в Python 3.11+ . При строгих ограничениях памяти запуск нового потока может зависнуть на неопределённое время, если свободной памяти недостаточно.
Рекомендуемое решение
В последних выпусках Patroni (4.1.1+, 4.0.8+) влияние этой проблемы уменьшено: все необходимые потоки запускаются на раннем этапе запуска, прежде чем система окажется под давлением нехватки памяти.
Дополнительные рекомендации (Linux, glibc)
При работе с vm.overcommit_memory=2 (рекомендуется для PostgreSQL) также рекомендуется запускать Patroni со следующими переменными окружения:
MALLOC_ARENA_MAX=1— уменьшает объём виртуальной памяти, выделяемой glibc для многопоточных приложенийPG_MALLOC_ARENA_MAX=— сбрасывает значениеMALLOC_ARENA_MAXдля процессов PostgreSQL, запускаемых Patroni.
Кроме того, можно настроить следующие параметры конфигурации Patroni:
thread_stack_size— размер стека потоков, запускаемых Patroni. Уменьшение этого значения сокращает потребление памяти процессом Patroni. Значение по умолчанию, заданное Patroni, —512kB. Увеличьтеthread_stack_size, если Patroni аварийно завершается из-за проблем со стеком; в противном случае значения по умолчанию достаточно.thread_pool_size— размер пула потоков, используемого Patroni для асинхронных задач и связи по REST API с другими участниками во время выбора лидера или отказоустойчивых проверок. Значение по умолчанию —5, чего достаточно для кластеров из трёх узлов.restapi.thread_pool_size— размер пула потоков для обработки запросов REST API. Значение по умолчанию —5, что позволяет параллельно обрабатывать до пяти запросов REST API. Обратите внимание: запросы, включающие SQL-запросы, фактически выполняются последовательно, поскольку используется одно соединение с базой данных, поэтому увеличение этого значения обычно не даёт преимуществ.
Patroni — шаблон для решений высокой доступности (HA) PostgreSQL на Python. Для максимальной применимости Patroni поддерживает различные распределённые хранилища конфигурации, такие как ZooKeeper , etcd , Consul и Kubernetes . Он будет полезен инженерам баз данных, администраторам баз данных, инженерам DevOps и SRE, которым необходимо быстро развернуть PostgreSQL высокой доступности в центрах обработки данных или где-либо ещё.
Мы называем Patroni «шаблоном», потому что это далеко не универсальная или готовая к работе система репликации. У неё есть свои особенности. Используйте её осмотрительно. Существует множество способов обеспечить высокую доступность PostgreSQL; их список приведён в документации PostgreSQL .
Поддерживаемые в настоящее время версии PostgreSQL: от 9.3 до 18.
Примечание для пользователей Citus: начиная с версии 3.0 Patroni хорошо интегрируется с расширением базы данных Citus для Postgres. Дополнительные сведения об использовании высокой доступности Patroni вместе с распределённым кластером Citus см. на странице поддержки Citus в документации Patroni.
Примечание для пользователей Kubernetes: Patroni может работать непосредственно поверх Kubernetes. См. главу Kubernetes документации Patroni.

Введение в Patroni, быстрый старт и основные концепции высокой доступности.
Инструкции по установке и обновлению Patroni на поддерживаемых платформах.
Patroni модель конфигурации, правила приоритета и инструменты валидации.
Справочник по конечным точкам REST API Patroni и их рабочему поведению.
Справочник по конфигурации, синтаксису и подкомандам patronictl.
Создание образов реплик, начальная инициализация и пользовательские процессы создания реплик.
Асинхронные и синхронные режимы репликации под управлением Patroni.
Настройка резервного кластера, поведение и репликация из удалённого первичного сервера.
Рассмотрение интеграции сторожевого таймера и fencing для кластеров Patroni.
Поведение режимов паузы и возобновления при управлении кластером Patroni.
DCS поведение, требования и эксплуатационные особенности отказоустойчивого режима.
Использование Patroni с объектами Kubernetes, метками и обнаружением сервисов.
Patroni сведения об интеграции для групп координаторов и рабов Citus.
Процедура преобразования существующих данных PostgreSQL в кластер Patroni.
Интеграция Patroni с внешними инструментами резервного копирования и оркестрации.
Вопросы безопасности для DCS, REST API и обработка учетных данных.
Многоцентровые схемы обеспечения высокой доступности с репликацией Patroni.
Часто задаваемые вопросы об эксплуатации Patroni и устранении неполадок.
Хронологические примечания к выпускам Patroni и история изменений.
Рабочий процесс внесения изменений, каналы поддержки и рекомендации по разработке.