Перейти к основному содержимому

Настройки конфигурации YAML

примечание

Эта страница переведена при помощи нейросети GigaChat.

Глобальные/универсальные

  • name – имя хоста. Должно быть уникальным для кластера.
  • namespace – путь внутри хранилища конфигурации, где Patroni будет хранить информацию о кластере. Значение по умолчанию: /service.
  • scope – имя кластера.

Журнал

  • level – задает общий уровень ведения журнала. Значение по умолчанию - INFO (см. документацию для регистрации Python)

  • traceback_level – устанавливает уровень, на котором будут видны трассировки. Значение по умолчанию - ERROR. Установите значение DEBUG, чтобы трассировки отображались только при активном уровне логирования log.level=DEBUG.

  • format – задает строку форматирования журнала. Значение по умолчанию - %(asctime)s %(levelname)s: %(message)s (см. атрибуты записи журнала)

  • dateformat – задает строку форматирования даты и времени. (см. документацию по formatTime())

  • max_queue_size – Patroni использует двухэтапную регистрацию. Записи журналов записываются во внутреннюю память очереди, и существует отдельный поток, который извлекает их из очереди и записывает в stderr или файл. Максимальный размер внутренней очереди ограничен по умолчанию значением 1000 записей, что достаточно для хранения журналов за последние 1 час 20 минут.

  • dir – каталог для записи журналов приложений. Каталог должен существовать и быть доступным для записи пользователем, выполняющим Patroni. Если установить это значение, приложение будет сохранять по умолчанию 4 журнала размером 25 МБ каждый. Можно настроить эти значения сохранения с помощью file_num и file_size (см. ниже).

  • file_num – количество журналов приложений, которые необходимо сохранить.

  • file_size – размер файла patroni.log (в байтах), который вызывает сворачивание журнала.

  • loggers – этот раздел позволяет переопределить уровень регистрации для каждого модуля Python.

    • patroni.postmaster: WARNING.
    • urllib3: DEBUG.

Конфигурация загрузки

примечание

После того как Patroni впервые инициализировал кластер и настройки были сохранены в DCS, все будущие изменения в разделе bootstrap.dcs файла конфигурации YAML не будут иметь никакого эффекта! Если необходимо изменить их, используйте либо patronictl edit-config, либо REST API Patroni.

  • bootstrap:

    • DCS – этот раздел будет записан в /<пространство имен>/<область действия>/конфигурацию указанного хранилища конфигураций после инициализации нового кластера. Глобальная динамическая конфигурация для кластера. Можно поместить любой из параметров, описанных в разделе Настройки динамической конфигурации под bootstrap.dcs, и после инициализации (загрузки) нового кластера Patroni запишет этот раздел в /<пространство имен>/<область действия>/конфигурацию хранилища конфигураций.

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

Consul

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

  • host – host:port для локального агента Consul.
  • url – URL для локального агента Consul, в формате: http(s)://host:port.
  • port – (необязательно) порт Consul.
  • scheme – (необязательно) http или https, по умолчанию http.
  • token – (необязательно) токен ACL.
  • verify – (необязательно) проверять ли сертификат SSL для запросов HTTPS.
  • cacert – (необязательно) сертификат центра сертификации. Если он присутствует, то будет включена проверка подлинности.
  • cert – (необязательно) файл с сертификатом клиента.
  • key – (необязательно) файл с ключом клиента. Может быть пустым, если ключ является частью сертификата.
  • dc – (необязательно) центр обработки данных для связи. По умолчанию используется центр обработки данных хоста.
  • consistency – (необязательно) выберите режим согласованности консул. Возможные значения - default, consistent, или stale (более подробную информацию см. в справке по API консул).
  • checks – (необязательно) список проверок состояния Consul, используемых для сеанса. По умолчанию используется пустой список.
  • register_service – (необязательно) регистрировать ли службу с именем, определенным параметром области действия и меткой мастер, первичный, реплика или резервный лидер в зависимости от роли узла. Значение по умолчанию - ложь.
  • service_tags – (необязательно) дополнительные статические теги для добавления к службе Consul помимо роли (master/primary/replica/standby-leader). По умолчанию используется пустой список.
  • service_check_interval – (необязательно) как часто выполнять проверку работоспособности по зарегистрированному URL. По умолчанию '5с'.
  • service_check_tls_server_name – (необязательно) переопределить хост SNI при подключении через TLS, см. также консульская проверка агента 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 получены, то используется протокол ETCD peer для запроса 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 – (необязательно) сертификат центра сертификации. Если он присутствует, это позволит выполнить проверку подлинности.
  • cert – (необязательно) файл с сертификатом клиента.
  • key – (необязательно) файл с ключом клиента. Может быть пустым, если ключ является частью cert.

