Перейти к содержанию

Это многостраничная версия текущего раздела для печати. .

Вернуться к обычному виду страницы.

Patroni конфигурация

Patroni модель конфигурации, правила приоритета и инструменты валидации.

Существует 3 типов конфигурации Patroni:

  • Глобальная динамическая конфигурация .
    Эти параметры хранятся в DCS (распределённое хранилище конфигурации) и применяются ко всем узлам кластера. Динамическая конфигурация может быть установлена в любой момент с помощью инструмента patronictl_edit_config или Patroni REST API . Если изменённые параметры не входят в начальную конфигурацию, они применяются асинхронно (при следующем цикле пробуждения) на каждом узле, после чего узел перезагружается. Если узлу требуется перезапуск для применения конфигурации (для параметров PostgreSQL с контекстом postmaster, если их значения изменились), в members.data JSON устанавливается специальный флаг pending_restart. Кроме того, состояние узла указывает на это, отображая "restart_pending": true.

  • Локальный файл конфигурации (patroni.yml).
    Эти параметры определяются в файле конфигурации и имеют приоритет перед динамической конфигурацией. patroni.yml можно изменить и повторно загрузить во время выполнения (без перезапуска Patroni), отправив SIGHUP процессу Patroni, выполнив запрос POST /reload REST-API или команду patronictl_reload . Локальная конфигурация может представлять собой один файл YAML или каталог. Если указан каталог, все файлы YAML в нём загружаются по одному в отсортированном порядке. Если ключ определён в нескольких файлах, приоритет имеет его значение в последнем файле.

  • Конфигурация среды .
    Возможна установка/переопределение некоторых параметров конфигурации «Локальная» с помощью переменных среды. Конфигурация среды особенно полезна при работе в динамической среде, когда некоторые параметры заранее неизвестны (например, невозможно определить внешний IP-адрес при запуске внутри docker).


Важные правила

Параметры PostgreSQL, контролируемые Patroni

Некоторые параметры PostgreSQL должны иметь одинаковые значения на первичном сервере и репликах. Для этих параметров значения, установленные либо в локальных файлах конфигурации Patroni, либо через переменные среды, не влияют. Чтобы изменить или установить их значения, необходимо изменить общую конфигурацию в DCS. Ниже приведён список таких параметров вместе с их значениями по умолчанию и минимальными значениями:

  • max_connections: значение по умолчанию 100, минимальное значение 25
  • max_locks_per_transaction: значение по умолчанию 64, минимальное значение 32
  • max_worker_processes: значение по умолчанию 8, минимальное значение 2
  • max_prepared_transactions: значение по умолчанию 0, минимальное значение 0
  • wal_level: значение по умолчанию hot_standby, допустимые значения: hot_standby, реплика, логическая
  • track_commit_timestamp: значение по умолчанию off

Для параметров, указанных ниже, PostgreSQL не требует одинаковых значений между первичным сервером и всеми репликами. Однако с учётом возможности превращения реплики в первичный сервер в любой момент, установка различных значений не имеет смысла; следовательно, Patroni ограничивает установку их значений в динамическую конфигурацию .

  • max_wal_senders: значение по умолчанию 10, минимальное значение 3
  • max_replication_slots: значение по умолчанию 10, минимальное значение 4
  • wal_keep_segments: значение по умолчанию 8, минимальное значение 1
  • wal_keep_size: значение по умолчанию 128MB, минимальное значение 16MB
  • wal_log_hints: включено

Эти параметры проверяются на корректность или соответствие минимальному значению.

Существуют и другие параметры Postgres, контролируемые Patroni:

  • listen_addresses — устанавливается либо из переменной среды postgresql.listen, либо из переменной среды PATRONI_POSTGRESQL_LISTEN
  • port — устанавливается либо из переменной среды postgresql.listen, либо из переменной среды PATRONI_POSTGRESQL_LISTEN
  • cluster_name — устанавливается либо из переменной среды scope, либо из переменной среды PATRONI_SCOPE
  • hot_standby: on

Для обеспечения безопасности параметры из приведённых выше списков записываются в postgresql.conf и передаются в виде списка аргументов в postgres, что придаёт им наибольший приоритет (за исключением wal_keep_segments и wal_keep_size), даже выше, чем у ALTER SYSTEM

Существуют также некоторые параметры, такие как postgresql.listen, postgresql.data_dir, которые можно задать только локально, i.e. в файле конфигурации Patroni config или с помощью переменной окружения configuration . В большинстве случаев локальная конфигурация переопределяет динамическую конфигурацию.

При применении параметров локальной или динамической конфигурации выполняются следующие действия:

  • Узел сначала проверяет наличие файла postgresql.base.conf или установку параметра custom_conf.
  • Если параметр custom_conf установлен, файл, который он указывает, используется в качестве базовой конфигурации, при этом игнорируются postgresql.base.conf и postgresql.conf.
  • Если параметр custom_conf не установлен и существует postgresql.base.conf, то он содержит переименованную «исходную» конфигурацию и используется в качестве базовой конфигурации.
  • Если отсутствуют как custom_conf, так и postgresql.base.conf, исходная postgresql.conf переименовывается в postgresql.base.conf и используется в качестве базовой конфигурации.
  • Динамические параметры (за исключением перечисленных выше) записываются в postgresql.conf, а в postgresql.conf устанавливается включение базовой конфигурации (либо postgresql.base.conf, либо файл по пути custom_conf). Таким образом, можно применять новые параметры без повторного чтения файла конфигурации для проверки наличия включения.
  • Некоторые параметры, необходимые для управления кластером Patroni, переопределяются с помощью командной строки.
  • Если изменён параметр, требующий перезапуска (необходимо учитывать контекст в pg_settings и фактические значения этих параметров), на этом узле устанавливается флаг pending_restart. Этот флаг сбрасывается при любом перезапуске.

Параметры будут применены в следующем порядке (параметры времени выполнения имеют наивысший приоритет):

  1. загрузить параметры из файла postgresql.base.conf (или из файла custom_conf, если задано)
  2. загрузить параметры из файла postgresql.conf
  3. загрузить параметры из файла postgresql.auto.conf
  4. параметр времени выполнения с использованием -o --name=value

Это позволяет задавать конфигурацию для всех узлов (2), конфигурацию конкретного узла с использованием ALTER SYSTEM (3) и обеспечивает принудительное применение параметров, критически важных для работы Patroni (4), а также оставляет место для инструментов конфигурации, управляющих postgresql.conf напрямую без участия Patroni (1).

Параметры PostgreSQL, влияющие на общую память

PostgreSQL имеет некоторые параметры, определяющие размер общей памяти, используемой ими:

  • max_connections
  • max_prepared_transactions
  • max_locks_per_transaction
  • max_wal_senders
  • max_worker_processes

Изменение этих параметров требует перезапуска PostgreSQL для применения, и их структуры общей памяти не могут быть меньше на резервных серверах, чем на первичном сервере.

Как уже объяснялось ранее, Patroni ограничивает изменение их значений через динамическую конфигурацию , которая обычно состоит из:

  1. Применение изменений через patronictl_edit_config (или через конечную точку REST API /config)
  2. Перезапуск узлов через patronictl_restart (или через конечную точку REST API /restart)

Примечание: имейте в виду, что перезапуск узлов PostgreSQL следует выполнять с помощью команды patronictl_restart или через конечную точку REST API /restart. Попытка перезапуска PostgreSQL путём перезапуска демона Patroni, e.g. путём выполнения команды systemctl restart patroni, может привести к переключению при отказе в кластере, если перезапускается первичный сервер.

Однако, поскольку эти параметры управляют общей памятью, при перезапуске узлов следует проявлять дополнительную осторожность:

  • Если вы хотите увеличить значение одного из этих параметров:
  1. Сначала перезапустите все резервные серверы
  2. Затем перезапустите первичный сервер
  • Если вы хотите уменьшить значение одного из этих параметров:
  1. Перезапустите первичный сервер сначала
  2. Затем перезапустите все резервные серверы

Примечание: если вы попытаетесь перезапустить все узлы одновременно после уменьшения значения любого из этих параметров, Patroni проигнорирует изменение и перезапустит резервный сервер с исходным значением параметра, что потребует последующего повторного перезапуска резервных серверов. Patroni поступает так, чтобы предотвратить попадание резервного сервера в бесконечный цикл сбоев, поскольку PostgreSQL завершается с сообщением FATAL, если попытаться установить любой из этих параметров на значение ниже, чем то, что отображается в pg_controldata на узле резервного сервера. Иными словами, мы можем уменьшить значение параметра на резервном сервере только после того, как его pg_controldata будет синхронизировано с первичным сервером относительно этих изменений на первичном сервере.

Дополнительную информацию об этом можно найти в Обзоре администратора PostgreSQL .

Patroni параметры конфигурации

Также следующие параметры конфигурации Patroni могут быть изменены только динамически:

  • ttl: 30
  • loop_wait: 10
  • retry_timeout: 10
  • maximum_lag_on_failover: 1048576
  • max_timelines_history: 0
  • check_timeline: false
  • postgresql.use_slots: true

При изменении этих параметров Patroni прочитает соответствующий раздел конфигурации, хранящийся в DCS, и изменит их значения в режиме выполнения.

