# YAML Параметры конфигурации

> Полная справка по параметрам и разделам конфигурации Patroni YAML.

---

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

---

<a id="yaml"></a>

--------

## Глобальный/Всемирный {#globaluniversal}

- **thread_pool_size**: размер пула потоков, используемый Patroni для выполнения асинхронных задач и обмена данными по REST API с другими участниками во время выбора лидера или проверок в аварийном режиме. Минимальное значение — `5`, значение по умолчанию — `5`.
- **thread_stack_size**: указывает размер стека, используемый для потоков, запускаемых Patroni. Значение должно быть выровнено по `64kB`. Минимальное значение — `64kB`, значение по умолчанию (устанавливается Patroni) — `512kB`.
- **name**: имя хоста. Должно быть уникальным для кластера. Значение `__patroni_strict_sync_replica_placeholder__` зарезервировано для внутреннего использования Patroni и не может использоваться в качестве имени узла.
- **namespace**: путь внутри хранилища конфигурации, где Patroni будет хранить информацию о кластере. Значение по умолчанию: "/service"
- **scope**: имя кластера

<a id="log_settings"></a>

--------

## Журнал {#log}

- **type**: задаёт формат логов. Может быть либо **plain**, либо **json**. Для использования формата **json** необходимо установить [jsonlogger](/ru/docs/patroni/installation#extras). Значение по умолчанию — **plain**.
- **level**: устанавливает общий уровень ведения журнала. Значение по умолчанию — **INFO** (см. [документацию по ведению журнала в Python](https://docs.python.org/3.6/library/logging.html#levels))
- **traceback_level**: задаёт уровень, на котором будут видны трассировки. Значение по умолчанию — **ERROR**. Установите значение **DEBUG**, если хотите видеть трассировки только при включённом **log.level=DEBUG**.
- **format**: задаёт строку форматирования журнала. Если тип журнала — **plain**, формат журнала должен быть строкой. См. [атрибуты LogRecord](https://docs.python.org/3.6/library/logging.html#logrecord-attributes) для получения списка доступных атрибутов. Если тип журнала — **json**, формат журнала может быть списком в дополнение к строке. Каждый элемент списка должен соответствовать атрибуту LogRecord. Будьте осторожны: требуется только имя поля, а обрамляющие символы **%(** и **)** опускаются. Если необходимо вывести поле журнала с другим именем ключа, используйте словарь, где ключ словаря — это поле журнала, а значение — имя поля, которое должно быть выведено в журнале. Значение по умолчанию: **%(asctime)s %(levelname)s: %(message)s**
- **dateformat**: устанавливает строку форматирования даты и времени. (см. документацию [formatTime()](https://docs.python.org/3.6/library/logging.html#logging.Formatter.formatTime))
- **static_fields**: добавить дополнительные поля в лог. Этот параметр доступен только при установке типа лога в **json**.
- **max_queue_size**: Patroni использует двухэтапное ведение журнала. Записи журнала записываются в очереди в оперативной памяти, а отдельный поток извлекает их из очереди и записывает в stderr или файл. Максимальный размер внутренней очереди по умолчанию ограничен **1000** записями, что достаточно для хранения журналов за последние 1 час 20 минут.
- **dir**: Каталог для записи журналов приложения. Каталог должен существовать и быть доступен для записи пользователем, запускающим Patroni. Если задать это значение, приложение по умолчанию будет сохранять журналы 4 25MB. Значения хранения можно настроить с помощью `file_num` и `file_size` (см. ниже).
- **mode**: Права доступа к файлам журнала (например, `0644`). Если не указано, права будут установлены на основе текущего значения umask.
- **file_num**: Количество журналов приложений, которые необходимо сохранить.
- **file_size**: Размер файла patroni.log (в байтах), при достижении которого происходит смена лог-файла.
- **loggers**: Этот раздел позволяет переопределять уровень ведения журнала для каждого модуля Python
  - **patroni.postmaster: WARNING**
  - **urllib3: DEBUG**
- **deduplicate_heartbeat_logs**: При значении `true` последовательные логи heartbeat, одинаковые по содержанию, не выводятся. Значение по умолчанию — `false`.

> [!WARNING]
> Время выполнения цикла высокой доступности может быть очень полезной информацией при диагностике переключений при отказе из-за нехватки ресурсов и подобных проблем. Когда `deduplicate_heartbeat_logs` установлен в `true`, журналы не будут содержать записи о выполнении цикла высокой доступности (если только не произойдёт смена лидера), и, таким образом, эта потенциально полезная информация станет недоступной в журналах.

Вот пример настройки Patroni для вывода логов в формате JSON.

```yaml
log:
   type: json
   format:
      - message
      - module
      - asctime: '@timestamp'
      - levelname: level
   static_fields:
      app: patroni
```

<a id="bootstrap_settings"></a>

--------

## Конфигурация начальной инициализации {#bootstrap-configuration}

> [!NOTE]
> После того как Patroni впервые прошла начальную инициализацию кластера и настройки были сохранены в DCS, все последующие изменения в разделе `bootstrap.dcs` конфигурации YAML не будут иметь никакого эффекта! Чтобы изменить их, используйте либо [patronictl_edit_config](/ru/docs/patroni/patronictl#patronictl_edit_config), либо REST API Patroni [REST API](/ru/docs/patroni/rest_api#rest_api).

- **начальная инициализация**:
  - **dcs**: Этот раздел будет записан в <span class="title-ref">/\<namespace\>/\<scope\>/config</span> хранилища конфигурации после начальной инициализации нового кластера. Глобальная динамическая конфигурация кластера. Вы можете разместить любые из параметров, описанных в разделе [Динамическая конфигурация](/ru/docs/patroni/config/dynamic#dynamic), под ключом `bootstrap.dcs`, и после того, как Patroni завершит инициализацию (bootstrap) нового кластера, он запишет этот раздел в <span class="title-ref">/\<namespace\>/\<scope\>/config</span> хранилища конфигурации.

  - **method**: пользовательский скрипт для использования при первоначальной настройке этого кластера.

    См. документацию по пользовательским методам [начальной инициализации](/docs/patroni/replica_bootstrap#custom_bootstrap) для получения подробной информации. При указании `initdb` возвращается к команде по умолчанию `initdb`. `initdb` также запускается, если в файле конфигурации отсутствует параметр `method`.

  - **initdb**: (необязательно) список параметров, передаваемых команде initdb.

    - **- data-checksums**: Должен быть включён при необходимости pg_rewind на 9.3.
    - **- encoding: UTF8**: кодировка по умолчанию для новых баз данных.
    - **- locale: UTF8**: язык по умолчанию для новых баз данных.

  - **post_bootstrap** или **post_init**: Дополнительный скрипт, который будет выполнен после начальной инициализации кластера. Скрипт получает строку соединения URL (с именем суперпользователя кластера в качестве имени пользователя). Переменная PGPASSFILE устанавливается в расположение файла pgpass.

<a id="citus_settings"></a>

--------

## Citus {#citus}

Включает интеграцию Patroni с [Citus](https://docs.citusdata.com). При настройке Patroni будет отвечать за регистрацию узлов-работников Citus на координаторе. Дополнительную информацию о поддержке Citus можно найти [здесь](/ru/docs/patroni/citus#citus).

- **group**: идентификатор группы Citus, целое число. Используйте `0` для координатора и `1`, `2` и т.д. для воркеров
- **database**: база данных, в которой должен быть создан расширение [citus](/ru/docs/patroni/citus#citus). Должна быть одинаковой на координаторе и всех воркерах. В настоящее время поддерживается только одна база данных.

<a id="consul_settings"></a>

--------

## Consul {#consul}

Большинство параметров необязательны, но необходимо указать один из параметров **host** или **url**

- **host**: хост:порт для локального агента Consul.
- **url**: URL для локального агента Consul в формате: http(s)://host:port.
- **port**: (необязательно) порт Consul.
- **scheme**: (необязательно) **http** или **https**, по умолчанию — **http**.
- **token**: (необязательно) токен ACL.
- **verify**: (необязательно) проверять ли сертификат SSL для запросов HTTPS.
- **cacert**: (необязательно) Сертификат CA. При наличии включает проверку подлинности.
- **cert**: (необязательно) файл с сертификатом клиента.
- **key**: (необязательно) файл с ключом клиента. Может быть пустым, если ключ содержится в **cert**.
- **dc**: (необязательно) Дата-центр для связи. По умолчанию используется дата-центр хоста.
- **consistency**: (необязательно) Выберите режим согласованности Consul. Допустимые значения: `default`, `consistent` или `stale` (подробнее в справочнике Consul [API](https://www.consul.io/api/features/consistency.html/))
- **checks**: (необязательно) список проверок состояния Consul, используемых для сессии. По умолчанию используется пустой список.
- **register_service**: (необязательно) указывает, следует ли регистрировать службу с именем, определённым параметром scope, и тегом master, primary, replica или standby-leader в зависимости от роли узла. По умолчанию — **false**.
- **service_tags**: (необязательно) дополнительные статические теги, добавляемые к сервису Consul помимо роли (`primary`/`replica`/`standby-leader`). По умолчанию используется пустой список.
- **service_check_interval**: (необязательно) как часто выполнять проверку работоспособности для зарегистрированного URL. Значение по умолчанию — '5s'.
- **service_check_tls_server_name**: (необязательно) переопределить хост SNI при подключении через TLS, см. также ссылку на проверку агента Consul [ API ](https://www.consul.io/api-docs/agent/check#tlsservername).

Для `token` необходимо наличие следующих разрешений ACL:

    service_prefix "${scope}" {
        policy = "write"
    }
    key_prefix "${namespace}/${scope}" {
        policy = "write"
    }
    session_prefix "" {
        policy = "write"
    }

--------

## Etcd {#etcd}

Большинство параметров необязательны, но необходимо указать один из параметров **host**, **hosts**, **url**, **proxy** или **srv**

- **host**: хост:порт для конечной точки etcd.
- **hosts**: список конечных точек etcd в формате host1:port1,host2:port2,и т.д. Может быть указан в виде строки, разделённой запятыми, или фактического списка YAML.
- **use_proxies**: Если этот параметр установлен в значение true, Patroni будет рассматривать **hosts** как список прокси-серверов и не будет выполнять обнаружение топологии кластера etcd.
- **url**: URL для etcd.
- **proxy**: URL прокси для etcd. Если вы подключаетесь к etcd через прокси, используйте этот параметр вместо **url**.
- **srv**: Домен для поиска записей SRV при автодиагностике кластера. Patroni будет пытаться запросить эти имена служб SRV для указанного домена (в указанном порядке до первого успешного результата): `_etcd-client-ssl`, `_etcd-client`, `_etcd-ssl`, `_etcd`, `_etcd-server-ssl`, `_etcd-server`. Если будут получены записи SRV для `_etcd-server-ssl` или `_etcd-server`, то будет использован протокол peer ETCD для запроса ETCD о доступных участниках. В противном случае будут использованы хосты из записей SRV.
- **srv_suffix**: Задаёт суффикс к имени SRV, который запрашивается при обнаружении. Используйте этот флаг для различия между несколькими кластерами etcd в рамках одного домена. Работает только в сочетании с **srv**. Например, если установлены `srv_suffix: foo` и `srv: example.org`, выполняется следующий запрос DNS SRV:`_etcd-client-ssl-foo._tcp.example.com` (и так далее для каждого возможного имени службы ETCD SRV).
- **protocol**: (необязательно) http или https, если не указано — используется http. Если указан **url** или **proxy** — протокол берётся из них.
- **username**: (необязательно) имя пользователя для аутентификации в etcd.
- **password**: (необязательно) пароль для аутентификации в etcd.
- **cacert**: (необязательно) Сертификат CA. При наличии включает проверку подлинности.
- **cert**: (необязательно) файл с сертификатом клиента.
- **key**: (необязательно) файл с ключом клиента. Может быть пустым, если ключ содержится в **cert**.

--------

## Etcdv3 {#etcdv3}

Если вы хотите, чтобы Patroni работал с кластером etcd через версию протокола 3, необходимо использовать раздел `etcd3` в файле конфигурации Patroni. Все параметры конфигурации остаются такими же, как и для `etcd`.

> [!WARNING]
> Ключи, созданные с использованием версии протокола 2, недоступны при использовании версии протокола 3, и наоборот, поэтому невозможно переключиться с `etcd` на `etcd3` просто путём обновления файла конфигурации Patroni. Кроме того, Patroni использует gRPC-gateway (прокси) etcd для взаимодействия с V3 API, что означает, что аутентификация по общему имени TLS невозможна.

--------

## ZooKeeper {#zookeeper}

- **hosts**: Список участников кластера ZooKeeper в формате: \['host1:port1', 'host2:port2', 'etc...'\].
- **use_ssl**: (необязательно) Указывает, используется ли SSL или нет. Значение по умолчанию — `false`. Если установлено в `false`, игнорируются все параметры, специфичные для SSL.
- **cacert**: (необязательно) Сертификат ЦС. При наличии включает проверку подлинности.
- **cert**: (необязательно) Файл с сертификатом клиента.
- **key**: (необязательно) Файл с ключом клиента.
- **key_password**: (необязательно) Пароль ключа клиента.
- **verify**: (необязательно) Указывает, проверять ли сертификат или нет. Значение по умолчанию — `true`.
- **set_acls**: (необязательно) Если задано, настраивает Kazoo на применение по умолчанию ACL к каждому ZNode, который он создаёт. ACL могут использовать схему `x509` (по умолчанию) или другие поддерживаемые схемы ZooKeeper, такие как `digest`. Они должны указываться как словарь, где ключ — полное имя субъекта (опционально с префиксом схемы), а значение — список разрешений. Разрешения могут быть одним или несколькими из `CREATE`, `READ`, `WRITE`, `DELETE`, `ADMIN`, или `ALL`. Например, `set_acls: {CN=principal1: [CREATE, READ], digest:principal2:+pjROuBuuwNNSujKyH8dGcEnFPQ=: [ALL]}`.
- **auth_data**: (необязательно) Учетные данные аутентификации для использования при соединении. Должно быть словарем в формате, где `scheme` — ключ, а `credential` — значение. По умолчанию — пустой словарь.

> [!NOTE]
> Необходимо установить `kazoo>=2.6.0` для поддержки SSL.

--------

## Выставщик {#exhibitor}

- **hosts**: начальный список узлов Exhibitor (ZooKeeper) в формате: 'host1,host2,etc...'. Этот список обновляется автоматически при изменении топологии кластера Exhibitor (ZooKeeper).
- **poll_interval**: с какой частотой следует обновлять список узлов ZooKeeper и Exhibitor из Exhibitor.
- **port**: Порт выставки.

<a id="kubernetes_settings"></a>

--------

## Kubernetes {#kubernetes}

- **bypass_api_service**: (необязательно) При взаимодействии с Kubernetes API Patroni обычно полагается на сервис [kubernetes](/ru/docs/patroni/kubernetes#kubernetes), адрес которого экспортируется в подах через переменную окружения `KUBERNETES_SERVICE_HOST`. Если установлено значение `bypass_api_service`, равное `true`, Patroni будет разрешать список узлов API за этим сервисом и подключаться к ним напрямую.
- **namespace**: (необязательно) пространство имён Kubernetes, в котором выполняется под Patroni. Значение по умолчанию — `default`.
- **labels**: Метки в формате `{label1: value1, label2: value2}`. Эти метки будут использоваться для поиска существующих объектов (Pod'ов и либо Endpoints, либо ConfigMaps), связанных с текущим кластером. Также Patroni установит их на каждый объект (Endpoint или ConfigMap), который создаст.
- **scope_label**: (необязательно) имя метки, содержащей имя кластера. Значение по умолчанию — `cluster-name`.
- **bootstrap_labels**: (необязательно) Метки в формате `{label1: value1, label2: value2}`. Эти метки будут присвоены поду Patroni, когда его состояние будет равно `initializing new cluster`, `running custom bootstrap script`, `starting after custom bootstrap` или `creating replica`.
- **role_label**: (необязательно) имя метки, содержащей роль (`primary`, `replica` или другое пользовательское значение). Patroni установит эту метку в поде, в котором выполняется. Значение по умолчанию — `role`.
- **leader_label_value**: (необязательно) значение метки пода при роли Postgres `primary`. Значение по умолчанию — `primary`.
- **follower_label_value**: (необязательно) значение метки пода при роли Postgres `replica`. Значение по умолчанию — `replica`.
- **standby_leader_label_value**: (необязательно) значение метки пода при роли Postgres `standby_leader`. Значение по умолчанию — `primary`.
- **tmp_role_label**: (необязательно) имя временной метки, содержащей роль (`primary` или `replica`). Значение этой метки всегда будет использовать значение по умолчанию, соответствующее роли. Устанавливать только при необходимости.
- **use_endpoints**: (необязательно) если установлено в true, Patroni будет использовать Endpoints вместо ConfigMaps для проведения выборов лидера и хранения состояния кластера.
- **pod_ip**: (необязательно) IP-адрес пода, в котором работает Patroni. Это значение необходимо, когда включён `use_endpoints`, и используется для заполнения подмножеств конечных точек лидера при повышении пода PostgreSQL до роли лидера.
- **ports**: (необязательно) если у объекта Service указано имя порта, то это же имя должно присутствовать в объекте Endpoint, иначе сервис не будет работать. Например, если ваш сервис определён как `{Kind: Service, spec: {ports: [{name: postgresql, port: 5432, targetPort: 5432}]}}`, необходимо установить `kubernetes.ports: [{"name": "postgresql", "port": 5432}]`, и Patroni будет использовать его для обновления подмножеств лидера Endpoint. Этот параметр используется только в случае, если установлено `kubernetes.use_endpoints`.
- **cacert**: (необязательно) Указывает файл с CA_BUNDLE файлом сертификатов доверенных ЦС, используемых при проверке сертификатов Kubernetes API SSL. Если не указано, Patroni будет использовать значение, предоставленное секретом ServiceAccount.
- **retriable_http_codes**: (необязательно) список кодов состояния HTTP от K8s API, при которых следует повторить попытку. По умолчанию Patroni повторяет попытку при кодах `500`, `503` и `504`, либо если ответ K8s API содержит заголовок `retry-after` HTTP.

<a id="raft_settings"></a>

--------

## Raft (устаревший) {#raft-deprecated}

- **self_addr**: `ip:port` для прослушивания соединений Raft. `self_addr` должен быть доступен с других узлов кластера. Если не задан, узел не будет участвовать в согласовании.

- **bind_addr**: (необязательно) `ip:port` для прослушивания соединений Raft. Если не указано, будет использован `self_addr`.

- **partner_addrs**: список других узлов Patroni в кластере в формате: \['ip1:port', 'ip2:port', 'etc...'\]

- **data_dir**: каталог для хранения журнала Raft и снимков. Если не указан, используется текущий рабочий каталог.

- **password**: (необязательно) Шифровать трафик Raft с помощью указанного пароля, требуется модуль `cryptography` python.
- **min_timeout**: (необязательно) минимальный тайм-аут выборов в секундах для лежащей в основе реализации Raft pysyncobj. Должен быть больше 3 * `append_entries_period`. Значение по умолчанию: `0.4`.
- **max_timeout**: (необязательно) максимальный тайм-аут голосования в секундах для лежащей в основе реализации Raft pysyncobj. Должен быть больше, чем `min_timeout`. Значение по умолчанию: `1.4`.
- **connection_timeout**: (необязательно) время в секундах, по истечении которого соединение без полученных данных считается неработоспособным. Должно быть больше или равно `max_timeout`. Значение по умолчанию: `3.5`.
- **append_entries_period**: (необязательно) интервал в секундах для отправки команды heartbeat (append_entries). Должен быть меньше одной трети `min_timeout`. Значение по умолчанию: `0.1`.
- **connection_retry_time**: (необязательно) интервал в секундах между попытками повторного подключения к оффлайн-узлам. По умолчанию: `5.0`.
- **leader_fallback_timeout**: (необязательно) время в секундах, по истечении которого лидер, не получивший ответ от большинства, возвращается в состояние последователя. Должно быть больше, чем `append_entries_period`. Значение по умолчанию: `30.0`.

> [!NOTE]
> Эти параметры тайм-аута полезны в сетях с высокой задержкой, где значения тайм-аутов по умолчанию для pysyncobj слишком агрессивны. Должны выполняться следующие ограничения: `min_timeout` > 3 * `append_entries_period`, `max_timeout` > `min_timeout`, `connection_timeout` >= `max_timeout`, и `leader_fallback_timeout` > `append_entries_period`. Patroni проверяет эти условия при запуске и откажется запускаться при их нарушении. Эти значения нельзя изменить во время работы и требуют перезапуска.
>
> [!WARNING]
> Эти параметры влияют только на тайм-ауты выбора и соединения в pysyncobj; они не увеличивают предельное время выполнения команд, применяемое Patroni к операциям Raft. Каждая команда Raft (обновление блокировки лидера, запись состояния кластера) должна завершиться в течение `retry_timeout` (по умолчанию `10`). При очень высокой задержке — примерно выше нескольких секунд времени отклика — одна команда может превысить `retry_timeout` даже при увеличении `connection_timeout` значительно выше RTT, поэтому DCS может стать недоступным, и первичный сервер может быть понижен. В таких условиях необходимо также увеличить `retry_timeout` и `ttl` соответственно, сохраняя `loop_wait + 2 * retry_timeout <= ttl`.

  Кратко о реализации Raft FAQ

  - Вопрос: Как вывести список всех узлов, обеспечивающих согласованность?

    A: `syncobj_admin -conn host:port -status`, где host:port — это адрес одного из узлов кластера

  - Вопрос: Узел, который участвовал в консенсусе, покинул кластер, и я не могу повторно использовать тот же IP-адрес для другого узла. Как удалить этот узел из консенсуса?

    A: `syncobj_admin -conn host:port -remove host2:port2`, где `host2:port2` — это адрес узла, который необходимо удалить из консенсуса.

  - Q: Откуда получить утилиту `syncobj_admin`?

    A: Устанавливается вместе с модулем `pysyncobj` (реализация python RAFT), который является зависимостью Patroni.

  - Q: возможно ли запуск узла Patroni без добавления в консенсус?

    A: Да, просто закомментируйте или удалите `raft.self_addr` из конфигурации Patroni.

  - В: Можно ли запускать Patroni и PostgreSQL только на двух узлах?

    A: Да, на третьем узле можно запустить `patroni_raft_controller` (без Patroni и PostgreSQL). При таком подходе можно временно потерять один узел, не затронув первичный сервер.

<a id="postgresql_settings"></a>

--------

## PostgreSQL {#postgresql}

- **postgresql**:
  - **authentication**:

    - **superuser**:
      - **username**: имя суперпользователя, задаётся при инициализации (initdb) и позже используется Patroni для подключения к postgres.
      - **password**: пароль для суперпользователя, устанавливается во время инициализации (initdb).
      - **sslmode**: (необязательно) соответствует параметру соединения [sslmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE), позволяющему клиенту указать тип режима согласования TLS с сервером. Дополнительную информацию о работе каждого режима см. в [документации PostgreSQL](https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS). Режим по умолчанию — `prefer`.
      - **sslkey**: (необязательно) соответствует параметру соединения [sslkey](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLKEY), который указывает расположение секретного ключа, используемого с сертификатом клиента.
      - **sslpassword**: (необязательно) соответствует параметру соединения [sslpassword](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLPASSWORD), который указывает пароль для секретного ключа, указанного в `sslkey`.
      - **sslcert**: (необязательно) соответствует параметру соединения [sslcert](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCERT), который указывает расположение сертификата клиента.
      - **sslrootcert**: (необязательно) соответствует параметру соединения [sslrootcert](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLROOTCERT), который указывает расположение файла, содержащего один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
      - **sslcrl**: (необязательно) соответствует параметру соединения [sslcrl](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCRL), который указывает расположение файла, содержащего список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
      - **sslcrldir**: (необязательно) соответствует параметру соединения [sslcrldir](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCRLDIR), который указывает расположение каталога, содержащего файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого содержится в этом списке.
      - **sslnegotiation**: (необязательно) соответствует параметру соединения [sslnegotiation](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLNEGOTIATION), управляющему процессом согласования SSL шифрования с сервером, если используется SSL.
      - **gssencmode**: (необязательно) соответствует параметру соединения [gssencmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-GSSENCMODE), определяющему, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
      - **channel_binding**: (необязательно) отображается на параметр соединения [channel_binding](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-CHANNEL-BINDING), управляющий использованием клиентом привязки канала.
    - **replication**:
      - **username**: имя пользователя для репликации; пользователь будет создан во время инициализации. Реплики будут использовать этого пользователя для доступа к источнику репликации через потоковую репликацию
      - **password**: пароль репликации; пользователь будет создан во время инициализации.
      - **sslmode**: (необязательно) соответствует параметру соединения [sslmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE), позволяющему клиенту указать тип режима согласования TLS с сервером. Дополнительную информацию о работе каждого режима см. в [документации PostgreSQL](https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS). Режим по умолчанию — `prefer`.
      - **sslkey**: (необязательно) соответствует параметру соединения [sslkey](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLKEY), который указывает расположение секретного ключа, используемого с сертификатом клиента.
      - **sslpassword**: (необязательно) соответствует параметру соединения [sslpassword](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLPASSWORD), который указывает пароль для секретного ключа, указанного в `sslkey`.
      - **sslcert**: (необязательно) соответствует параметру соединения [sslcert](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCERT), который указывает расположение сертификата клиента.
      - **sslrootcert**: (необязательно) соответствует параметру соединения [sslrootcert](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLROOTCERT), который указывает расположение файла, содержащего один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
      - **sslcrl**: (необязательно) соответствует параметру соединения [sslcrl](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCRL), который указывает расположение файла, содержащего список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
      - **sslcrldir**: (необязательно) соответствует параметру соединения [sslcrldir](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCRLDIR), который указывает расположение каталога, содержащего файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого содержится в этом списке.
      - **sslnegotiation**: (необязательно) соответствует параметру соединения [sslnegotiation](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLNEGOTIATION), управляющему процессом согласования SSL шифрования с сервером, если используется SSL.
      - **gssencmode**: (необязательно) соответствует параметру соединения [gssencmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-GSSENCMODE), определяющему, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
      - **channel_binding**: (необязательно) отображается на параметр соединения [channel_binding](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-CHANNEL-BINDING), управляющий использованием клиентом привязки канала.
    - **rewind**:
      - **username**: (необязательно) имя пользователя для `pg_rewind`; пользователь будет создан при инициализации postgres 11+ и будут выданы все необходимые [разрешения](https://www.postgresql.org/docs/11/app-pgrewind.html#id-1.9.5.8.8).
      - **password**: (необязательно) пароль для пользователя для `pg_rewind`; пользователь будет создан при инициализации.
      - **sslmode**: (необязательно) соответствует параметру соединения [sslmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE), позволяющему клиенту указать тип режима согласования TLS с сервером. Дополнительную информацию о работе каждого режима см. в [документации PostgreSQL](https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS). Режим по умолчанию — `prefer`.
      - **sslkey**: (необязательно) соответствует параметру соединения [sslkey](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLKEY), который указывает расположение секретного ключа, используемого с сертификатом клиента.
      - **sslpassword**: (необязательно) соответствует параметру соединения [sslpassword](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLPASSWORD), который указывает пароль для секретного ключа, указанного в `sslkey`.
      - **sslcert**: (необязательно) соответствует параметру соединения [sslcert](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCERT), который указывает расположение сертификата клиента.
      - **sslrootcert**: (необязательно) соответствует параметру соединения [sslrootcert](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLROOTCERT), который указывает расположение файла, содержащего один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
      - **sslcrl**: (необязательно) соответствует параметру соединения [sslcrl](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCRL), который указывает расположение файла, содержащего список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
      - **sslcrldir**: (необязательно) соответствует параметру соединения [sslcrldir](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCRLDIR), который указывает расположение каталога, содержащего файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого содержится в этом списке.
      - **sslnegotiation**: (необязательно) соответствует параметру соединения [sslnegotiation](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLNEGOTIATION), управляющему процессом согласования SSL шифрования с сервером, если используется SSL.
      - **gssencmode**: (необязательно) соответствует параметру соединения [gssencmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-GSSENCMODE), определяющему, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
      - **channel_binding**: (необязательно) отображается на параметр соединения [channel_binding](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-CHANNEL-BINDING), управляющий использованием клиентом привязки канала.

  - **callbacks**: скрипты обратного вызова, выполняемые при выполнении определённых действий. Patroni передаёт действие, роль и имя кластера. (См. scripts/aws.py как пример написания таких скриптов.)

    - **on_reload**: выполните этот скрипт при срабатывании перезагрузки конфигурации.
    - **on_restart**: запустите этот скрипт при перезапуске postgres (без изменения роли).
    - **on_role_change**: запустите этот скрипт при повышении или понижении уровня postgres.
    - **on_start**: запустите этот скрипт при запуске postgres.
    - **on_stop**: запустите этот скрипт при остановке postgres.

  - **connect_address**: IP-адрес + порт, через которые PostgreSQL доступен с других узлов и приложений.

  - **proxy_address**: IP-адрес + порт, через которые доступен пул соединений (e.g. PgBouncer), работающий рядом с Postgres. Значение записывается в ключ участник в DCS как `proxy_url` и может быть полезно для обнаружения сервисов.

  - **create_replica_methods**: упорядоченный список методов создания для преобразования узла Patroni в новую реплику. Метод "basebackup" используется по умолчанию; другие методы предполагают указание скриптов, каждый из которых настраивается как отдельный элемент конфигурации. Дополнительные сведения см. в документации по [настраиваемым методам создания реплик](/ru/docs/patroni/replica_bootstrap#custom_replica_creation).

  - **data_dir**: Расположение каталога данных PostgreSQL, либо [существующего](/ru/docs/patroni/existing_data#existing_data), либо подлежащего инициализации Patroni.

  - **config_dir**: Расположение каталога конфигурации PostgreSQL, по умолчанию — каталог данных. Должен быть доступен для записи Patroni.

  - **bin_dir**: (необязательно) Путь к исполняемым файлам PostgreSQL (pg_ctl, initdb, pg_controldata, pg_basebackup, postgres, pg_isready, pg_rewind). Если не указан или пустая строка, для поиска исполняемых файлов будет использоваться переменная среды PATH.

  - **bin_name**: (необязательно) Позволяет переопределить имена бинарных файлов Postgres, если используется пользовательская сборка Postgres:

    - **pg_ctl**: (необязательно) Пользовательское имя для бинарного файла `pg_ctl`.
    - **initdb**: (необязательно) Собственное имя для бинарного файла `initdb`.
    - **pgcontroldata**: (необязательно) Собственное имя для бинарного файла `pg_controldata`.
    - **pg_basebackup**: (необязательно) Пользовательское имя для бинарного файла `pg_basebackup`.
    - **postgres**: (необязательно) Пользовательское имя для бинарного файла `postgres`.
    - **pg_isready**: (необязательно) Пользовательское имя для бинарного файла `pg_isready`.
    - **pg_rewind**: (необязательно) Пользовательское имя для бинарного файла `pg_rewind`.

  - **listen**: IP-адрес и порт, на которых слушает PostgreSQL; должен быть доступен с других узлов кластера, если используется потоковая репликация. Разрешено несколько адресов, разделённых запятыми, при условии, что компонент порта указывается после последнего адреса через двоеточие, i.e. `listen: 127.0.0.1,127.0.0.2:5432`. Patroni будет использовать первый адрес из этого списка для установления локальных соединений с узлом PostgreSQL.

  - **use_unix_socket**: указывает, что Patroni должен предпочитать использование Unix-сокетов для подключения к кластеру. Значение по умолчанию — `false`. Если задано `unix_socket_directories`, Patroni будет использовать первое подходящее значение из него для подключения к кластеру и перейдёт на tcp, если ни одно значение не подходит. Если `unix_socket_directories` не указано в `postgresql.parameters`, Patroni предположит, что следует использовать значение по умолчанию, и опустит `host` из параметров соединения.

  - **use_unix_socket_repl**: указывает, что Patroni должен предпочитать использование Unix-сокетов для соединения с кластером пользователя репликации. Значение по умолчанию — `false`. Если задано `unix_socket_directories`, Patroni будет использовать первое подходящее значение из него для подключения к кластеру и перейдёт на tcp, если ни одно значение не подходит. Если `unix_socket_directories` не указано в `postgresql.parameters`, Patroni предположит, что следует использовать значение по умолчанию, и опустит `host` из параметров соединения.

  - **pgpass**: путь к файлу паролей [.pgpass](https://www.postgresql.org/docs/current/static/libpq-pgpass.html). Patroni создаёт этот файл перед выполнением pg_basebackup, скрипта post_init, а также при некоторых других обстоятельствах. Расположение должно быть доступно для записи Patroni.

  - **recovery_conf**: дополнительные параметры конфигурации, записываемые в recovery.conf при настройке последователя.

  - **custom_conf** : путь к необязательному файлу `postgresql.conf`, который будет использован вместо `postgresql.base.conf`. Файл должен существовать на всех узлах кластера, быть доступным для чтения PostgreSQL и будет включён из его расположения в реальном `postgresql.conf`. Обратите внимание, что Patroni не будет отслеживать изменения в этом файле, ни резервировать его. Однако его настройки всё ещё могут быть переопределены средствами конфигурации Patroni — см. [динамическая конфигурация](/ru/docs/patroni/config#config) для подробностей.

  - **parameters**: параметры конфигурации (GUC) для Postgres в формате `{ssl: "on", ssl_cert_file: "cert_file"}`.
  - **parameters_primary**: (необязательно) переопределения параметров, специфичных для роли, для первичного сервера. Эти значения объединяются с базовыми **parameters** и переопределяют их.
  - **parameters_replica**: (необязательно) переопределения параметров, специфичных для роли реплики. Эти значения объединяются с базовыми **parameters** и переопределяют их.
  - **parameters_standby_leader**: (необязательно) переопределения параметров, специфичных для роли, для standby_leader. Эти значения объединяются с базовыми **parameters** и переопределяют их.

  - **pg_hba**: список строк, которые Patroni будет использовать для генерации `pg_hba.conf`. Patroni игнорирует этот параметр, если параметр PostgreSQL `hba_file` установлен в непо умолчанию значение. Вместе с [динамической конфигурацией](/ru/docs/patroni/config/dynamic#dynamic) этот параметр упрощает управление `pg_hba.conf`.

    - **- host all all 0.0.0.0/0 md5**
    - **- host replication replicator 127.0.0.1/32 md5**: Такая строка обязательна для репликации.
  - **pg_hba_primary**: (необязательно) записи pg_hba, специфичные для роли, для первичного сервера. Они полностью заменяют **pg_hba** (слияние не производится). Если не определены, используется **pg_hba**.
  - **pg_hba_replica**: (необязательно) записи pg_hba, специфичные для роли, для реплики. Они полностью заменяют **pg_hba** (слияние не происходит). Если не определены, используется **pg_hba**.
  - **pg_hba_standby_leader**: (необязательно) записи pg_hba, специфичные для роли, для standby_leader. Они полностью заменяют **pg_hba** (слияние не происходит). Если не определены, используется **pg_hba**.

  - **pg_ident**: список строк, которые Patroni будет использовать для генерации `pg_ident.conf`. Patroni игнорирует этот параметр, если параметр PostgreSQL `ident_file` установлен в непо умолчанию значение. Вместе с [динамической конфигурацией](/ru/docs/patroni/config/dynamic#dynamic) этот параметр упрощает управление `pg_ident.conf`.

    - **- mapname1 systemname1 pguser1**
    - **- mapname1 systemname2 pguser2**
  - **pg_ident_primary**: (необязательно) записи pg_ident, специфичные для роли, для первичного сервера. Они полностью заменяют **pg_ident** (слияние не происходит). Если не определены, используется **pg_ident**.
  - **pg_ident_replica**: (необязательно) записи pg_ident, специфичные для роли, для реплики. Они полностью заменяют **pg_ident** (слияние не происходит). Если не определены, используется **pg_ident**.
  - **pg_ident_standby_leader**: (необязательно) записи pg_ident, специфичные для роли, для standby_leader. Они полностью заменяют **pg_ident** (слияние не происходит). Если не определены, используется **pg_ident**.

  - **pg_ctl_timeout**: Сколько времени pg_ctl должен ждать при выполнении `start`, `stop` или `restart`. Значение по умолчанию — 60 секунд.

  - **use_pg_rewind**: попытайтесь использовать pg_rewind на бывшем лидере при его подключении к кластеру в качестве реплики. Либо кластер должен быть инициализирован с использованием `data page checksums` (опция `--data-checksums` для `initdb`) и/или должно быть установлено значение `wal_log_hints`, равное `on`, иначе `pg_rewind` не будет работать.

  - **rewind**: (необязательно) пользовательские параметры для передачи команде `pg_rewind`. Может быть указан как список строк и/или словарей с одним ключом-значением. Запрещённые параметры: `target-pgdata`, `source-pgdata`, `source-server`, `write-recovery-conf`, `dry-run`, `restore-target-wal`, `config-file`, `no-ensure-shutdown`, `version`, и `help`. Пример использования:

    ```yaml
    postgresql:
      rewind:
        - debug
        - progress
        - sync-method: fsync
    ```

  - **remove_data_directory_on_rewind_failure**: Если этот параметр включён, Patroni удалит каталог данных PostgreSQL и повторно создаст реплику. В противном случае будет пытаться следовать новому лидеру. Значение по умолчанию — **false**.

  - **remove_data_directory_on_diverged_timelines**: Patroni удалит каталог данных PostgreSQL и повторно создаст реплику, если обнаружит расхождение временных шкал и прежний первичный сервер не сможет начать потоковую передачу от нового первичного сервера. Эта опция полезна, когда невозможно использовать `pg_rewind`. При проверке расхождения временных шкал в PostgreSQL версий 10 и ранее Patroni попытается подключиться с учётными данными репликации к базе данных «postgres». Следовательно, такой доступ должен быть разрешён в файле pg_hba.conf. Значение по умолчанию — **false**.

  - **replica_method**: для каждой create_replica_methods, кроме basebackup, следует добавить секцию конфигурации с тем же именем. В минимальном случае она должна содержать параметр "command" с полным путём к исполняемому скрипту. Остальные параметры конфигурации будут переданы скрипту в виде "параметр=значение".

  - **pre_promote**: скрипт fencing, выполняемый при переключении при отказе после получения блокировки лидера, но до повышения реплики в статус лидера. Если скрипт завершается с ненулевым кодом, Patroni не повышает реплику в статус лидера и удаляет ключ лидера из DCS.

  - **before_stop**: скрипт, выполняемый непосредственно перед остановкой postgres. В отличие от обратного вызова, этот скрипт выполняется синхронно, блокируя завершение работы до завершения его выполнения. Код возврата этого скрипта не влияет на возможность продолжения завершения работы.

<a id="restapi_settings"></a>

--------

## REST API {#rest-api}

- **restapi**:
  - **thread_pool_size**: размер пула потоков, используемого Patroni для обработки запросов REST API. Минимальное значение — `5`, значение по умолчанию — `5`.
  - **connect_address**: IP-адрес (или имя хоста) и порт для доступа к REST API Patroni [REST API](/ru/docs/patroni/rest_api#rest_api). Все участники кластера должны иметь возможность подключиться к этому адресу, поэтому, если настройка Patroni не предназначена для демонстрации в пределах localhost, этот адрес должен быть не "localhost" и не адресом петли (например, "localhost" или "127.0.0.1"). Он может использоваться в качестве конечной точки для проверок работоспособности HTTP (см. ниже параметр "listen" REST API), а также для запросов пользователей (напрямую или через REST API), а также для проверок работоспособности, выполняемых участниками кластера во время выборов лидера (например, для определения, продолжает ли лидер работу, или существует ли узел с WAL позицией, опережающей ту, по которой выполняется запрос; и т.д.). connect_address помещается в ключ участника в DCS, что позволяет преобразовать имя участника в адрес для подключения к его REST API.
  - **listen**: IP-адрес (или имя хоста) и порт, на которых Patroni будет слушать REST API — для обеспечения проверок работоспособности и обмена сообщениями между узлами кластера, как описано выше, а также для предоставления информации о работоспособности HAProxy (или любому другому балансировщику нагрузки, способному выполнять проверки HTTP «OPTION» или «GET»).
  - **authentication**: (необязательно)
    - **username**: имя пользователя для аутентификации по методу Basic-auth для защиты небезопасных конечных точек REST API.
    - **password**: Пароль для аутентификации Basic для защиты небезопасных конечных точек REST API.
  - **certfile**: (необязательно): Указывает файл с сертификатом в формате PEM. Если certfile не указан или оставлен пустым, сервер API будет работать без SSL.
  - **keyfile**: (необязательно): Указывает файл с секретным ключом в формате PEM.
  - **keyfile_password**: (необязательно): Указывает пароль для расшифровки ключевого файла.
  - **cafile**: (необязательно): Указывает файл с CA_BUNDLE, содержащий сертификаты доверенных ЦС, используемые при проверке сертификатов клиентов.
  - **ciphers**: (необязательно): указывает разрешённые наборы шифров (e.g. "ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1")
  - **verify_client**: (необязательно): `none` (по умолчанию), `optional` или `required`. При установке `none` REST API проверка сертификатов клиентов не выполняется. При установке `required` для всех вызовов REST API требуется сертификат клиента. При установке `optional` для всех небезопасных конечных точек REST API требуется сертификат клиента. При использовании `required` аутентификация клиента считается успешной, если проверка подписи сертификата прошла успешно. Для `optional` сертификат клиента проверяется только для запросов `PUT`, `POST`, `PATCH` и `DELETE`.
  - **allowlist**: (необязательно): Задаёт набор хостов, которым разрешено вызывать небезопасные конечные точки REST API. Единственный элемент может быть именем хоста, IP-адресом или сетевым адресом в формате CIDR. По умолчанию используется `allow all`. Если установлены `allowlist` или `allowlist_include_members`, то всё, что не включено, отклоняется.
  - **allowlist_include_members**: (необязательно): если установлено в `true`, позволяет получать доступ к небезопасным конечным точкам REST API с других участников кластера, зарегистрированных в DCS (IP-адрес или имя хоста берётся из участников `api_url`). Будьте осторожны — возможно, что ОС будет использовать другой IP-адрес для исходящих соединений.
  - **http_extra_headers**: (необязательно): заголовки HTTP позволяют серверу REST API передавать дополнительную информацию в ответе HTTP.
  - **https_extra_headers**: (необязательно): заголовки HTTPS позволяют серверу REST API передавать дополнительную информацию в ответе HTTP при включённом TLS. Это также передаст дополнительную информацию, заданную в `http_extra_headers`.
  - **request_queue_size**: (необязательно): устанавливает размер очереди запросов для сокета TCP, используемого Patroni REST API. Как только очередь заполнена, последующие запросы получают ошибку «Соединение отклонено». Значение по умолчанию — 5.
  - **server_tokens**: (необязательно): настраивает значение заголовка `Server` HTTP.
    - `Minimal`: В заголовке будет содержаться только версия Patroni, e.g. `Patroni/4.0.0`.
    - `ProductOnly`: Заголовок будет содержать только имя продукта, e.g. `Patroni`.
    - `Original` (по умолчанию): заголовок покажет исходное поведение и отобразит версии BaseHTTP и Python, e.g. `BaseHTTP/0.6 Python/3.12.3`.

Вот пример как **http_extra_headers**, так и **https_extra_headers**:

```yaml
restapi:
  listen: <listen>
  connect_address: <connect_address>
  authentication:
    username: <username>
    password: <password>
  http_extra_headers:
    'X-Frame-Options': 'SAMEORIGIN'
    'X-XSS-Protection': '1; mode=block'
    'X-Content-Type-Options': 'nosniff'
  cafile: <ca file>
  certfile: <cert>
  keyfile: <key>
  https_extra_headers:
    'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'
```

<div class="warning">

<div class="title">

Предупреждение

</div>

- `restapi.connect_address` должен быть доступен со всех узлов заданного кластера Patroni. Внутри Patroni он используется во время выбора лидера для определения узлов с минимальной задержкой репликации.
- Если включена проверка сертификатов клиентов (значение `restapi.verify_client` установлено в `required`), также **обязательно** предоставить **действительные сертификаты клиентов** в `ctl.certfile`, `ctl.keyfile`, `ctl.keyfile_password`. Если они не предоставлены, Patroni будет работать некорректно.

</div>

<a id="patronictl_settings"></a>

--------

## CTL {#ctl}

- **ctl**: (необязательно)
  - **authentication**:
    - **username**: имя пользователя для аутентификации по методу Basic-auth при доступе к защищённым конечным точкам REST API. Если не указано, [patronictl](/ru/docs/patroni/patronictl#patronictl) будет использовать значение, указанное для параметра "username" REST API.
    - **password**: Пароль для аутентификации Basic-auth при доступе к защищённым конечным точкам REST API. Если не указан, [patronictl](/ru/docs/patroni/patronictl#patronictl) будет использовать значение, указанное для параметра "password" REST API.
  - **insecure**: Разрешить соединения с REST API без проверки сертификатов SSL.
  - **cacert**: Указывает файл с CA_BUNDLE файлом или каталогом сертификатов доверенных ЦС, используемых при проверке REST API SSL сертификатов. Если не указано, [patronictl](/ru/docs/patroni/patronictl#patronictl) будет использовать значение, заданное для параметра REST API "cafile".
  - **certfile**: Указывает файл с клиентским сертификатом в формате PEM.
  - **keyfile**: Указывает файл с секретным ключом клиента в формате PEM.
  - **keyfile_password**: Указывает пароль для расшифровки ключевого файла клиента.

--------

## Сторожевой таймер {#watchdog}

- **mode**: `off`, `automatic` или `required`. При `off` сторожевой таймер отключён. При `automatic` сторожевой таймер будет использоваться, если доступен, но игнорируется, если недоступен. При `required` узел не станет лидером, если не удастся успешно включить сторожевой таймер.
- **device**: Путь к устройству сторожевого таймера. По умолчанию `/dev/watchdog`.
- **safety_margin**: Количество секунд резерва безопасности между срабатыванием сторожевого таймера и истечением срока ключа лидера.

<a id="tags_settings"></a>

--------

## Теги {#tags}

- **clonefrom**: `true` или `false`. Если установлено значение `true`, другие узлы могут предпочесть использовать этот узел для начальной инициализации (взять `pg_basebackup` из). Если несколько узлов имеют тег `clonefrom`, установленный в `true`, узел для начальной инициализации будет выбран случайным образом. Значение по умолчанию — `false`.
- **noloadbalance**: `true` или `false`. Если установлено `true`, узел вернёт код состояния HTTP 503 при проверке работоспособности `GET /replica` REST API и потому будет исключён из балансировки нагрузки. По умолчанию — `false`.
- **replicatefrom**: Имя другой реплики, от которой производится репликация. Используется для поддержки каскадной репликации.
- **nosync**: `true` или `false`. Если установлено значение `true`, узел никогда не будет выбран в качестве синхронной реплики.
- **sync_priority**: целое число, определяет приоритет данного узла при выборе синхронной реплики, когда [synchronous_mode](/ru/docs/patroni/replication_modes#synchronous_mode) установлено в `on`. Узлы с более высоким приоритетом предпочтительнее, чем узлы с более низким приоритетом. Если `sync_priority` равен 0 или отрицательно — такой узел не может быть записан в параметр PostgreSQL `synchronous_standby_names` (аналогично `nosync: true`). Имейте в виду, что это параметр имеет противоположное значение по сравнению со значением `sync_priority`, отображаемым в представлении `pg_stat_replication`.
- **nofailover**: `true` или `false`, управляет тем, может ли данный узел участвовать в выборе лидера и стать лидером. Значение по умолчанию — `false`, что означает, что данный узел <span id="can">может</span> участвовать в выборе лидера.
- **failover_priority**: целое число, определяет приоритет данного узла при переключении при отказе. Узлы с более высоким приоритетом предпочтительнее, чем узлы с более низким приоритетом, если они получили/воспроизвели одинаковое количество WAL. Однако узлы с более высокими значениями receive/replay LSN предпочтительнее независимо от их приоритета. Если `failover_priority` равен 0 или отрицательно — такой узел не может участвовать в выборе лидера и не может стать лидером (аналогично `nofailover: true`). Известен ограничение: `failover_priority` в настоящее время не работает с [кворумной синхронной репликацией](/ru/docs/patroni/replication_modes#quorum_mode).
- **nostream**: `true` или `false`. Если установлено значение `true`, узел не будет использовать протокол репликации для потоковой передачи WAL. Вместо этого он будет полагаться на восстановление из архива (если настроено `restore_command`) и опрос `pg_wal`/`pg_xlog`. Также отключается копирование и синхронизация постоянных слотов репликации на самом узле и всех его каскадных реплик. Установка этого тега на первичном сервере не оказывает эффекта.

> [!WARNING]
> Укажите только один из `nofailover` или `failover_priority`. Указание `nofailover: true` эквивалентно указанию `failover_priority: 0`, а указание `nofailover: false` присваивает узлу приоритет 1.

Помимо этих заранее определённых тегов, вы также можете добавлять свои:

- **key1**: `true`
- **key2**: `false`
- **key3**: `1.4`
- **key4**: `"RandomString"`

Метки видны в [REST API](/ru/docs/patroni/rest_api#rest_api) и [patronictl_list](/ru/docs/patroni/patronictl#patronictl_list). Также можно проверить состояние экземпляра с помощью этих меток. Если метка не определена для экземпляра или значение не соответствует запрашиваемому, будет возвращён код состояния HTTP 503.

---

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

- [Поддержка Citus](/ru/docs/patroni/citus/)
- [Patroni конфигурация](/ru/docs/patroni/config/)
- [Динамическая конфигурация](/ru/docs/patroni/config/dynamic/)
- [Конфигурация среды](/ru/docs/patroni/config/env/)
- [Преобразование существующего кластера](/ru/docs/patroni/existing_data/)
- [Часто задаваемые вопросы](/ru/docs/patroni/faq/)
- [Установка](/ru/docs/patroni/installation/)
- [Использование с Kubernetes](/ru/docs/patroni/kubernetes/)
- [patronictl](/ru/docs/patroni/patronictl/)
- [Введение](/ru/docs/patroni/readme/)
- [Примечания к выпускам](/ru/docs/patroni/releases/)
- [Аспекты безопасности](/ru/docs/patroni/security/)