Etcdv3

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

примечание

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

ZooKeeper

  • hosts – список членов кластера ZooKeeper в формате: ['host1:port1', 'host2:port2', 'и т.д.'].
  • use_ssl – (необязательно) используется ли SSL или нет. По умолчанию установлено значение false. Если установлено значение false, все параметры, специфичные для SSL, игнорируются.
  • cacert – (необязательно) сертификат центра сертификации. Если он присутствует, это позволит выполнить проверку подлинности.
  • cert – (необязательно) файл с сертификатом клиента.
  • key – (необязательно) файл с ключом клиента.
  • key_password – (необязательно) пароль ключа клиента.
  • verify – (необязательно) проверять сертификат или нет. По умолчанию установлено значение true.
  • set_acls – (необязательно) если установлено, настроить Kazoo для применения ACL по умолчанию к каждой ZNode, которую он создает. ACL будет предполагать схему 'x509' и должен быть указан в виде словаря с основным элементом в качестве ключа и одним или несколькими разрешениями в списке значений. Разрешения могут быть одним из CREATE, READ, WRITE, DELETE или ADMIN. Например, set_acls: {CN=principal1: [CREATE, READ], CN=principal2: [ALL]}.
примечание

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

Exhibitor

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

Kubernetes

  • bypass_api_service – (необязательно) при общении с API Kubernetes Patroni обычно полагается на службу Kubernetes, адрес которой раскрывается в подах через переменную окружения KUBERNETES_SERVICE_HOST. Если обход_сервиса_api установлен на true, Patroni разрешит список узлов API за службой и подключится к ним напрямую.
  • namespace – (необязательно) пространство имен Kubernetes, где работает под Patroni. Значение по умолчанию - по умолчанию.
  • labels – метки в формате {label1: value1, label2: value2}. Эти метки будут использоваться для поиска существующих объектов (подов и либо конечных точек, либо конфигурационных карт), связанных с текущим кластером. Кроме того, Patroni установит их на каждом объекте (конечной точке или конфигурационной карте), который он создает.
  • scope_label – (необязательно) имя метки, содержащей имя кластера. Значение по умолчанию - имя_кластера.
  • role_label – (необязательно) имя метки, содержащей роль (мастер или реплика или другое пользовательское значение). Patroni установит эту метку на поде, в котором он работает. Значение по умолчанию - role.
  • leader_label_value – (необязательно) значение метки пода при роли PostgreSQL master. Значение по умолчанию - master.
  • follower_label_value – (необязательно) значение метки пода при роли PostgreSQL replica. Значение по умолчанию - replica.
  • standby_leader_label_value – (необязательно) значение метки пода при роли PostgreSQL standby_leader. Значение по умолчанию - master.
  • tmp_role_label – (необязательно) имя временной метки, содержащей роль (мастер или реплика). Значение этой метки всегда будет использовать значение по умолчанию соответствующей роли. Устанавливается только при необходимости.
  • use_endpoints – (необязательно) если установлено значение "истина", Patroni будет использовать конечные точки вместо ConfigMaps для проведения выборов лидера и поддержания состояния кластера.
  • pod_ip – (необязательно) IP-адрес пода, в котором выполняется Patroni. Это значение требуется, когда использование_конечных_точек включено и используется для заполнения подмножеств конечной точки лидера при повышении уровня PostgreSQL пода.
  • ports – (необязательно) если объект службы имеет имя для порта, то же самое имя должно появиться в объекте конечной точки, иначе служба не будет работать. Например, если служба определена как {Kind: Service, spec: {ports: [{name: postgresql, port: 5432, targetPort: 5432}]}}, тогда необходимо установить kubernetes.ports: [{"name": "postgresql", "port": 5432}] и Patroni будет использовать его для обновления подмножеств конечной точки лидера. Этот параметр используется только в том случае, если kubernetes.use_endpoints установлен.
  • cacert – (необязательно) указывает файл с файлом CA_BUNDLE с сертификатами доверенных ЦС для использования при проверке сертификатов SSL API Kubernetes. Если не предоставлено, Patroni будет использовать значение, предоставленное секретом ServiceAccount.
  • retriable_http_codes – (необязательно) список кодов состояния HTTP из API K8s для повторной попытки. По умолчанию Patroni повторно пытается выполнить запросы 500, 503 и 504, или если ответ API K8s содержит заголовок retry-after.