Узлы Patroni сохраняют состояние параметров DCS на диск при каждом изменении конфигурации в файл patroni.dynamic.json, расположенном в каталоге данных PostgreSQL. Восстановление этих параметров из дампа на диске разрешено только лидеру, если они полностью отсутствуют в DCS или являются недопустимыми.


Генерация и проверка конфигурации

Patroni предоставляет интерфейсы командной строки для генерации и проверки локальной конфигурации Patroni local configuration . С помощью исполняемого файла patroni вы можете:

  • Создайте образец локальной конфигурации Patroni;
  • Создайте файл конфигурации Patroni для локально запущенного экземпляра PostgreSQL (e.g в качестве подготовительного шага к интеграции с Patroni );
  • Проверьте заданный файл конфигурации Patroni.

Пример конфигурации Patroni

patroni --generate-sample-config [configfile]

Описание

Создайте образец файла конфигурации Patroni в формате yaml. Значения параметров задаются с помощью конфигурации Environment , в противном случае, если не заданы, используются значения по умолчанию в Patroni или #FIXME строка для значений, которые должны быть определены позже пользователем.

Некоторые значения по умолчанию определяются на основе локальной конфигурации:

  • postgresql.listen: IP-адрес, возвращаемый вызовом gethostname для хостнейма текущей машины и стандартного порта 5432.
  • postgresql.connect_address: IP-адрес, возвращаемый вызовом gethostname для хостнейма текущей машины и стандартного порта 5432.
  • postgresql.authentication.rewind: определяется только если версия PostgreSQL может быть определена из бинарного файла и версия составляет 11 или новее.
  • restapi.listen: IP-адрес, возвращаемый вызовом gethostname для хостнейма текущей машины и стандартного порта 8008.
  • restapi.connect_address: IP-адрес, возвращаемый вызовом gethostname для хостнейма текущей машины и стандартного порта 8008.

Параметры

configfile — полный путь к файлу конфигурации, используемому для хранения результата. Если не указан, результат отправляется в stdout.

Patroni конфигурация для работающего экземпляра

patroni --generate-config [--dsn DSN] [configfile]

Описание

Создайте конфигурацию Patroni в формате yaml для локально запущенного экземпляра PostgreSQL. Для соединения с PostgreSQL будет использоваться либо указанный DSN (он имеет приоритет), либо переменные окружения PostgreSQL. Если пароль не указан, его следует ввести по запросу.

Все не внутренние параметры GUC, определённые в исходном экземпляре PostgreSQL, независимо от того, были ли они установлены через файл конфигурации, через командную строку postmaster или через переменные среды, будут использованы в качестве источника для следующих параметров конфигурации Patroni:

  • scope: cluster_name GUC значение;
  • postgresql.listen: listen_addresses и port GUC значения;
  • postgresql.datadir: data_directory GUC значение;
  • postgresql.parameters: archive_command, restore_command, archive_cleanup_command, recovery_end_command, ssl_passphrase_command, hba_file, ident_file, config_file GUC значения;
  • bootstrap.dcs: все остальные собранные параметры GUC PostgreSQL.

Если параметр scope, postgresql.listen или postgresql.datadir не задан через GUC PostgreSQL, используется соответствующее значение конфигурации Environment .

Другие правила, применяемые для определения значений:

  • name: значение переменной среды PATRONI_NAME, если установлена, иначе имя хоста текущей машины.
  • postgresql.bin_dir: путь к бинарным файлам PostgreSQL, извлечённый из работающего экземпляра.
  • postgresql.connect_address: IP-адрес, возвращённый вызовом gethostname для имени хоста текущей машины, и порт, используемый для соединения с экземпляром, или значение port GUC.
  • postgresql.authentication.superuser: конфигурация, используемая для соединения с экземпляром;
  • postgresql.pg_hba: строки, извлечённые из hba_file исходного экземпляра.
  • postgresql.pg_ident: строки, извлечённые из ident_file исходного экземпляра.
  • restapi.listen: IP-адрес, возвращённый вызовом gethostname для имени хоста текущей машины, и стандартный порт 8008.
  • restapi.connect_address: IP-адрес, возвращённый вызовом gethostname для имени хоста текущей машины, и стандартный порт 8008.

Другие параметры, определённые с помощью Конфигурация среды , также включаются в конфигурацию.

Параметры

configfile
Полный путь к файлу конфигурации, используемому для хранения результата. Если не указан, результат отправляется в stdout.

dsn
Необязательная строка DSN для локального экземпляра PostgreSQL, из которого будут получены значения GUC.

Проверка конфигурации Patroni

patroni --validate-config [configfile] [--ignore-listen-port | -i]

Описание

Проверьте указанную конфигурацию Patroni и выведите сведения о неудавшихся проверках.

Параметры

configfile
Полный путь к файлу конфигурации для проверки. Если не указан или файл отсутствует, будет попытка прочитать из переменной среды PATRONI_CONFIG_VARIABLE, или, если она не установлена, из переменных среды Patroni .

--ignore-listen-port | -i
Необязательный флаг для игнорирования ошибок привязки к портам listen, которые уже заняты при проверке configfile.

--print | -p
Необязательный флаг для вывода локальной конфигурации (включая переопределения конфигурации из переменных среды) после её успешной валидации.

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

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


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

  • 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: имя кластера


Журнал

  • type: задаёт формат логов. Может быть либо plain, либо json. Для использования формата json необходимо установить jsonlogger . Значение по умолчанию — plain.
  • level: устанавливает общий уровень ведения журнала. Значение по умолчанию — INFO (см. документацию по ведению журнала в Python )
  • traceback_level: задаёт уровень, на котором будут видны трассировки. Значение по умолчанию — ERROR. Установите значение DEBUG, если хотите видеть трассировки только при включённом log.level=DEBUG.
  • format: задаёт строку форматирования журнала. Если тип журнала — plain, формат журнала должен быть строкой. См. атрибуты LogRecord для получения списка доступных атрибутов. Если тип журнала — json, формат журнала может быть списком в дополнение к строке. Каждый элемент списка должен соответствовать атрибуту LogRecord. Будьте осторожны: требуется только имя поля, а обрамляющие символы %( и ) опускаются. Если необходимо вывести поле журнала с другим именем ключа, используйте словарь, где ключ словаря — это поле журнала, а значение — имя поля, которое должно быть выведено в журнале. Значение по умолчанию: %(asctime)s %(levelname)s: %(message)s
  • dateformat: устанавливает строку форматирования даты и времени. (см. документацию 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.
Предупреждение

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

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

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


Конфигурация начальной инициализации

Примечание

После того как Patroni впервые прошла начальную инициализацию кластера и настройки были сохранены в DCS, все последующие изменения в разделе bootstrap.dcs конфигурации YAML не будут иметь никакого эффекта! Чтобы изменить их, используйте либо patronictl_edit_config , либо REST API Patroni REST API .

  • начальная инициализация:
    • dcs: Этот раздел будет записан в /<namespace>/<scope>/config хранилища конфигурации после начальной инициализации нового кластера. Глобальная динамическая конфигурация кластера. Вы можете разместить любые из параметров, описанных в разделе Динамическая конфигурация , под ключом bootstrap.dcs, и после того, как Patroni завершит инициализацию (bootstrap) нового кластера, он запишет этот раздел в /<namespace>/<scope>/config хранилища конфигурации.

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

      См. документацию по пользовательским методам начальной инициализации для получения подробной информации. При указании initdb возвращается к команде по умолчанию initdb. initdb также запускается, если в файле конфигурации отсутствует параметр method.

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

      • - data-checksums: Должен быть включён при необходимости pg_rewind на 9.3.
      • - encoding: UTF8: кодировка по умолчанию для новых баз данных.
      • - locale: UTF8: язык по умолчанию для новых баз данных.
    • post_bootstrap или post_init: Дополнительный скрипт, который будет выполнен после начальной инициализации кластера. Скрипт получает строку соединения URL (с именем суперпользователя кластера в качестве имени пользователя). Переменная PGPASSFILE устанавливается в расположение файла pgpass.


Citus

Включает интеграцию Patroni с Citus . При настройке Patroni будет отвечать за регистрацию узлов-работников Citus на координаторе. Дополнительную информацию о поддержке Citus можно найти здесь .

  • group: идентификатор группы Citus, целое число. Используйте 0 для координатора и 1, 2 и т.д. для воркеров
  • database: база данных, в которой должен быть создан расширение citus . Должна быть одинаковой на координаторе и всех воркерах. В настоящее время поддерживается только одна база данных.


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 )
  • 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 .

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

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

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

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

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

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


ZooKeeper

  • hosts: Список участников кластера ZooKeeper в формате: ′host1:port1′,′host2:port2′,′etc...′'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 — значение. По умолчанию — пустой словарь.
Примечание

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


Выставщик

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


Kubernetes

  • bypass_api_service: (необязательно) При взаимодействии с Kubernetes API Patroni обычно полагается на сервис 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.


Raft (устаревший)

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

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

  • partner_addrs: список других узлов Patroni в кластере в формате:

    ′ip1:port′,′ip2:port′,′etc...′'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.

Примечание

Эти параметры тайм-аута полезны в сетях с высокой задержкой, где значения тайм-аутов по умолчанию для 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). При таком подходе можно временно потерять один узел, не затронув первичный сервер.


