# Документация Patroni 4.1.5

> Обзор документации Patroni по высокой доступности PostgreSQL.

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

> [!WARNING]
> Работа 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+](https://github.com/python/cpython/issues/140746). При строгих ограничениях памяти запуск нового потока может зависнуть на неопределённое время, если свободной памяти недостаточно.

## Рекомендуемое решение {#recommended-solution}

В последних выпусках Patroni (4.1.1+, 4.0.8+) влияние этой проблемы уменьшено: все необходимые потоки запускаются на раннем этапе запуска, прежде чем система окажется под давлением нехватки памяти.

## Дополнительные рекомендации (Linux, glibc) {#additional-recommendations-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](https://zookeeper.apache.org/), [etcd](https://github.com/coreos/etcd), [Consul](https://github.com/hashicorp/consul) и [Kubernetes](https://kubernetes.io). Он будет полезен инженерам баз данных, администраторам баз данных, инженерам DevOps и SRE, которым необходимо быстро развернуть PostgreSQL высокой доступности в центрах обработки данных или где-либо ещё.

Мы называем Patroni «шаблоном», потому что это далеко не универсальная или готовая к работе система репликации. У неё есть свои особенности. Используйте её осмотрительно. Существует множество способов обеспечить высокую доступность PostgreSQL; их список приведён в [документации PostgreSQL](https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling).

Поддерживаемые в настоящее время версии PostgreSQL: от 9.3 до 18.

**Примечание для пользователей Citus**: начиная с версии 3.0 Patroni хорошо интегрируется с расширением базы данных [Citus](https://github.com/citusdata/citus) для Postgres. Дополнительные сведения об использовании высокой доступности Patroni вместе с распределённым кластером Citus см. на [странице поддержки Citus](/ru/docs/patroni/citus#citus) в документации Patroni.

**Примечание для пользователей Kubernetes**: Patroni может работать непосредственно поверх Kubernetes. См. главу [Kubernetes](/ru/docs/patroni/kubernetes#kubernetes) документации Patroni.

<img src="/img/docs/patroni/patroni-logo.png" width="128" height="128" alt="изображение" />

---

Страницы раздела:

- [Введение](/ru/docs/patroni/readme/): Введение в Patroni, быстрый старт и основные концепции высокой доступности.
- [Установка](/ru/docs/patroni/installation/): Инструкции по установке и обновлению Patroni на поддерживаемых платформах.
- [Patroni конфигурация](/ru/docs/patroni/config/): Patroni модель конфигурации, правила приоритета и инструменты валидации.
- [Patroni REST API](/ru/docs/patroni/rest_api/): Справочник по конечным точкам REST API Patroni и их рабочему поведению.
- [patronictl](/ru/docs/patroni/patronictl/): Справочник по конфигурации, синтаксису и подкомандам patronictl.
- [Создание образов реплик и начальная инициализация](/ru/docs/patroni/replica_bootstrap/): Создание образов реплик, начальная инициализация и пользовательские процессы создания реплик.
- [Режимы репликации](/ru/docs/patroni/replication_modes/): Асинхронные и синхронные режимы репликации под управлением Patroni.
- [Резервный кластер](/ru/docs/patroni/standby_cluster/): Настройка резервного кластера, поведение и репликация из удалённого первичного сервера.
- [Поддержка сторожевого таймера](/ru/docs/patroni/watchdog/): Рассмотрение интеграции сторожевого таймера и fencing для кластеров Patroni.
- [Режим приостановки/возобновления для кластера](/ru/docs/patroni/pause/): Поведение режимов паузы и возобновления при управлении кластером Patroni.
- [DCS Отказоустойчивый режим](/ru/docs/patroni/dcs_failsafe_mode/): DCS поведение, требования и эксплуатационные особенности отказоустойчивого режима.
- [Использование Patroni с Kubernetes](/ru/docs/patroni/kubernetes/): Использование Patroni с объектами Kubernetes, метками и обнаружением сервисов.
- [Поддержка Citus](/ru/docs/patroni/citus/): Patroni сведения об интеграции для групп координаторов и рабов Citus.
- [Преобразование отдельного экземпляра в кластер Patroni](/ru/docs/patroni/existing_data/): Процедура преобразования существующих данных PostgreSQL в кластер Patroni.
- [Интеграция с другими инструментами](/ru/docs/patroni/tools_integration/): Интеграция Patroni с внешними инструментами резервного копирования и оркестрации.
- [Аспекты безопасности](/ru/docs/patroni/security/): Вопросы безопасности для DCS, REST API и обработка учетных данных.
- [HA-кластер с несколькими центрами обработки данных](/ru/docs/patroni/ha_multi_dc/): Многоцентровые схемы обеспечения высокой доступности с репликацией Patroni.
- [Часто задаваемые вопросы](/ru/docs/patroni/faq/): Часто задаваемые вопросы об эксплуатации Patroni и устранении неполадок.
- [Примечания к выпускам](/ru/docs/patroni/releases/): Хронологические примечания к выпускам Patroni и история изменений.
- [Рекомендации по участию в разработке](/ru/docs/patroni/contributing_guidelines/): Рабочий процесс внесения изменений, каналы поддержки и рекомендации по разработке.

---

Обратные ссылки:

- [Атрибуция](/ru/attribution/)
- [Документация](/ru/docs/)