Raft (устарело)

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

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

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

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

  • password – (необязательно) шифрование трафика Raft с использованием указанного пароля требует модуля cryptography.

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

    • Как перечислить все узлы, обеспечивающие консенсус?

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

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

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

    • Где взять утилиту syncobj_admin?

      Ответ: Она устанавливается вместе с модулем pysyncobj (реализация Python RAFT), от которой зависит Patroni.

    • Возможно ли запустить узел Patroni без добавления его в консенсус?

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

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

      Ответ: Да, на третьем узле можно запустить 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, который указывает местоположение файла, содержащего один или несколько сертификатов удостоверяющих центров (УЦ), которые клиент будет использовать для проверки сертификата сервера.
        • sslcrl – (необязательно) соответствует параметру соединения sslcrl, который указывает местоположение файла, содержащего список отозванных сертификатов. Клиент отклонит подключение к любому серверу, у которого есть сертификат, присутствующий в этом списке.
        • sslcrldir – (необязательно) соответствует параметру подключения sslcrldir, который указывает расположение каталога с файлами, содержащими список отозванных сертификатов. Клиент отклонит подключение к любому серверу, у которого есть сертификат, присутствующий в этом списке.
        • 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, который указывает расположение файла, содержащего один или несколько сертификатов удостоверяющих центров (УЦ), которые клиент будет использовать для проверки сертификата сервера.
        • sslcrl – (необязательно) соответствует параметру подключения sslcrl, который указывает расположение файла, содержащего список отозванных сертификатов. Клиент отклонит подключение к любому серверу, у которого есть сертификат, присутствующий в этом списке.
        • sslcrldir – (необязательно) соответствует параметру подключения sslcrldir, который указывает расположение каталога с файлами, содержащими список отозванных сертификатов. Клиент отклонит подключение к любому серверу, у которого есть сертификат, присутствующий в этом списке.
        • gssencmode – (необязательно) соответствует параметру подключения gssencmode, который определяет, будет ли и с каким приоритетом устанавливаться безопасное соединение GSS TCP/IP с сервером.
        • channel_binding – (необязательно) соответствует параметру подключения channel_binding, который контролирует использование клиентом привязки каналов.
      • rewind:

        • username – (необязательно) имя для пользователя для pg_rewind; пользователь будет создан во время инициализации PostgreSQL 11+ и все необходимые разрешения будут предоставлены.
        • password – (необязательно) пароль для пользователя для pg_rewind; пользователь будет создан во время инициализации.
        • sslmode – (необязательно) соответствует параметру соединения sslmode, который позволяет клиенту указать тип режима согласования TLS с сервером. Для получения дополнительной информации о том, как работает каждый режим, посетите документацию PostgreSQL. Режимом по умолчанию является prefer.
        • sslkey – (необязательно) соответствует параметру соединения sslkey, который указывает расположение секретного ключа, используемого с сертификатом клиента.
        • sslpassword – (необязательно) соответствует параметру соединения sslpassword, который задает пароль для секретного ключа, указанного в sslkey.
        • sslcert – (необязательно) соответствует параметру соединения sslcert, который указывает местоположение сертификата клиента.
        • sslrootcert – (необязательно) соответствует параметру соединения sslrootcert, который указывает местоположение файла, содержащего один или несколько сертификатов удостоверяющих центров (УЦ), которые клиент будет использовать для проверки сертификата сервера.
        • sslcrl – (необязательно) соответствует параметру соединения sslcrl, который указывает местоположение файла, содержащего список отозванных сертификатов. Клиент отклонит подключение к любому серверу, у которого есть сертификат, присутствующий в этом списке.
        • sslcrldir – (необязательно) соответствует параметру подключения sslcrldir, который указывает расположение каталога с файлами, содержащими список отозванных сертификатов. Клиент отклонит подключение к любому серверу, у которого есть сертификат, присутствующий в этом списке.
        • gssencmode – (необязательно) соответствует параметру подключения gssencmode, который определяет, будет ли установлена безопасная связь GSS TCP/IP с сервером и с каким приоритетом.
        • channel_binding – (необязательно) соответствует параметру подключения channel_binding, который контролирует использование клиентом привязки каналов.
    • callbacks – скрипты обратного вызова для выполнения при определенных действиях. Patroni передаст действие, роль и имя кластера. (См. scripts/aws.py в качестве примера того, как их писать.)

      • on_reload – выполнить этот сценарий, когда произойдет перезагрузка конфигурации.
      • on_restart – запустить этот скрипт, когда PostgreSQL перезапускается (без изменения роли).
      • on_role_change – запустить этот сценарий, когда PostgreSQL повышается или понижается в роли.
      • on_start – запустить этот сценарий при запуске PostgreSQL.
      • on_stop – выполнить этот сценарий при остановке PostgreSQL.
    • connect_address – IP-адрес + порт, через который Postgres доступен с других узлов и приложений.

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

    • create_replica_methods – упорядоченный список методов создания для преобразования узла Patroni в новую реплику. «basebackup» --- это метод по умолчанию; предполагается, что другие методы относятся к сценариям, каждый из которых настроен как отдельный элемент конфигурации. См. документацию о методах пользовательского создания реплик для получения дополнительных объяснений.

    • data_dir – расположение каталога данных PostgreSQL, либо существующий, либо инициализируемый Patroni.

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

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

    • bin_name – (необязательно) позволяет переопределить имена двоичных файлов PostgreSQL, если используется пользовательское распределение PostgreSQL:

      • 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-адрес и порт, к которому подключается Postgres; должен быть доступен с других узлов кластера, если используется потоковая репликация. Допускаются несколько адресов, разделенных запятыми, при условии, что компонент порта добавляется после последнего из них с двоеточием, например, listen: 127.0.0.1,127.0.0.2:5432. Patroni будет использовать первый адрес из этого списка для установления локальных соединений с узлом PostgreSQL.

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

    • use_unix_socket_repl – указывает, что Patroni следует предпочитать использование юникс-сокетов для подключения пользователя репликации к кластеру. Значение по умолчанию равно 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 – список настроек конфигурации для Postgres. Многие из них необходимы для работы репликации.

    • pg_hba – список строк, которые Patroni будет использовать для генерации pg_hba.conf. Patroni игнорирует этот параметр, если hba_file параметр PostgreSQL установлен на нестандартное значение. Вместе с динамической конфигурацией этот параметр упрощает управление pg_hba.conf.

      • - host all all 0.0.0.0/0 md5.
      • - host replication replicator 127.0.0.1/32 md5 – строка, подобная этой, требуется для репликации.
    • pg_ident – список строк, которые Patroni будет использовать для генерации pg_ident.conf. Patroni игнорирует этот параметр, если ident_file параметр PostgreSQL установлен на значение, отличное от значения по умолчанию. Вместе с динамической конфигурацией этот параметр упрощает управление pg_ident.conf.

      • - mapname1 systemname1 pguser1.
      • - mapname1 systemname2 pguser2.
    • pg_ctl_timeout – как долго pg_ctl должен ждать при выполнении start, stop или restart. Значение по умолчанию составляет 60 секунд.

    • use_pg_rewind – попытаться использовать pg_rewind на бывшем лидере, когда он присоединяется к кластеру в качестве реплики.

    • remove_data_directory_on_rewind_failure – если эта опция включена, Patroni удалит каталог данных PostgreSQL и воссоздаст реплику. В противном случае она попытается следовать за новым лидером. Значение по умолчанию - ложь.

    • remove_data_directory_on_diverged_timelines – Patroni удаляет каталог данных PostgreSQL и воссоздает реплику, если замечает расхождение временных шкал и бывшая основная система не может начать потоковую передачу с новой основной системы. Эта опция полезна, когда pg_rewind не может быть использован. Выполняя проверку расхождения временных шкал в PostgreSQL версии 10 и более ранних версиях, Patroni попытается подключиться с учетными данными репликации к базе данных "postgres". Следовательно, такой доступ должен быть разрешен в файле pg_hba.conf. Значение по умолчанию - ложь.

    • replica_method – для каждого метода создания реплик, отличного от базового резервного копирования, добавите раздел конфигурации с тем же именем. Как минимум, это должно включать «команду» с полным путем к фактическому сценарию, который будет выполнен. Другие параметры конфигурации будут переданы сценарию в форме «параметр=значение».

    • pre_promote – сценарий защиты от сбоев, который выполняется во время отказа после получения блокировки лидера, но до продвижения реплики. Если сценарий завершается ненулевым кодом, Patroni не продвигает реплику и удаляет ключ лидера из DCS.

    • before_stop – сценарий, который выполняется непосредственно перед остановкой postgres. В отличие от обратного вызова, этот сценарий выполняется синхронно, блокируя завершение работы до его завершения. Код возврата этого сценария не влияет на то, продолжается ли завершение работы после этого.