PostgreSQL

  • postgresql:
    • authentication:

      • superuser:
        • username: имя суперпользователя, задаётся при инициализации (initdb) и позже используется Patroni для подключения к postgres.
        • password: пароль для суперпользователя, устанавливается во время инициализации (initdb).
        • sslmode: (необязательно) соответствует параметру соединения sslmode , позволяющему клиенту указать тип режима согласования TLS с сервером. Дополнительную информацию о работе каждого режима см. в документации PostgreSQL . Режим по умолчанию — prefer.
        • sslkey: (необязательно) соответствует параметру соединения sslkey , который указывает расположение секретного ключа, используемого с сертификатом клиента.
        • sslpassword: (необязательно) соответствует параметру соединения sslpassword , который указывает пароль для секретного ключа, указанного в sslkey.
        • sslcert: (необязательно) соответствует параметру соединения sslcert , который указывает расположение сертификата клиента.
        • sslrootcert: (необязательно) соответствует параметру соединения sslrootcert , который указывает расположение файла, содержащего один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
        • sslcrl: (необязательно) соответствует параметру соединения sslcrl , который указывает расположение файла, содержащего список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
        • sslcrldir: (необязательно) соответствует параметру соединения sslcrldir , который указывает расположение каталога, содержащего файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого содержится в этом списке.
        • sslnegotiation: (необязательно) соответствует параметру соединения sslnegotiation , управляющему процессом согласования SSL шифрования с сервером, если используется SSL.
        • gssencmode: (необязательно) соответствует параметру соединения gssencmode , определяющему, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
        • channel_binding: (необязательно) отображается на параметр соединения channel_binding , управляющий использованием клиентом привязки канала.
      • replication:
        • username: имя пользователя для репликации; пользователь будет создан во время инициализации. Реплики будут использовать этого пользователя для доступа к источнику репликации через потоковую репликацию
        • password: пароль репликации; пользователь будет создан во время инициализации.
        • sslmode: (необязательно) соответствует параметру соединения sslmode , позволяющему клиенту указать тип режима согласования TLS с сервером. Дополнительную информацию о работе каждого режима см. в документации PostgreSQL . Режим по умолчанию — prefer.
        • sslkey: (необязательно) соответствует параметру соединения sslkey , который указывает расположение секретного ключа, используемого с сертификатом клиента.
        • sslpassword: (необязательно) соответствует параметру соединения sslpassword , который указывает пароль для секретного ключа, указанного в sslkey.
        • sslcert: (необязательно) соответствует параметру соединения sslcert , который указывает расположение сертификата клиента.
        • sslrootcert: (необязательно) соответствует параметру соединения sslrootcert , который указывает расположение файла, содержащего один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
        • sslcrl: (необязательно) соответствует параметру соединения sslcrl , который указывает расположение файла, содержащего список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
        • sslcrldir: (необязательно) соответствует параметру соединения sslcrldir , который указывает расположение каталога, содержащего файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого содержится в этом списке.
        • sslnegotiation: (необязательно) соответствует параметру соединения sslnegotiation , управляющему процессом согласования SSL шифрования с сервером, если используется SSL.
        • gssencmode: (необязательно) соответствует параметру соединения gssencmode , определяющему, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
        • channel_binding: (необязательно) отображается на параметр соединения channel_binding , управляющий использованием клиентом привязки канала.
      • rewind:
        • username: (необязательно) имя пользователя для pg_rewind; пользователь будет создан при инициализации postgres 11+ и будут выданы все необходимые разрешения .
        • password: (необязательно) пароль для пользователя для pg_rewind; пользователь будет создан при инициализации.
        • sslmode: (необязательно) соответствует параметру соединения sslmode , позволяющему клиенту указать тип режима согласования TLS с сервером. Дополнительную информацию о работе каждого режима см. в документации PostgreSQL . Режим по умолчанию — prefer.
        • sslkey: (необязательно) соответствует параметру соединения sslkey , который указывает расположение секретного ключа, используемого с сертификатом клиента.
        • sslpassword: (необязательно) соответствует параметру соединения sslpassword , который указывает пароль для секретного ключа, указанного в sslkey.
        • sslcert: (необязательно) соответствует параметру соединения sslcert , который указывает расположение сертификата клиента.
        • sslrootcert: (необязательно) соответствует параметру соединения sslrootcert , который указывает расположение файла, содержащего один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
        • sslcrl: (необязательно) соответствует параметру соединения sslcrl , который указывает расположение файла, содержащего список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
        • sslcrldir: (необязательно) соответствует параметру соединения sslcrldir , который указывает расположение каталога, содержащего файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого содержится в этом списке.
        • sslnegotiation: (необязательно) соответствует параметру соединения sslnegotiation , управляющему процессом согласования SSL шифрования с сервером, если используется SSL.
        • gssencmode: (необязательно) соответствует параметру соединения gssencmode , определяющему, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
        • channel_binding: (необязательно) отображается на параметр соединения 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” используется по умолчанию; другие методы предполагают указание скриптов, каждый из которых настраивается как отдельный элемент конфигурации. Дополнительные сведения см. в документации по настраиваемым методам создания реплик .

    • data_dir: Расположение каталога данных PostgreSQL, либо существующего , либо подлежащего инициализации 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 . Patroni создаёт этот файл перед выполнением pg_basebackup, скрипта post_init, а также при некоторых других обстоятельствах. Расположение должно быть доступно для записи Patroni.

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

    • custom_conf : путь к необязательному файлу postgresql.conf, который будет использован вместо postgresql.base.conf. Файл должен существовать на всех узлах кластера, быть доступным для чтения PostgreSQL и будет включён из его расположения в реальном postgresql.conf. Обратите внимание, что Patroni не будет отслеживать изменения в этом файле, ни резервировать его. Однако его настройки всё ещё могут быть переопределены средствами конфигурации Patroni — см. динамическая конфигурация для подробностей.

    • 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 установлен в непо умолчанию значение. Вместе с динамической конфигурацией этот параметр упрощает управление 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 установлен в непо умолчанию значение. Вместе с динамической конфигурацией этот параметр упрощает управление 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. Пример использования:

      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. В отличие от обратного вызова, этот скрипт выполняется синхронно, блокируя завершение работы до завершения его выполнения. Код возврата этого скрипта не влияет на возможность продолжения завершения работы.


REST API

  • restapi:
    • thread_pool_size: размер пула потоков, используемого Patroni для обработки запросов REST API. Минимальное значение — 5, значение по умолчанию — 5.
    • connect_address: IP-адрес (или имя хоста) и порт для доступа к REST API Patroni 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:

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'

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

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


CTL

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

Сторожевой таймер

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


Теги

  • 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 установлено в on. Узлы с более высоким приоритетом предпочтительнее, чем узлы с более низким приоритетом. Если sync_priority равен 0 или отрицательно — такой узел не может быть записан в параметр PostgreSQL synchronous_standby_names (аналогично nosync: true). Имейте в виду, что это параметр имеет противоположное значение по сравнению со значением sync_priority, отображаемым в представлении pg_stat_replication.
  • nofailover: true или false, управляет тем, может ли данный узел участвовать в выборе лидера и стать лидером. Значение по умолчанию — false, что означает, что данный узел может участвовать в выборе лидера.
  • failover_priority: целое число, определяет приоритет данного узла при переключении при отказе. Узлы с более высоким приоритетом предпочтительнее, чем узлы с более низким приоритетом, если они получили/воспроизвели одинаковое количество WAL. Однако узлы с более высокими значениями receive/replay LSN предпочтительнее независимо от их приоритета. Если failover_priority равен 0 или отрицательно — такой узел не может участвовать в выборе лидера и не может стать лидером (аналогично nofailover: true). Известен ограничение: failover_priority в настоящее время не работает с кворумной синхронной репликацией .
  • nostream: true или false. Если установлено значение true, узел не будет использовать протокол репликации для потоковой передачи WAL. Вместо этого он будет полагаться на восстановление из архива (если настроено restore_command) и опрос pg_wal/pg_xlog. Также отключается копирование и синхронизация постоянных слотов репликации на самом узле и всех его каскадных реплик. Установка этого тега на первичном сервере не оказывает эффекта.
Предупреждение

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

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

  • key1: true
  • key2: false
  • key3: 1.4
  • key4: "RandomString"

Метки видны в REST API и patronictl_list . Также можно проверить состояние экземпляра с помощью этих меток. Если метка не определена для экземпляра или значение не соответствует запрашиваемому, будет возвращён код состояния HTTP 503.

2 - Настройки динамической конфигурации

Настройки динамической конфигурации, хранящиеся в DCS, применяются ко всему кластеру.

Динамическая конфигурация хранится в DCS (распределённое хранилище конфигурации) и применяется ко всем узлам кластера.

Чтобы изменить динамическую конфигурацию, можно использовать либо инструмент patronictl_edit_config , либо Patroni REST API .

  • loop_wait: количество секунд, в течение которых цикл будет спать. Значение по умолчанию: 10, минимально возможное значение: 1
  • ttl: TTL для получения блокировки лидера (в секундах). Представьте это как продолжительность времени до начала процесса автоматического переключения при отказе. Значение по умолчанию: 30, минимально возможное значение: 20
  • retry_timeout: тайм-аут повторных попыток операций DCS и PostgreSQL (в секундах). DCS или сетевые проблемы, короче этого времени, не приведут к демотированию лидера. Значение по умолчанию: 10, минимально возможное значение: 3
