Настройки конфигурации 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
– (необязательно) значение метки пода при роли PostgreSQLmaster
. Значение по умолчанию -master
.follower_label_value
– (необязательно) значение метки пода при роли PostgreSQLreplica
. Значение по умолчанию -replica
.standby_leader_label_value
– (необязательно) значение метки пода при роли PostgreSQLstandby_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_addr
–ip: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 APIusername
.password
– пароль для базовой аутентификации при доступе к защищенным конечным точкам REST API. Если не предоставлен, patronictl будет использовать значение, предоставленное для параметра REST APIpassword
.
-
insecure
– разрешить соединения с REST API без проверки сертификатов SSL. -
cacert
– указывает файл с файлом CA_BUNDLE или каталогом с сертификатами доверенных ЦС, которые следует использовать при проверке сертификатов SSL REST API. Если не указано, patronictl будет использовать значение, указанное для параметра REST APIcafile
. -
certfile
– задает файл с клиентским сертификатом в формате PEM. -
keyfile
– определяет файл с секретным ключом клиента в формате PEM. -
keyfile_password
– указывает пароль для расшифровки клиентского файла ключа.
-
Watchdog
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
– IP-адрес/имя хоста другой реплики. Используется для поддержки каскадной репликации.nosync
–true
илиfalse
. Если установлено значениеtrue
, узел никогда не будет выбран в качестве синхронной реплики.nofailover
–true
илиfalse
, контролирует, разрешено ли этому узлу участвовать в гонке лидеров и стать лидером. По умолчанию используется значениеfalse
, что означает, что этот узел _может_ участвовать в гонках за лидерство.failover_priority
– целое число, которое управляет приоритетом этого узла во время отказа. Узлы с более высоким приоритетом будут предпочтительнее узлов с низким приоритетом, если они получили/воспроизвели одинаковое количество WAL. Однако узлы с более высокими значениями получаемого/воспроизводимого LSN предпочтительны независимо от их приоритета. Еслиfailover_priority
равен 0 или отрицателен – такой узел не допускается к участию в гонке лидеров и не может стать лидером (аналогичноnofailover: true
).
Укажите только один из параметров nofailover
или failover_priority
. Указание nofailover: true
аналогично указанию failover_priority: 0
, а указание nofailover: false
присвоит узлу приоритет 1.
В дополнение к этим предопределенным меткам можно добавить свои собственные:
key1
–true
;key2
–false
;key3
–1.4
;key4
–"RandomString"
.
Теги видны в REST API и списке patronictl. Можно проверить состояние экземпляра с помощью этих тегов. Если тег не определен для экземпляра или если соответствующее значение не совпадает со значением запроса, будет возвращен код состояния HTTP 503.