REST API

  • restapi:

    • connect_address – IP-адрес (или имя хоста) и порт для доступа к REST API Patroni. Все члены кластера должны иметь возможность подключаться к этому адресу, поэтому, если настройка Patroni предназначена не только для демонстрации внутри локального хоста, этот адрес должен быть отличным от адреса "localhost" или обратной петли (например: "localhost" или "127.0.0.1"). Он может служить конечной точкой для проверок работоспособности по HTTP (см. ниже о параметре "listen" в REST API), а также для пользовательских запросов (непосредственно или через REST API), а также для проверок работоспособности, выполняемых членами кластера во время выборов лидера (например, чтобы определить, все еще ли работает лидер, или есть ли узел, у которого позиция WAL опережает ту, которая выполняет запрос; и т.д.). Адрес подключения помещается в ключ члена в DCS, что позволяет преобразовать имя члена в адрес для подключения к его REST API.

    • listen – IP-адрес (или имя хоста) и порт, к которому Patroni будет прослушивать запросы для REST API - для предоставления той же информации о проверке работоспособности и обмена сообщениями между узлами кластера, как описано выше, для обеспечения информации о проверке работоспособности для HAProxy (или любого другого балансировщика нагрузки, способного выполнять проверку HTTP "OPTION" или "GET").

    • authentication – (необязательно)

      • username – имя пользователя для базовой аутентификации для защиты небезопасных конечных точек REST API.
      • password – пароль для базовой аутентификации для защиты небезопасных конечных точек REST API.
    • certfile – (необязательно): указывает файл с сертификатом в формате PEM. Если certfile не указан или оставлен пустым, сервер API будет работать без SSL.

    • keyfile – (необязательно): указывает файл с секретным ключом в формате PEM.

    • keyfile_password – (необязательно): указывает пароль для расшифровки keyfile.

    • cafile – (необязательно): указывает файл с пакетом CA_BUNDLE с сертификатами доверенных ЦС для использования при проверке клиентских сертификатов.

    • ciphers – (необязательно): указывает разрешенные наборы шифров (например, "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, используемого REST API Patroni. Как только очередь заполнится, дальнейшие запросы получат ошибку «Соединение отказано». Значение по умолчанию равно 5.

Вот пример использования обоих заголовков 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 – имя пользователя для базовой аутентификации при доступе к защищенным конечным точкам REST API. Если не предоставлено, patronictl будет использовать значение, предоставленное для параметра REST API username.
      • password – пароль для базовой аутентификации при доступе к защищенным конечным точкам REST API. Если не предоставлен, patronictl будет использовать значение, предоставленное для параметра REST API password.
    • insecure – разрешить соединения с REST API без проверки сертификатов SSL.

    • cacert – указывает файл с файлом CA_BUNDLE или каталогом с сертификатами доверенных ЦС, которые следует использовать при проверке сертификатов SSL REST API. Если не указано, patronictl будет использовать значение, указанное для параметра REST API cafile.

    • certfile – задает файл с клиентским сертификатом в формате PEM.

    • keyfile – определяет файл с секретным ключом клиента в формате PEM.

    • keyfile_password – указывает пароль для расшифровки клиентского файла ключа.

Watchdog

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

Теги

  • clonefromtrue или false. Если установлено значение true другие узлы могут предпочесть использовать этот узел для начальной загрузки (взять pg_basebackup из). Если есть несколько узлов с меткой clonefrom, установленной на true узел для начальной загрузки будет выбран случайным образом. Значение по умолчанию - false.
  • noloadbalancetrue или false. Если установлено значение true узел вернет код состояния HTTP 503 для проверки работоспособности GET /replica REST API и поэтому будет исключен из балансировки нагрузки. По умолчанию false.
  • replicatefrom – IP-адрес/имя хоста другой реплики. Используется для поддержки каскадной репликации.
  • nosynctrue или false. Если установлено значение true, узел никогда не будет выбран в качестве синхронной реплики.
  • nofailovertrue или false, контролирует, разрешено ли этому узлу участвовать в гонке лидеров и стать лидером. По умолчанию используется значение false, что означает, что этот узел _может_ участвовать в гонках за лидерство.
  • failover_priority – целое число, которое управляет приоритетом этого узла во время отказа. Узлы с более высоким приоритетом будут предпочтительнее узлов с низким приоритетом, если они получили/воспроизвели одинаковое количество WAL. Однако узлы с более высокими значениями получаемого/воспроизводимого LSN предпочтительны независимо от их приоритета. Если failover_priority равен 0 или отрицателен – такой узел не допускается к участию в гонке лидеров и не может стать лидером (аналогично nofailover: true).
примечание

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

В дополнение к этим предопределенным меткам можно добавить свои собственные:

  • key1true;
  • key2false;
  • key31.4;
  • key4"RandomString".

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