Предупреждение

при изменении значений loop_wait, retry_timeout или ttl необходимо соблюдать следующее правило:

loop_wait + 2 * retry_timeout <= ttl
  • maximum_lag_on_failover: максимальное количество байт, на которое последовательный узел может отставать, чтобы участвовать в выборах лидера.
  • primary_race_backoff: откладывает выбор лидера на резервных серверах на primary_race_backoff секунд, если репликация WAL с первичного сервера всё ещё продвигается. Это позволяет свести к минимуму ненужные переключения при отказе, вызванные кратковременной недоступностью Patroni. Значение по умолчанию: 0 (отключено).
  • maximum_lag_on_syncnode: максимальное количество байт, на которое синхронная реплика может отставать, прежде чем она будет считаться нездоровым кандидатом на замену здоровой асинхронной репликой. Patroni использует максимальный LSN реплики, если имеется более одной реплики, в противном случае используется текущий LSN лидера WAL. Значение по умолчанию — -1; при установке значения 0 или ниже Patroni не будет предпринимать действия по замене синхронной нездоровой реплики. Установите значение достаточно высоким, чтобы Patroni не заменял синхронную реплику слишком часто при высокой нагрузке на транзакции.
  • max_timelines_history: максимальное количество элементов истории временной шкалы, сохраняемых в DCS. Значение по умолчанию: 0. При установке в 0 история сохраняется полностью в DCS.
  • primary_start_timeout: количество времени, в течение которого первичный сервер может восстановиться после сбоев, прежде чем будет запущено переключение при отказе (в секундах). Значение по умолчанию — 300 секунд. При установке значения 0 переключение при отказе выполняется немедленно после обнаружения сбоя, если это возможно. При асинхронной репликации переключение при отказе может привести к потере транзакций. Максимальное время переключения при отказе первичного сервера: loop_wait + primary_start_timeout + loop_wait, если primary_start_timeout не равно нулю; в противном случае — loop_wait. Установите значение с учётом баланса между надёжностью и доступностью.
  • primary_stop_timeout: Количество секунд, в течение которых Patroni может ждать остановку Postgres, действует только при включённом synchronous_mode. При значении > 0 и включённом synchronous_mode Patroni отправляет SIGKILL постмейстеру, если операция остановки выполняется дольше значения, установленного в primary_stop_timeout. Установите значение с учётом компромисса между надёжностью и доступностью. Если параметр не задан или установлен <= 0, primary_stop_timeout не применяется.
  • synchronous_mode: включает режим синхронной репликации. Допустимые значения: off, on, quorum. В этом режиме лидер отвечает за управление synchronous_standby_names, и в выборе лидера могут участвовать только последний известный лидер или одна из синхронных реплик. Режим синхронной репликации гарантирует, что успешно завершённые транзакции не будут потеряны при переключении при отказе, ценой потери доступности для записи, когда Patroni не может обеспечить неотказоустойчивость транзакций. Подробности см. в документации по режимам репликации .
  • synchronous_mode_strict: запрещает отключение синхронной репликации при отсутствии синхронных реплик, блокируя все операции записи клиента на первичном сервере. При установке этого параметра и отсутствии доступной реплики, которая ведёт потоковую передачу, Patroni сохраняет synchronous_standby_names, указывающий на последний известный синхронный узел из ключа /sync DCS, либо использует внутренний заполнитель __patroni_strict_sync_replica_placeholder__, если до этого не существовало состояния синхронизации. Узел name в patroni.yaml не должен быть установлен в __patroni_strict_sync_replica_placeholder__. Подробности см. в документации по режимам репликации .
  • synchronous_node_count: если включена опция synchronous_mode , этот параметр используется Patroni для управления точным количеством синхронных реплик и корректировки состояния в DCS и параметра synchronous_standby_names в PostgreSQL при подключении и отключении участников. Если значение параметра превышает количество допустимых узлов, оно будет автоматически скорректировано. Значение по умолчанию — 1.
  • failsafe_mode: включает отказоустойчивый режим DCS . По умолчанию — false.
  • postgresql:
    • use_pg_rewind: использовать ли pg_rewind. Значение по умолчанию — false. Обратите внимание, что кластер должен быть инициализирован с использованием data page checksums (опция --data-checksums для initdb) и/или должно быть установлено значение wal_log_hints, равное on, иначе pg_rewind не будет работать.
    • use_slots: использовать ли слоты репликации. По умолчанию true при PostgreSQL 9.4+.
    • recovery_conf: дополнительные параметры конфигурации, записываемые в recovery.conf при настройке последователя. В PostgreSQL 12 больше нет recovery.conf, однако вы можете продолжать использовать этот раздел, поскольку Patroni обрабатывает его прозрачно.
    • parameters: параметры конфигурации (GUC) для Postgres в формате {max_connections: 100, wal_level: "replica", max_wal_senders: 10, wal_log_hints: "on"}. Многие из них необходимы для работы репликации.
    • parameters_primary: (необязательно) переопределения параметров, специфичных для роли, для первичного сервера. Эти значения объединяются с базовыми parameters и переопределяют их.
    • parameters_replica: (необязательно) переопределения параметров, специфичных для роли реплики. Эти значения объединяются с базовыми parameters и переопределяют их.
    • parameters_standby_leader: (необязательно) переопределения параметров, специфичных для роли, для standby_leader. Эти значения объединяются с базовыми parameters и переопределяют их.
    • pg_hba: список строк, которые Patroni будет использовать для генерации pg_hba.conf. Patroni игнорирует этот параметр, если параметр PostgreSQL hba_file установлен в непо умолчанию значение.
      • - 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 установлен в непо умолчанию значение.
      • - 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.
  • standby_cluster: если этот раздел определён, необходимо выполнить начальную инициализацию резервного сервера кластера.
    • host: адрес удалённого узла
    • port: порт удалённого узла
    • primary_slot_name: указывает, какой slot на удаленном узле использовать для репликации. Этот параметр необязателен, значение по умолчанию извлекается из имени экземпляра (см. функцию slot_name_from_member_name).
    • create_replica_methods: упорядоченный список методов, которые могут быть использованы для начальной инициализации резервного сервера из удалённого первичного сервера, может отличаться от списка, определённого в postgresql_settings
    • restore_command: команда для восстановления записей WAL с удалённого первичного сервера на узлы резервного кластера, может отличаться от списка, определённого в postgresql_settings
    • archive_cleanup_command: команда очистки для резервного сервера-лидера
    • recovery_min_apply_delay: время ожидания перед фактическим применением записей WAL на резервном сервере, который является лидером
  • member_slots_ttl: время удержания физических слотов репликации для реплик при их остановке. Значение по умолчанию: 30min. Установите значение 0, если хотите сохранить прежнее поведение (когда ключ участника истекает в DCS, слот удаляется немедленно). Данная функция работает только начиная с PostgreSQL 11.
  • slots: определяет постоянные слоты репликации. Эти слоты сохраняются при плановом переключении/переключении при отказе. Постоянные слоты, которые отсутствуют, будут созданы Patroni. Начиная с PostgreSQL 11 постоянные физические слоты создаются на всех узлах, и их позиция обновляется каждые loop_wait секунд. Для версий PostgreSQL, более старых, чем 11, постоянные физические слоты репликации поддерживаются только на текущем первичном сервере. Логические слоты копируются с первичного сервера на резервный сервер при перезапуске, после чего их позиция обновляется каждые loop_wait секунд (при необходимости). Копирование файлов логических слотов выполняется через соединение libpq с использованием либо параметров rewind, либо суперпользователя (см. раздел postgresql.authentication). Всегда существует вероятность, что позиция логического слота на реплике немного отстает от бывшего первичного сервера, поэтому приложение должно быть готово к тому, что некоторые сообщения могут быть получены повторно после переключения при отказе. Самый простой способ решения — отслеживание confirmed_flush_lsn. Включение постоянных слотов репликации требует установки postgresql.use_slots в значение true. Если определены постоянные логические слоты репликации, Patroni автоматически включает hot_standby_feedback. Поскольку переключение при отказе логических слотов репликации является небезопасным в PostgreSQL 9.6 и более старых версиях, а версия PostgreSQL 10 отсутствует некоторые важные функции, эта функция работает только с PostgreSQL 11 и новее.
    • my_slot_name: имя постоянного слота репликации. Если имя постоянного слота совпадает с именем текущего узла, он не будет создан на этом узле. Если добавить постоянный физический слот репликации, имя которого совпадает с именем участника Patroni, Patroni обеспечит сохранение этого слота даже в случае, когда соответствующий участник станет недоступным, что в обычных условиях привело бы к удалению слота Patroni. Хотя это может быть полезно в некоторых ситуациях, например, при необходимости сохранения слотов репликации участников во время временных сбоев или при импорте существующих участников в новый кластер Patroni (см. Преобразование автономного узла в кластер Patroni для подробностей), оператору следует проявлять осторожность, чтобы избежать сохранения таких конфликтов имён в DCS, когда слот больше не требуется, поскольку это может повлиять на нормальную работу Patroni.
      • type: тип слота. Может быть physical или logical. Если слот логический, необходимо дополнительно задать database и plugin. Если слот физический, можно необязательно задать cluster_type.
      • database: имя базы данных, в которой должны быть созданы логические слоты.
      • plugin: имя плагина для логического слота.
      • cluster_type: тип кластера (primary или standby), на котором должен быть создан слот, иначе слот не будет создан или будет удалён уже существующий слот.
  • ignore_slots: список наборов свойств слота репликации, для которых Patroni должен игнорировать совпадающие слоты. Эта конфигурация/функция полезна в тех случаях, когда некоторые слоты репликации управляются вне Patroni. Любое подмножество совпадающих свойств приведёт к игнорированию слота.
    • name: имя слота репликации.
    • type: тип слота. Может быть physical или logical. Если слот логический, можно дополнительно задать database и/или plugin.
    • database: имя базы данных (при совпадении с slot logical).
    • plugin: плагин логического декодирования (при совпадении с slot logical).

Примечание: slots — это хешмапа, а ignore_slots — массив. Например:

slots:
  permanent_logical_slot_name:
    type: logical
    database: my_db
    plugin: test_decoding
  permanent_physical_slot_name:
    type: physical
  ...
ignore_slots:
  - name: ignored_logical_slot_name
    type: logical
    database: my_db
    plugin: test_decoding
  - name: ignored_physical_slot_name
    type: physical
  ...

Примечание: при работе с PostgreSQL версии 11 или новее Patroni поддерживает физические слоты репликации на всех узлах, которые потенциально могут стать лидером, чтобы реплики сохраняли зарезервированными WAL сегментов, если они потребуются другим узлам. В случае, если узел отсутствует и его ключ участника в DCS истек, соответствующий слот репликации удаляется после member_slots_ttl (значение по умолчанию 30min). Вы можете увеличить или уменьшить срок хранения в зависимости от своих потребностей. Альтернативно, если топология кластера статична (фиксированное количество узлов, имена которых никогда не меняются), можно настроить постоянные физические слоты репликации с именами, соответствующими именам узлов, чтобы избежать удаления слотов и повторного использования файлов WAL при временной недоступности реплики:

slots:
  node_name1:
    type: physical
  node_name2:
    type: physical
  node_name3:
    type: physical
  ...
Предупреждение

Постоянные слоты репликации синхронизируются только от primary/standby_leader к репликам. Это означает, что приложения должны использовать их только на лидере. Использование их на репликах приведёт к неограниченному росту pg_wal на всех остальных узлах кластера. Исключением из этого правила являются физические слоты, соответствующие именам участников Patroni (создаваемые и поддерживаемые Patroni). Они синхронизируются между всеми узлами, поскольку используются для репликации между ними.

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

Установка тега nostream на резервном сервере отключает копирование и синхронизацию постоянных слотов репликации на самом узле и на всех его каскадных репликах, если таковые имеются.

3 - Настройки конфигурации среды

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

Возможно переопределить некоторые параметры конфигурации, определённые в файле конфигурации Patroni, с помощью переменных среды системы. В данном документе перечислены все переменные среды, обрабатываемые Patroni. Значения, установленные с помощью этих переменных, всегда имеют приоритет перед значениями, заданными в файле конфигурации Patroni.


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

  • PATRONI_CONFIGURATION: конфигурацию Patroni целиком можно задать с помощью переменной среды PATRONI_CONFIGURATION . В этом случае никакие другие переменные среды не будут учитываться!
  • PATRONI_THREAD_POOL_SIZE: размер пула потоков, используемый Patroni для выполнения асинхронных задач и обмена данными по REST API с другими участниками во время выбора лидера или проверок в аварийном режиме. Минимальное значение — 5, значение по умолчанию — 5.
  • PATRONI_THREAD_STACK_SIZE: указывает размер стека, используемый для потоков, запускаемых Patroni. Значение должно быть выровнено по 64kB. Минимальное значение — 64kB, значение по умолчанию (устанавливается Patroni) — 512kB.
  • PATRONI_NAME: имя узла, на котором выполняется текущая инстанция Patroni. Должно быть уникальным для кластера. Значение __patroni_strict_sync_replica_placeholder__ зарезервировано для внутреннего использования Patroni и не может использоваться в качестве имени узла.
  • PATRONI_NAMESPACE: путь в хранилище конфигурации, где Patroni будет хранить информацию о кластере. Значение по умолчанию: “/service”
  • PATRONI_SCOPE: имя кластера
  • PG_MALLOC_ARENA_MAX: пользовательское значение переменной среды MALLOC_ARENA_MAX для процесса postmaster. Если не задано, postmaster унаследует значение MALLOC_ARENA_MAX.

Журнал

  • PATRONI_LOG_TYPE: задаёт формат логов. Может быть либо plain, либо json. Для использования формата json необходимо установить jsonlogger . Значение по умолчанию — plain.
  • PATRONI_LOG_LEVEL: задаёт уровень ведения журнала. Значение по умолчанию — INFO (см. документацию по ведению журнала в Python )
  • PATRONI_LOG_TRACEBACK_LEVEL: задаёт уровень, на котором будут видны трассировки. Значение по умолчанию — ERROR. Установите значение DEBUG, если хотите видеть трассировки только при включении PATRONI_LOG_LEVEL=DEBUG.
  • PATRONI_LOG_FORMAT: задаёт строку форматирования журнала. Если тип журнала — plain, формат журнала должен быть строкой. См. атрибуты LogRecord для получения списка доступных атрибутов. Если тип журнала — json, формат журнала может быть списком, помимо строки. Каждый элемент списка должен соответствовать атрибуту LogRecord. Будьте осторожны: требуется только имя поля, а символы %( и ) опускаются. Если необходимо вывести поле журнала с другим именем ключа, используйте словарь, где ключ словаря — это поле журнала, а значение — имя поля, которое должно быть выведено в журнале. Значение по умолчанию: %(asctime)s %(levelname)s: %(message)s
  • PATRONI_LOG_DATEFORMAT: задаёт строку форматирования даты и времени. (см. документацию formatTime() )
  • PATRONI_LOG_STATIC_FIELDS: добавить дополнительные поля в лог. Этот параметр доступен только при установке типа лога в json. Пример PATRONI_LOG_STATIC_FIELDS="{app: patroni}"
  • PATRONI_LOG_MAX_QUEUE_SIZE: Patroni использует двухэтапное ведение журнала. Записи журнала записываются в очереди в оперативной памяти, а отдельный поток извлекает их из очереди и записывает в stderr или файл. Максимальный размер внутренней очереди по умолчанию ограничен 1000 записями, что достаточно для хранения журналов за последние 1 час 20 минут.
  • PATRONI_LOG_DIR: Каталог для записи журналов приложения. Каталог должен существовать и быть доступен для записи пользователем, запускающим Patroni. Если задан этот параметр среды, приложение по умолчанию сохраняет журналы 4 25MB. Значения хранения можно настроить с помощью PATRONI_LOG_FILE_NUM и PATRONI_LOG_FILE_SIZE (см. ниже).
  • PATRONI_LOG_MODE: Разрешения для файлов журнала (например, 0644). Если не указано, разрешения будут установлены на основе текущего значения umask.
  • PATRONI_LOG_FILE_NUM: Количество журналов приложений, которые необходимо сохранить.
  • PATRONI_LOG_FILE_SIZE: Размер файла patroni.log (в байтах), при достижении которого происходит смена лог-файла.
  • PATRONI_LOG_LOGGERS: Переопределение уровня ведения журнала для каждого модуля Python. Пример PATRONI_LOG_LOGGERS="{patroni.postmaster: WARNING, urllib3: DEBUG}"
  • PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS: Если установлено в true, последовательные журналы heartbeat, одинаковые по содержанию, не будут выводиться. Значение по умолчанию — false.
Предупреждение

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


Citus

Включает интеграцию Patroni с Citus . При настройке Patroni будет отвечать за регистрацию узлов-работников Citus на координаторе. Дополнительную информацию о поддержке Citus можно найти здесь .

  • PATRONI_CITUS_GROUP: идентификатор группы Citus, целое число. Используйте 0 для координатора и 1, 2 и т.д. для воркеров
  • PATRONI_CITUS_DATABASE: база данных, в которой должен быть создан расширение citus . Должен быть одинаковым на координаторе и всех воркерах. В настоящее время поддерживается только одна база данных.

Consul

  • PATRONI_CONSUL_HOST: хост:порт для локального агента Consul.
  • PATRONI_CONSUL_URL: URL для локального агента Consul в формате: http(s)://host:port
  • PATRONI_CONSUL_PORT: (необязательно) порт Consul
  • PATRONI_CONSUL_SCHEME: (необязательно) http или https, значение по умолчанию — http
  • PATRONI_CONSUL_TOKEN: (необязательно) токен ACL
  • PATRONI_CONSUL_VERIFY: (необязательно) проверять ли сертификат SSL для запросов HTTPS
  • PATRONI_CONSUL_CACERT: (необязательно) Сертификат CA. При наличии включает проверку подлинности.
  • PATRONI_CONSUL_CERT: (необязательно) Файл с клиентским сертификатом
  • PATRONI_CONSUL_KEY: (необязательно) Файл с ключом клиента. Может быть пустым, если ключ входит в сертификат.
  • PATRONI_CONSUL_DC: (необязательно) Центр обработки данных для связи. По умолчанию используется центр обработки данных хоста.
  • PATRONI_CONSUL_CONSISTENCY: (необязательно) выберите режим согласованности Consul. Допустимые значения: default, consistent или stale (подробнее в справочнике API Consul )
  • PATRONI_CONSUL_CHECKS: (необязательно) список проверок состояния Consul, используемых для сессии. По умолчанию используется пустой список.
  • PATRONI_CONSUL_REGISTER_SERVICE: (необязательно) указывает, следует ли регистрировать службу с именем, определённым параметром scope, и тегом master, primary, replica или standby-leader в зависимости от роли узла. По умолчанию — false
  • PATRONI_CONSUL_SERVICE_TAGS: (необязательно) дополнительные статические теги, добавляемые к сервису Consul помимо роли (primary/replica/standby-leader). По умолчанию используется пустой список.
  • PATRONI_CONSUL_SERVICE_CHECK_INTERVAL: (необязательно) как часто выполнять проверку состояния для зарегистрированного URL
  • PATRONI_CONSUL_SERVICE_CHECK_TLS_SERVER_NAME: (необязательно) переопределить хост SNI при подключении через TLS, см. также справочник проверки агента Consul API .

Etcd

  • PATRONI_ETCD_PROXY: URL прокси для etcd. Если вы подключаетесь к etcd через прокси, используйте этот параметр вместо PATRONI_ETCD_URL
  • PATRONI_ETCD_URL: URL для etcd в формате: http(s)://(username:password@)хост:порт
  • PATRONI_ETCD_HOSTS: список конечных точек etcd в формате ‘хост1:порт1’,‘хост2:порт2’, и т.д.
  • PATRONI_ETCD_USE_PROXIES: Если этот параметр установлен в значение true, Patroni будет считать hosts списком прокси-серверов и не будет выполнять обнаружение топологии кластера etcd, а будет использовать фиксированный список hosts.
  • PATRONI_ETCD_PROTOCOL: http или https, если не указано — используется http. Если указан url или proxy — протокол берётся из них.
  • PATRONI_ETCD_HOST: хост:порт для конечной точки etcd.
  • PATRONI_ETCD_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.
  • PATRONI_ETCD_SRV_SUFFIX: Настраивает суффикс к имени SRV, который запрашивается при обнаружении. Используйте этот флаг для различия между несколькими кластерами etcd в рамках одного домена. Работает только в сочетании с PATRONI_ETCD_SRV. Например, если установлены PATRONI_ETCD_SRV_SUFFIX=foo и PATRONI_ETCD_SRV=example.org, выполняется следующий запрос DNS SRV:_etcd-client-ssl-foo._tcp.example.com (и так далее для каждого возможного имени службы ETCD SRV).
  • PATRONI_ETCD_USERNAME: имя пользователя для аутентификации в etcd.
  • PATRONI_ETCD_PASSWORD: пароль для аутентификации в etcd.
  • PATRONI_ETCD_CACERT: Сертификат CA. При его наличии будет включена проверка.
  • PATRONI_ETCD_CERT: Файл сертификата клиента.
  • PATRONI_ETCD_KEY: Файл с ключом клиента. Может быть пустым, если ключ входит в сертификат.

Etcdv3

Имена переменных окружения для Etcdv3 аналогичны именам для etcd, вам нужно просто использовать ETCD3 вместо ETCD в имени переменной. Пример: PATRONI_ETCD3_HOST, PATRONI_ETCD3_CACERT и так далее.

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

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


ZooKeeper

  • PATRONI_ZOOKEEPER_HOSTS: Список участников кластера ZooKeeper, разделённый запятыми: “‘host1:port1’,‘host2:port2’,’etc…’”. Важно заключать каждый элемент в кавычки!
  • PATRONI_ZOOKEEPER_USE_SSL: (необязательно) Указывает, используется ли SSL. Значение по умолчанию — false. Если установлено в false, все параметры, специфичные для SSL, игнорируются.
  • PATRONI_ZOOKEEPER_CACERT: (необязательно) Сертификат ЦС. При наличии включает проверку подлинности.
  • PATRONI_ZOOKEEPER_CERT: (необязательно) Файл с клиентским сертификатом.
  • PATRONI_ZOOKEEPER_KEY: (необязательно) Файл с ключом клиента.
  • PATRONI_ZOOKEEPER_KEY_PASSWORD: (необязательно) Пароль ключа клиента.
  • PATRONI_ZOOKEEPER_VERIFY: (необязательно) Проверять сертификат или нет. Значение по умолчанию — true.
  • PATRONI_ZOOKEEPER_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]}.
  • PATRONI_ZOOKEEPER_AUTH_DATA: (необязательно) Учетные данные аутентификации для использования при соединении. Должно быть словарем в формате, где scheme — ключ, а credential — значение. По умолчанию — пустой словарь.
Примечание

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


Выставщик

  • PATRONI_EXHIBITOR_HOSTS: начальный список узлов Exhibitor (ZooKeeper) в формате: ‘host1,host2,etc…’. Этот список обновляется автоматически при изменении топологии кластера Exhibitor (ZooKeeper).
  • PATRONI_EXHIBITOR_PORT: Порт выставки.


Kubernetes

  • PATRONI_KUBERNETES_BYPASS_API_SERVICE: (необязательно) При взаимодействии с Kubernetes API Patroni обычно полагается на сервис kubernetes , адрес которого доступен в подах через переменную KUBERNETES_SERVICE_HOST. Если установлено значение PATRONI_KUBERNETES_BYPASS_API_SERVICE, равное true, Patroni будет разрешать список API узлов за сервисом и подключаться к ним напрямую.
  • PATRONI_KUBERNETES_NAMESPACE: (необязательно) пространство имён Kubernetes, в котором выполняется под Patroni. Значение по умолчанию — default.
  • PATRONI_KUBERNETES_LABELS: Метки в формате {label1: value1, label2: value2}. Эти метки будут использоваться для поиска существующих объектов (Pod’ов и либо Endpoints, либо ConfigMaps), связанных с текущим кластером. Также Patroni будет устанавливать их на каждый объект (Endpoint или ConfigMap), который создаёт.
  • PATRONI_KUBERNETES_SCOPE_LABEL: (необязательно) имя метки, содержащей имя кластера. Значение по умолчанию — cluster-name.
  • PATRONI_KUBERNETES_BOOTSTRAP_LABELS: (необязательно) Метки в формате {label1: value1, label2: value2}. Эти метки будут присвоены поду Patroni, когда его состояние будет initializing new cluster, running custom bootstrap script, starting after custom bootstrap или creating replica.
  • PATRONI_KUBERNETES_ROLE_LABEL: (необязательно) имя метки, содержащей роль (primary, replica или другое пользовательское значение). Patroni установит эту метку в поде, в котором выполняется. Значение по умолчанию — role.
  • PATRONI_KUBERNETES_LEADER_LABEL_VALUE: (необязательно) значение метки пода при роли Postgres primary. Значение по умолчанию — primary.
  • PATRONI_KUBERNETES_FOLLOWER_LABEL_VALUE: (необязательно) значение метки пода при роли Postgres replica. Значение по умолчанию — replica.
  • PATRONI_KUBERNETES_STANDBY_LEADER_LABEL_VALUE: (необязательно) значение метки пода при роли Postgres standby_leader. Значение по умолчанию — primary.
  • PATRONI_KUBERNETES_TMP_ROLE_LABEL: (необязательно) имя временной метки, содержащей роль (primary или replica). Значение этой метки всегда будет использовать значение по умолчанию, соответствующее роли. Устанавливать только при необходимости.
  • PATRONI_KUBERNETES_USE_ENDPOINTS: (необязательно) если установлено в true, Patroni будет использовать Endpoints вместо ConfigMaps для проведения выборов лидера и хранения состояния кластера.
  • PATRONI_KUBERNETES_POD_IP: (необязательно) IP-адрес пода, в котором запущен Patroni. Это значение необходимо, когда включён PATRONI_KUBERNETES_USE_ENDPOINTS, и используется для заполнения подмножеств конечной точки лидера при повышении пода PostgreSQL до роли лидера.
  • PATRONI_KUBERNETES_PORTS: (необязательно) если у объекта Service указано имя порта, то такое же имя должно присутствовать в объекте Endpoint, иначе сервис не будет работать. Например, если ваш сервис определён как {Kind: Service, spec: {ports: [{name: postgresql, port: 5432, targetPort: 5432}]}}, необходимо установить PATRONI_KUBERNETES_PORTS='[{"name": "postgresql", "port": 5432}]', и Patroni будет использовать его для обновления подмножеств лидера Endpoint. Этот параметр используется только в том случае, если установлено PATRONI_KUBERNETES_USE_ENDPOINTS.
  • PATRONI_KUBERNETES_CACERT: (необязательно) Указывает файл с CA_BUNDLE файлом сертификатов доверенных ЦС, используемых при проверке сертификатов Kubernetes API SSL. Если не указано, Patroni использует значение, предоставленное секретом ServiceAccount.
  • PATRONI_RETRIABLE_HTTP_CODES: (необязательно) список кодов состояния HTTP от K8s API, на которых следует повторять попытку. По умолчанию Patroni повторяет попытки при кодах 500, 503 и 504, либо если ответ K8s API содержит заголовок retry-after HTTP.

Raft (устаревший)

  • PATRONI_RAFT_SELF_ADDR: ip:port для прослушивания соединений Raft. self_addr должен быть доступен с других узлов кластера. Если не задан, узел не будет участвовать в согласовании.
  • PATRONI_RAFT_BIND_ADDR: (необязательно) ip:port для прослушивания соединений Raft. Если не указано, будет использован self_addr.
  • PATRONI_RAFT_PARTNER_ADDRS: список других узлов Patroni в кластере в формате "'ip1:port1','ip2:port2'". Важно заключать каждый элемент в кавычки!
  • PATRONI_RAFT_DATA_DIR: каталог для хранения журнала Raft и снимков. Если не указан, используется текущий рабочий каталог.
  • PATRONI_RAFT_PASSWORD: (необязательно) Шифрование трафика Raft с указанным паролем, требует модуля cryptography Python.
  • PATRONI_RAFT_MIN_TIMEOUT: (необязательно) минимальный тайм-аут выборов в секундах для базовой реализации Raft pysyncobj. Должен быть больше 3 * PATRONI_RAFT_APPEND_ENTRIES_PERIOD. Значение по умолчанию: 0.4.
  • PATRONI_RAFT_MAX_TIMEOUT: (необязательно) максимальный тайм-аут голосования в секундах для базовой реализации Raft pysyncobj. Должен быть больше, чем PATRONI_RAFT_MIN_TIMEOUT. Значение по умолчанию: 1.4.
  • PATRONI_RAFT_CONNECTION_TIMEOUT: (необязательно) время в секундах, по истечении которого соединение без полученных данных считается неработоспособным. Должно быть больше или равно PATRONI_RAFT_MAX_TIMEOUT. Значение по умолчанию: 3.5.
  • PATRONI_RAFT_APPEND_ENTRIES_PERIOD: (необязательно) интервал в секундах для отправки команд heartbeat. Должен быть меньше одной трети PATRONI_RAFT_MIN_TIMEOUT. Значение по умолчанию: 0.1.
  • PATRONI_RAFT_CONNECTION_RETRY_TIME: (необязательно) интервал в секундах между попытками повторного подключения к оффлайн-узлам. По умолчанию: 5.0.
  • PATRONI_RAFT_LEADER_FALLBACK_TIMEOUT: (необязательно) время в секундах, по истечении которого лидер, не получивший ответ от большинства, возвращается в состояние последователя. Должно быть больше, чем PATRONI_RAFT_APPEND_ENTRIES_PERIOD. Значение по умолчанию: 30.0.
Примечание

Patroni проверяет эти ограничения при запуске и откажется запускаться, если они нарушены. Эти значения нельзя изменить во время выполнения и требуют перезапуска. Подробности см. в настройках Raft , включая ограничение на высокую задержку.


PostgreSQL

  • PATRONI_POSTGRESQL_LISTEN: IP-адрес + порт, на которых слушает Postgres. Допускается указывать несколько адресов, разделённых запятыми, при условии, что компонент порта указывается после последнего адреса через двоеточие, i.e. listen: 127.0.0.1,127.0.0.2:5432. Patroni будет использовать первый адрес из этого списка для установления локальных соединений с узлом PostgreSQL.
  • PATRONI_POSTGRESQL_CONNECT_ADDRESS: IP-адрес + порт, через которые Postgres доступен из других узлов и приложений.
  • PATRONI_POSTGRESQL_PROXY_ADDRESS: IP-адрес + порт, через которые доступен пул соединений (e.g. PgBouncer), работающий рядом с Postgres. Значение записывается в ключ участник в DCS как proxy_url и может быть полезно для обнаружения сервисов.
  • PATRONI_POSTGRESQL_DATA_DIR: Расположение каталога данных PostgreSQL, существующего или подлежащего инициализации Patroni.
  • PATRONI_POSTGRESQL_CONFIG_DIR: Расположение каталога конфигурации PostgreSQL, по умолчанию — каталог данных. Должен быть доступен для записи Patroni.
  • PATRONI_POSTGRESQL_BIN_DIR: Путь к бинарным файлам PostgreSQL. (pg_ctl, initdb, pg_controldata, pg_basebackup, postgres, pg_isready, pg_rewind) Значение по умолчанию — пустая строка, что означает использование переменной среды PATH для поиска исполняемых файлов.
  • PATRONI_POSTGRESQL_BIN_PG_CTL: (необязательно) Пользовательское имя для бинарного файла pg_ctl.
  • PATRONI_POSTGRESQL_BIN_INITDB: (необязательно) Пользовательское имя для бинарного файла initdb.
  • PATRONI_POSTGRESQL_BIN_PG_CONTROLDATA: (необязательно) Пользовательское имя для бинарного файла pg_controldata.
  • PATRONI_POSTGRESQL_BIN_PG_BASEBACKUP: (необязательно) Пользовательское имя для бинарного файла pg_basebackup.
  • PATRONI_POSTGRESQL_BIN_POSTGRES: (необязательно) Пользовательское имя для бинарного файла postgres.
  • PATRONI_POSTGRESQL_BIN_IS_READY: (необязательно) Пользовательское имя для бинарного файла pg_isready.
  • PATRONI_POSTGRESQL_BIN_PG_REWIND: (необязательно) Пользовательское имя для бинарного файла pg_rewind.
  • PATRONI_POSTGRESQL_PGPASS: путь к файлу паролей .pgpass . Patroni создаёт этот файл перед выполнением pg_basebackup и при некоторых других обстоятельствах. Расположение должно быть доступно для записи Patroni.
  • PATRONI_REPLICATION_USERNAME: имя пользователя репликации; пользователь будет создан во время инициализации. Реплики будут использовать этого пользователя для доступа к источнику репликации через потоковую репликацию
  • PATRONI_REPLICATION_PASSWORD: пароль репликации; пользователь будет создан во время инициализации.
  • PATRONI_REPLICATION_SSLMODE: (необязательно) отображается на параметр соединения sslmode , позволяющий клиенту указать тип TLS режима согласования с сервером. Подробнее о том, как работает каждый режим, см. в документации PostgreSQL . Значение по умолчанию — prefer.
  • PATRONI_REPLICATION_SSLKEY: (необязательно) отображается на параметр соединения sslkey , который указывает расположение закрытого ключа, используемого с сертификатом клиента.
  • PATRONI_REPLICATION_SSLPASSWORD: (необязательно) отображается на параметр соединения sslpassword , который указывает пароль для секретного ключа, указанного в PATRONI_REPLICATION_SSLKEY.
  • PATRONI_REPLICATION_SSLCERT: (необязательно) отображается на параметр соединения sslcert , который указывает расположение сертификата клиента.
  • PATRONI_REPLICATION_SSLROOTCERT: (необязательно) отображается на параметр соединения sslrootcert , который указывает расположение файла, содержащего один или несколько сертификатов удостоверяющих центров (CA), которые клиент будет использовать для проверки сертификата сервера.
  • PATRONI_REPLICATION_SSLCRL: (необязательно) отображается на параметр соединения sslcrl , указывающий путь к файлу, содержащему список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
  • PATRONI_REPLICATION_SSLCRLDIR: (необязательно) отображается на параметр соединения sslcrldir , указывающий путь к каталогу, содержащему файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
  • PATRONI_REPLICATION_SSLNEGOTIATION: (необязательно) отображается на параметр соединения sslnegotiation , управляющий процессом согласования SSL шифрования с сервером, если используется SSL.
  • PATRONI_REPLICATION_GSSENCMODE: (необязательно) отображается на параметр соединения gssencmode , определяющий, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
  • PATRONI_REPLICATION_CHANNEL_BINDING: (необязательно) отображается на параметр соединения channel_binding , управляющий использованием клиентом привязки канала.
  • PATRONI_SUPERUSER_USERNAME: имя суперпользователя, задаётся во время инициализации (initdb) и затем используется Patroni для подключения к postgres. Также этот пользователь используется pg_rewind.
  • PATRONI_SUPERUSER_PASSWORD: пароль суперпользователя, устанавливаемый при инициализации (initdb).
  • PATRONI_SUPERUSER_SSLMODE: (необязательно) отображается на параметр соединения sslmode , позволяющий клиенту указать тип TLS режима согласования с сервером. Подробнее о том, как работает каждый режим, см. в документации PostgreSQL . Значение по умолчанию — prefer.
  • PATRONI_SUPERUSER_SSLKEY: (необязательно) отображается на параметр соединения sslkey , который указывает расположение закрытого ключа, используемого вместе с сертификатом клиента.
  • PATRONI_SUPERUSER_SSLPASSWORD: (необязательно) отображается на параметр соединения sslpassword , который указывает пароль для секретного ключа, указанного в PATRONI_SUPERUSER_SSLKEY.
  • PATRONI_SUPERUSER_SSLCERT: (необязательно) отображается на параметр соединения sslcert , который указывает расположение сертификата клиента.
  • PATRONI_SUPERUSER_SSLROOTCERT: (необязательно) отображается на параметр соединения sslrootcert , который указывает путь к файлу, содержащему один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
  • PATRONI_SUPERUSER_SSLCRL: (необязательно) отображается на параметр соединения sslcrl , который указывает расположение файла, содержащего список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
  • PATRONI_SUPERUSER_SSLCRLDIR: (необязательно) отображается на параметр соединения sslcrldir , указывающий путь к каталогу, содержащему файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
  • PATRONI_SUPERUSER_SSLNEGOTIATION: (необязательно) отображается на параметр соединения sslnegotiation , управляющий процессом согласования SSL шифрования с сервером, если используется SSL.
  • PATRONI_SUPERUSER_GSSENCMODE: (необязательно) отображается на параметр соединения gssencmode , определяющий, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
  • PATRONI_SUPERUSER_CHANNEL_BINDING: (необязательно) отображается на параметр соединения channel_binding , управляющий использованием клиентом привязки канала.
  • PATRONI_REWIND_USERNAME: (необязательно) имя пользователя для pg_rewind; пользователь будет создан при инициализации postgres 11+ и будут выданы все необходимые разрешения .
  • PATRONI_REWIND_PASSWORD: (необязательно) пароль для пользователя для pg_rewind; пользователь будет создан при инициализации.
  • PATRONI_REWIND_SSLMODE: (необязательно) отображается на параметр соединения sslmode , позволяющий клиенту указать тип TLS режима согласования с сервером. Подробнее о том, как работает каждый режим, см. в документации PostgreSQL . Значение по умолчанию — prefer.
  • PATRONI_REWIND_SSLKEY: (необязательно) отображается на параметр соединения sslkey , который указывает расположение закрытого ключа, используемого с сертификатом клиента.
  • PATRONI_REWIND_SSLPASSWORD: (необязательно) отображается на параметр соединения sslpassword , который указывает пароль для секретного ключа, указанного в PATRONI_REWIND_SSLKEY.
  • PATRONI_REWIND_SSLCERT: (необязательно) отображается на параметр соединения sslcert , который указывает расположение сертификата клиента.
  • PATRONI_REWIND_SSLROOTCERT: (необязательно) отображается на параметр соединения sslrootcert , который указывает расположение файла, содержащего один или несколько сертификатов центров сертификации (CA), которые клиент будет использовать для проверки сертификата сервера.
  • PATRONI_REWIND_SSLCRL: (необязательно) отображается на параметр соединения sslcrl , указывающий путь к файлу, содержащему список отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
  • PATRONI_REWIND_SSLCRLDIR: (необязательно) отображается на параметр соединения sslcrldir , который указывает расположение каталога, содержащего файлы со списками отозванных сертификатов. Клиент откажет в подключении к любому серверу, сертификат которого находится в этом списке.
  • PATRONI_REWIND_SSLNEGOTIATION: (необязательно) отображается на параметр соединения sslnegotiation , управляющий процессом согласования SSL шифрования с сервером, если используется SSL.
  • PATRONI_REWIND_GSSENCMODE: (необязательно) отображается на параметр соединения gssencmode , определяющий, будет ли устанавливаться защищённое соединение GSS TCP/IP с сервером, и с какой приоритетностью
  • PATRONI_REWIND_CHANNEL_BINDING: (необязательно) отображается на параметр соединения channel_binding , управляющий использованием клиентом привязки канала.

REST API

  • PATRONI_RESTAPI_THREAD_POOL_SIZE: размер пула потоков, используемого Patroni для обработки запросов REST API. Минимальное значение — 5, значение по умолчанию — 5.
  • PATRONI_RESTAPI_CONNECT_ADDRESS: IP-адрес и порт для доступа к REST API.
  • PATRONI_RESTAPI_LISTEN: IP-адрес и порт, на которых Patroni будет слушать, чтобы предоставлять информацию о состоянии для HAProxy.
  • PATRONI_RESTAPI_USERNAME: имя пользователя для аутентификации по базовой схеме для защиты небезопасных конечных точек REST API.
  • PATRONI_RESTAPI_PASSWORD: Пароль аутентификации по базе для защиты небезопасных конечных точек REST API.
  • PATRONI_RESTAPI_CERTFILE: Указывает файл сертификата в формате PEM. Если параметр certfile не указан или оставлен пустым, сервер API будет работать без SSL.
  • PATRONI_RESTAPI_KEYFILE: Указывает файл с секретным ключом в формате PEM.
  • PATRONI_RESTAPI_KEYFILE_PASSWORD: Указывает пароль для расшифровки ключевого файла.
  • PATRONI_RESTAPI_CAFILE: Указывает файл с CA_BUNDLE, содержащий сертификаты доверенных ЦС, используемые при проверке сертификатов клиентов.
  • PATRONI_RESTAPI_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”)
  • PATRONI_RESTAPI_VERIFY_CLIENT: none (по умолчанию), optional или required. При none REST API проверка сертификатов клиентов не выполняется. При required для всех вызовов REST API требуется сертификат клиента. При optional для всех небезопасных конечных точек REST API требуется сертификат клиента. При required аутентификация клиента считается успешной, если проверка подписи сертификата прошла успешно. Для optional сертификат клиента проверяется только для запросов PUT, POST, PATCH и DELETE.
  • PATRONI_RESTAPI_ALLOWLIST: (необязательно): указывает набор хостов, которые могут вызывать небезопасные конечные точки REST API. Единственный элемент может быть именем хоста, IP-адресом или сетевым адресом в нотации CIDR. По умолчанию используется allow all. Если установлены allowlist или allowlist_include_members, то всё, что не включено, отклоняется.
  • PATRONI_RESTAPI_ALLOWLIST_INCLUDE_MEMBERS: (необязательно): если установлено в true, позволяет получать доступ к небезопасным конечным точкам REST API с других участников кластера, зарегистрированных в DCS (IP-адрес или имя хоста берётся из участников api_url). Будьте осторожны, возможна ситуация, при которой ОС может использовать другой IP-адрес для исходящих соединений.
  • PATRONI_RESTAPI_HTTP_EXTRA_HEADERS: (необязательно) заголовки HTTP позволяют серверу REST API передавать дополнительную информацию в ответе HTTP.
  • PATRONI_RESTAPI_HTTPS_EXTRA_HEADERS: (необязательно) заголовки HTTPS позволяют серверу REST API передавать дополнительную информацию в ответе HTTP при включённом TLS. Это также передаст дополнительную информацию, установленную в http_extra_headers.
  • PATRONI_RESTAPI_REQUEST_QUEUE_SIZE: (необязательно): устанавливает размер очереди запросов для сокета TCP, используемого Patroni REST API. Как только очередь заполнена, последующие запросы получают ошибку «Соединение запрещено». Значение по умолчанию — 5.
  • PATRONI_RESTAPI_SERVER_TOKENS: (необязательно) Настраивает значение заголовка Server HTTP. Original (по умолчанию) сохраняет исходное поведение и отображает версии BaseHTTP и Python, e.g. BaseHTTP/0.6 Python/3.12.3. Minimal: заголовок будет содержать только версию Patroni, e.g. Patroni/4.0.0. ProductOnly: заголовок будет содержать только имя продукта, e.g. Patroni.

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

  • PATRONI_RESTAPI_CONNECT_ADDRESS должен быть доступен со всех узлов заданного кластера Patroni. Внутри Patroni он используется во время выбора лидера для определения узлов с минимальной задержкой репликации.
  • Если включена проверка сертификатов клиентов (значение PATRONI_RESTAPI_VERIFY_CLIENT установлено в required), также обязательно предоставить действительные сертификаты клиентов в PATRONI_CTL_CERTFILE, PATRONI_CTL_KEYFILE, PATRONI_CTL_KEYFILE_PASSWORD. Если они не предоставлены, Patroni будет работать некорректно.

CTL

  • PATRONICTL_CONFIG_FILE: (необязательно) расположение файла конфигурации.
  • PATRONI_CTL_USERNAME: (необязательно) Имя пользователя для аутентификации по базовой схеме при доступе к защищённым конечным точкам REST API. Если не указано, patronictl будет использовать значение, указанное для параметра “username” REST API.
  • PATRONI_CTL_PASSWORD: (необязательно) Пароль для аутентификации по методу Basic-auth при доступе к защищённым конечным точкам REST API. Если не указан, patronictl будет использовать значение, указанное для параметра “password” REST API.
  • PATRONI_CTL_INSECURE: (необязательно) Разрешить соединения с REST API без проверки сертификатов SSL.
  • PATRONI_CTL_CACERT: (необязательно) Указывает файл с CA_BUNDLE файлом или каталогом сертификатов доверенных ЦС, используемых при проверке REST API SSL сертификатов. Если не указано, patronictl будет использовать значение, заданное для параметра REST API “cafile”.
  • PATRONI_CTL_CERTFILE: (необязательно) Указывает файл сертификата клиента в формате PEM.
  • PATRONI_CTL_KEYFILE: (необязательно) Указывает файл с секретным ключом клиента в формате PEM.
  • PATRONI_CTL_KEYFILE_PASSWORD: (необязательно) Указывает пароль для расшифровки ключевого файла клиента.