REST API Patroni
Эта страница переведена при помощи нейросети GigaChat.
Patroni имеет большой набор REST API, который используется самим Patroni в процессе выбора ведущего узла (лидера) инструментом patronictl для выполнения аварийных переподключений/переинициализации/перезапусков/перезагрузок. Балансировщики нагрузки, такие как HAProxy, используют этот API для выполнения проверок работоспособности по HTTP, а также для мониторинга.
Конечные точки состояния работоспособности
Для всех запросов проверки работоспособности метод GET
Patroni возвращает JSON-документ со статусом узла вместе с кодом состояния HTTP. Если получение JSON-документа не требуется, можно использовать методы HEAD
или OPTIONS
вместо GET
.
Следующие запросы к Patroni REST API будут возвращать код состояния HTTP 200
только тогда, когда узел Patroni работает в качестве основного с блокировкой лидера:
-
GET /
. -
GET /primary
. -
GET /read-write
. -
GET /standby-leader
: возвращает код состояния HTTP200
только тогда, когда узел Patroni работает в качестве лидера в кластере standby. -
GET /leader
: возвращает код состояния HTTP200
, когда у узла Patroni есть блокировка лидера. Основное отличие от двух предыдущих конечных точек заключается в том, что он не учитывает, работает ли PostgreSQL в качествеprimary
илиstandby_leader
. -
GET /replica
: конечная точка проверки состояния реплики. Метод возвращает код состояния HTTP200
только тогда, когда узел Patroni находится в состоянииrunning
, роль являетсяreplica
и тегnoloadbalance
не установлен. -
GET /replica?lag=<max-lag>
: конечная точка проверки реплики. В дополнение к проверкам изreplica
, он также проверяет задержку репликации и возвращает код состояния200
только тогда, когда она ниже указанного значения. Ключ кластера.last_leader_operation
из DCS используется для позиции Wal лидера и вычисления задержки на реплике по причинам производительности. Максимальная задержка может быть указана в байтах (целое число) или в читаемых человеком значениях, например 16 КБ, 64 МБ, 1 ГБ.GET /replica?lag=1048576
.GET /replica?lag=1024kB
.GET /replica?lag=10MB
.GET /replica?lag=1GB
.
-
GET /replica?tag_key1=value1&tag_key2=value2
: конечная точка проверки реплики. Метод также будет проверять пользовательские тегиkey1
иkey2
и их соответствующие значения в разделетеги
управления YAML-конфигурацией. Если метка не определена для экземпляра, или если значение в YAML-конфигурации не совпадает со значением запроса, то будет возвращен код состояния HTTP 503.
В следующих запросах, поскольку проверяется статус лидера или резервного лидера, Patroni не применяет ни один из заданных пользователем тегов, и они будут проигнорированы:
-
GET /?tag_key1=value1&tag_key2=value2
. -
GET /leader?tag_key1=value1&tag_key2=value2
. -
GET /primary?tag_key1=value1&tag_key2=value2
. -
GET /read-write?tag_key1=value1&tag_key2=value2
. -
GET /standby_leader?tag_key1=value1&tag_key2=value2
. -
GET /standby-leader?tag_key1=value1&tag_key2=value2
. -
GET /read-only
: аналогично приведенной выше конечной точке, но включает также первичную. -
GET /synchronous
илиGET /sync
: возвращает код состояния HTTP200
только тогда, когда узел Patroni работает в качестве синхронной резервной копии. -
GET /read-only-sync
: аналогично приведенной выше конечной точке, но включает также первичную. -
GET /asynchronous
илиGET /async
: возвращает код состояния HTTP200
только тогда, когда узел Patroni работает в качестве асинхронной резервной копии. -
GET /asynchronous?lag=<max-lag>
илиGET /async?lag=<max-lag>
: конечная точка асинхронной проверки готовности. В дополнение к проверкам изasynchronous
илиasync
, он также проверяет задержку репликации и возвращает код состояния200
только тогда, когда она ниже указанного значения. Ключ кластера.last_leader_operation
из DCS используется для позиции Wal лидера и вычисления задержки на реплике по причинам производительности. Max-lag может быть указан в байтах (целое число) или в значениях, удобных для чтения человеком, например 16 КБ, 64 МБ, 1 ГБ.GET /async?lag=1048576
GET /async?lag=1024kB
GET /async?lag=10MB
GET /async?lag=1GB
-
GET /health
: возвращает код статуса HTTP200
только тогда, когда PostgreSQL включен и работает. -
GET /liveness
: возвращает код статуса HTTP200
, если heartbeat loop Patroni работает должным образом, и503
, если последний запуск был более чемttl
секунд назад на основном сервере или2*ttl
на реплике. Может использоваться дляlivenessProbe
. -
GET /readiness
: возвращает код статуса HTTP200
при работе узла Patroni в качестве лидера или при включении и работе PostgreSQL. Эта конечная точка может использоваться дляreadinessProbe
в случаях, когда невозможно использовать конечные точки Kubernetes для выборов лидера (OpenShift).
Обе конечные точки, readiness
и liveness
, очень легкие и не выполняют никаких SQL-запросов. Зонды должны быть настроены таким образом, чтобы они начинали выходить из строя примерно в то время, когда истекает срок действия ключа лидера. Со значением по умолчанию ttl
, которое равно 30s
примерные зонды будут выглядеть так:
readinessProbe:
httpGet:
scheme: HTTP
path: /readiness
port: 8008
initialDelaySeconds: 3
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
livenessProbe:
httpGet:
scheme: HTTP
path: /liveness
port: 8008
initialDelaySeconds: 3
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
Конечная точка мониторинга
GET /patroni
используется Patroni во время процессе выбора ведущего узла (лидера). Он также может использоваться системой мониторинга. JSON-документ, созданный этой конечной точкой, имеет ту же структуру, что и JSON, создаваемый конечными точками проверки работоспособности.
Пример работоспособного кластера:
$ curl -s http://localhost:8008/patroni | jq .
{
"state": "running",
"postmaster_start_time": "2023-08-18 11:03:37.966359+00:00",
"role": "master",
"server_version": 150004,
"xlog": {
"location": 67395656
},
"timeline": 1,
"replication": [
{
"usename": "replicator",
"application_name": "patroni2",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
},
{
"usename": "replicator",
"application_name": "patroni3",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
}
],
"dcs_last_seen": 1692356718,
"tags": {
"clonefrom": true
},
"database_system_identifier": "7268616322854375442",
"patroni": {
"version": "3.1.0",
"scope": "demo",
"name": "patroni1"
}
}
Пример разблокированной кластерной группы:
$ curl -s http://localhost:8008/patroni | jq .
{
"state": "running",
"postmaster_start_time": "2023-08-18 11:09:08.615242+00:00",
"role": "replica",
"server_version": 150004,
"xlog": {
"received_location": 67419744,
"replayed_location": 67419744,
"replayed_timestamp": null,
"paused": false
},
"timeline": 1,
"replication": [
{
"usename": "replicator",
"application_name": "patroni2",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
},
{
"usename": "replicator",
"application_name": "patroni3",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
}
],
"cluster_unlocked": true,
"dcs_last_seen": 1692356928,
"tags": {
"clonefrom": true
},
"database_system_identifier": "7268616322854375442",
"patroni": {
"version": "3.1.0",
"scope": "demo",
"name": "patroni1"
}
}
Пример разблокированной кластерной группы с включенным режимом защиты от повреждения DCS:
$ curl -s http://localhost:8008/patroni | jq .
{
"state": "running",
"postmaster_start_time": "2023-08-18 11:09:08.615242+00:00",
"role": "replica",
"server_version": 150004,
"xlog": {
"location": 67420024
},
"timeline": 1,
"replication": [
{
"usename": "replicator",
"application_name": "patroni2",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
},
{
"usename": "replicator",
"application_name": "patroni3",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
}
],
"cluster_unlocked": true,
"failsafe_mode_is_active": true,
"dcs_last_seen": 1692356928,
"tags": {
"clonefrom": true
},
"database_system_identifier": "7268616322854375442",
"patroni": {
"version": "3.1.0",
"scope": "demo",
"name": "patroni1"
}
}
Пример кластерной группы с включенным режимом паузы:
$ curl -s http://localhost:8008/patroni | jq .
{
"state": "running",
"postmaster_start_time": "2023-08-18 11:09:08.615242+00:00",
"role": "replica",
"server_version": 150004,
"xlog": {
"location": 67420024
},
"timeline": 1,
"replication": [
{
"usename": "replicator",
"application_name": "patroni2",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
},
{
"usename": "replicator",
"application_name": "patroni3",
"client_addr": "{IP-Address}",
"state": "streaming",
"sync_state": "async",
"sync_priority": 0
}
],
"pause": true,
"dcs_last_seen": 1692356928,
"tags": {
"clonefrom": true
},
"database_system_identifier": "7268616322854375442",
"patroni": {
"version": "3.1.0",
"scope": "demo",
"name": "patroni1"
}
}
Извлеките показатели Patroni в формате Prometheus через конечную точку GET /metrics
:
$ curl http://localhost:8008/metrics
# HELP patroni_version Patroni semver without periods. \
# TYPE patroni_version gauge
patroni_version{scope="batman",name="patroni1"} 020103
# HELP patroni_postgres_running Value is 1 if Postgres is running, 0 otherwise.
# TYPE patroni_postgres_running gauge
patroni_postgres_running{scope="batman",name="patroni1"} 1
# HELP patroni_postmaster_start_time Epoch seconds since Postgres started.
# TYPE patroni_postmaster_start_time gauge
patroni_postmaster_start_time{scope="batman",name="patroni1"} 1657656955.179243
# HELP patroni_master Value is 1 if this node is the leader, 0 otherwise.
# TYPE patroni_master gauge
patroni_master{scope="batman",name="patroni1"} 1
# HELP patroni_primary Value is 1 if this node is the leader, 0 otherwise.
# TYPE patroni_primary gauge
patroni_primary{scope="batman",name="patroni1"} 1
# HELP patroni_xlog_location Current location of the Postgres transaction log, 0 if this node is not the leader.
# TYPE patroni_xlog_location counter
patroni_xlog_location{scope="batman",name="patroni1"} 22320573386952
# HELP patroni_standby_leader Value is 1 if this node is the standby_leader, 0 otherwise.
# TYPE patroni_standby_leader gauge
patroni_standby_leader{scope="batman",name="patroni1"} 0
# HELP patroni_replica Value is 1 if this node is a replica, 0 otherwise.
# TYPE patroni_replica gauge
patroni_replica{scope="batman",name="patroni1"} 0
# HELP patroni_sync_standby Value is 1 if this node is a sync standby replica, 0 otherwise.
# TYPE patroni_sync_standby gauge
patroni_sync_standby{scope="batman",name="patroni1"} 0
# HELP patroni_xlog_received_location Current location of the received Postgres transaction log, 0 if this node is not a replica.
# TYPE patroni_xlog_received_location counter
patroni_xlog_received_location{scope="batman",name="patroni1"} 0
# HELP patroni_xlog_replayed_location Current location of the replayed Postgres transaction log, 0 if this node is not a replica.
# TYPE patroni_xlog_replayed_location counter
patroni_xlog_replayed_location{scope="batman",name="patroni1"} 0
# HELP patroni_xlog_replayed_timestamp Current timestamp of the replayed Postgres transaction log, 0 if null.
# TYPE patroni_xlog_replayed_timestamp gauge
patroni_xlog_replayed_timestamp{scope="batman",name="patroni1"} 0
# HELP patroni_xlog_paused Value is 1 if the Postgres xlog is paused, 0 otherwise.
# TYPE patroni_xlog_paused gauge
patroni_xlog_paused{scope="batman",name="patroni1"} 0
# HELP patroni_postgres_streaming Value is 1 if Postgres is streaming, 0 otherwise.
# TYPE patroni_postgres_streaming gauge
patroni_postgres_streaming{scope="batman",name="patroni1"} 1
# HELP patroni_postgres_in_archive_recovery Value is 1 if Postgres is replicating from archive, 0 otherwise.
# TYPE patroni_postgres_in_archive_recovery gauge
patroni_postgres_in_archive_recovery{scope="batman",name="patroni1"} 0
# HELP patroni_postgres_server_version Version of Postgres (if running), 0 otherwise.
# TYPE patroni_postgres_server_version gauge
patroni_postgres_server_version{scope="batman",name="patroni1"} 140004
# HELP patroni_cluster_unlocked Value is 1 if the cluster is unlocked, 0 if locked.
# TYPE patroni_cluster_unlocked gauge
patroni_cluster_unlocked{scope="batman",name="patroni1"} 0
# HELP patroni_postgres_timeline Postgres timeline of this node (if running), 0 otherwise.
# TYPE patroni_postgres_timeline counter
patroni_failsafe_mode_is_active{scope="batman",name="patroni1"} 0
# HELP patroni_postgres_timeline Postgres timeline of this node (if running), 0 otherwise.
# TYPE patroni_postgres_timeline counter
patroni_postgres_timeline{scope="batman",name="patroni1"} 24
# HELP patroni_dcs_last_seen Epoch timestamp when DCS was last contacted successfully by Patroni.
# TYPE patroni_dcs_last_seen gauge
patroni_dcs_last_seen{scope="batman",name="patroni1"} 1677658321
# HELP patroni_pending_restart Value is 1 if the node needs a restart, 0 otherwise.
# TYPE patroni_pending_restart gauge
patroni_pending_restart{scope="batman",name="patroni1"} 1
# HELP patroni_is_paused Value is 1 if auto failover is disabled, 0 otherwise.
# TYPE patroni_is_paused gauge
patroni_is_paused{scope="batman",name="patroni1"} 1
Конечные точки статуса кластера
Конечная точка GET /cluster
генерирует JSON-документ, описывающий текущую топологию и состояние кластера:
$ curl -s http://localhost:8008/cluster | jq .
{
"members": [
{
"name": "patroni1",
"role": "leader",
"state": "running",
"api_url": "http://{IP-Address}:8008/patroni",
"host": "{IP-Address}",
"port": 5432,
"timeline": 5,
"tags": {
"clonefrom": true
}
},
{
"name": "patroni2",
"role": "replica",
"state": "streaming",
"api_url": "http://{IP-Address}:8008/patroni",
"host": "{IP-Address}",
"port": 5433,
"timeline": 5,
"tags": {
"clonefrom": true
},
"lag": 0
}
],
"scope": "demo",
"scheduled_switchover": {
"at": "2023-09-24T10:36:00+02:00",
"from": "patroni1",
"to": "patroni3"
}
}
Конечная точка GET /history
обеспечивает просмотр истории переключений/отказов кластера. Формат очень похож на содержимое файлов истории в каталоге pg_wal
. Единственное отличие состоит в том, что поле временной метки показывает, когда была создана новая временная шкала.
$ curl -s http://localhost:8008/history | jq .
[
[
1,
25623960,
"no recovery target specified",
"2019-09-23T16:57:57+02:00"
],
[
2,
25624344,
"no recovery target specified",
"2019-09-24T09:22:33+02:00"
],
[
3,
25624752,
"no recovery target specified",
"2019-09-24T09:26:15+02:00"
],
[
4,
50331856,
"no recovery target specified",
"2019-09-24T09:35:52+02:00"
]
]
Конечная точка конфигурации
GET /config
– получение текущую версию динамической конфигурации:
$ curl -s http://localhost:8008/config | jq .
{
"ttl": 30,
"loop_wait": 10,
"retry_timeout": 10,
"maximum_lag_on_failover": 1048576,
"postgresql": {
"use_slots": true,
"use_pg_rewind": true,
"parameters": {
"hot_standby": "on",
"wal_level": "hot_standby",
"max_wal_senders": 5,
"max_replication_slots": 5,
"max_connections": "100"
}
}
}
PATCH /config
– изменение существующей конфигурации:
$ curl -s -XPATCH -d \
'{"loop_wait":5,"ttl":20,"postgresql":{"parameters":{"max_connections":"101"}}}' \
http://localhost:8008/config | jq .
{
"ttl": 20,
"loop_wait": 5,
"maximum_lag_on_failover": 1048576,
"retry_timeout": 10,
"postgresql": {
"use_slots": true,
"use_pg_rewind": true,
"parameters": {
"hot_standby": "on",
"wal_level": "hot_standby",
"max_wal_senders": 5,
"max_replication_slots": 5,
"max_connections": "101"
}
}
}
Приведенный выше вызов REST API изменяет существующую конфигурацию и возвращает новую конфигурацию.
Давайте проверим, что узел обработал эту конфигурацию. Прежде всего он должен начать печатать строки журнала каждые 5 секунд (loop_wait = 5). Изменение параметра «max_connections» требует перезапуска, поэтому флаг pending_restart
должен быть отображен:
$ curl -s http://localhost:8008/patroni | jq .
{
"pending_restart": true,
"database_system_identifier": "6287881213849985952",
"postmaster_start_time": "2016-06-13 13:13:05.211 CEST",
"xlog": {
"location": 2197818976
},
"patroni": {
"version": "1.0",
"scope": "batman",
"name": "patroni1"
},
"state": "running",
"role": "master",
"server_version": 90503
}
Удаление параметров:
- если необходимо удалить (сбросить) какую-либо настройку, просто примените к ней исправление с помощью
null
:
$ curl -s -XPATCH -d \
'{"postgresql":{"parameters":{"max_connections":null}}}' \
http://localhost:8008/config | jq .
{
"ttl": 20,
"loop_wait": 5,
"retry_timeout": 10,
"maximum_lag_on_failover": 1048576,
"postgresql": {
"use_slots": true,
"use_pg_rewind": true,
"parameters": {
"hot_standby": "on",
"unix_socket_directories": ".",
"wal_level": "hot_standby",
"max_wal_senders": 5,
"max_replication_slots": 5
}
}
}
Этот вызов удаляет postgresql.parameters.max_connections
из динамической конфигурации.
PUT /config
позволяет выполнить полную безусловную перезапись существующей динамической конфигурации:
$ curl -s -XPUT -d \
'{"maximum_lag_on_failover":1048576,"retry_timeout":10,"postgresql":{"use_slots":true,"use_pg_rewind":true,"parameters":{"hot_standby":"on","wal_level":"hot_standby","unix_socket_directories":".","max_wal_senders":5}},"loop_wait":3,"ttl":20}' \
http://localhost:8008/config | jq .
{
"ttl": 20,
"maximum_lag_on_failover": 1048576,
"retry_timeout": 10,
"postgresql": {
"use_slots": true,
"parameters": {
"hot_standby": "on",
"unix_socket_directories": ".",
"wal_level": "hot_standby",
"max_wal_senders": 5
},
"use_pg_rewind": true
},
"loop_wait": 3
}
Конечные точки переключения и отказа
Переключение
Конечная точка /switchover
работает только тогда, когда кластер работоспособен (есть ведущий узел). Он также позволяет запланировать переключение в заданное время.
При вызове конечной точки /switchover
можно указать узел кластера, но это не обязательно, в отличие от конечной точки /failover
. Если узел кластера не указан, все подходящие узлы кластера примут участие в процессе выбора ведущего узла (лидера)после того, как ведущий узел упал.
В теле JSON-запроса POST
необходимо указать поле leader
. Поля candidate
и scheduled_at
являются необязательными и могут использоваться для планирования переключения в определенное время.
В зависимости от ситуации запросы могут возвращать разные коды состояния и тела HTTP. Код статуса 200
возвращается при успешном завершении переключения или обхода отказа. Если переключение было успешно запланировано, Patroni вернет код состояния HTTP 202
. В случае возникновения проблемы будет возвращен код ошибки (один из 400
, 412
или 503
) с некоторыми подробностями в ответе.
DELETE /switchover
может быть использован для удаления текущего запланированного переключения.
Пример выполнения переключения на любую работающую резервную копию:
$ curl -s http://localhost:8008/switchover -XPOST -d '{"leader":"postgresql1"}'
Successfully switched over to "postgresql2"
Пример выполнения переключения на определенный узел:
$ curl -s http://localhost:8008/switchover -XPOST -d \
'{"leader":"postgresql1","candidate":"postgresql2"}'
Successfully switched over to "postgresql2"
Пример запланированного переключение с ведущего узла на любой другой работающий резервный узел в кластере в определенное время:
$ curl -s http://localhost:8008/switchover -XPOST -d \
'{"leader":"postgresql0","scheduled_at":"2019-09-24T12:00+00"}'
Switchover scheduled
Отказоустойчивость
Конечная точка /failover
может использоваться для выполнения ручного отказа при отсутствии работающих узлов (например, к асинхронному резерву, если все синхронные резервы недостаточно готовы для продвижения). Однако нет требования, чтобы у кластера не было ведущего узла — обход отказа может быть запущен и на работающем кластере.
В теле JSON-запроса POST
необходимо указать поле кандидата. Если указано поле leader
, то вместо него срабатывает переключение.
Пример:
$ curl -s http://localhost:8008/failover -XPOST -d '{"candidate":"postgresql1"}'
Successfully failed over to "postgresql1"
Предупреждение
Будьте очень осторожны при использовании этой конечной точки, так как это может привести к повреждению данных в определенных ситуациях. В большинстве случаев, конечная точка переключения удовлетворяет потребностям администратора.
Конечные точки POST /switchover
и POST /failover
используются соответственно командами patronictl switchover и patronictl failover.
DELETE /switchover
используется командой patronictl flush cluster-name switchover.
Сравнение отказоустойчивости/переключения
Отказоустойчивость | Переключение | |
---|---|---|
Требуется указание лидера | нет | да |
Требуется указать кандидата | да | нет |
Может быть выполнен в паузе | да | да (только для определенного кандидата) |
Может быть запланировано | нет | да (если не в паузе) |
Работоспособный резерв
Существует несколько условий, которые узел кластера должен пройти, чтобы иметь возможность участвовать в процессе выбора ведущего узла (лидера) во время переключения или стать ведущим узлом в качестве кандидата на отказоустойчивость/переключение:
-
быть доступным через Patroni API;
-
не иметь
nofailover
тега, установленного наtrue
; -
иметь полностью функциональный механизм мониторинга (если требуется – конфигурацией);
-
в случае переключения в работоспособном кластере или автоматического отказа, не превышать максимальную задержку репликации (
maximum_lag_on_failover
параметр конфигурации); -
в случае переключения в работоспособном кластере или автоматического отказа не иметь номер временной шкалы меньше, чем временная шкала кластера, если
check_timeline
параметр конфигурации установлен наtrue
; -
- в случае переключения (как с кандидатом, так и без него) – быть включенным в ключевые составляющие
/sync
; - для отказа в обоих работоспособных и неработоспособных кластерах эта проверка опускается.
- в случае переключения (как с кандидатом, так и без него) – быть включенным в ключевые составляющие
Предупреждение
В случае ручного отказа в кластере без лидера кандидат будет допущен к продвижению даже если:
- он не входит в состав ключевых составляющих
/sync
, когда включен синхронный режим;- его отставание превышает максимально допустимое отставание репликации;
- у него номер временной шкалы меньше, чем последняя известная временная шкала кластера.
Перезапуск конечной точки
Перезапуск Postgres на определенном узле, выполняется вызовом POST /restart
. В теле JSON-запроса POST
возможно опционально указать некоторые условия для перезапуска:
restart_pending
: логическое значение, если установлено наtrue
Patroni будет перезапускать PostgreSQL только тогда, когда перезапуск ожидается для применения некоторых изменений в конфигурации PostgreSQL;role
: выполнять перезапуск только в том случае, если текущая роль узла совпадает с ролью из запроса POST;postgres_version
: выполнить перезапуск только в том случае, если текущая версия postgres меньше указанной в запросе POST;timeout
: сколько времени должны ожидать перед тем, как PostgreSQL начнет принимать соединения. Переопределяетprimary_start_timeout
;schedule
: временная метка с временной зоной, запланировать перезапуск где-то в будущем.
Удаление запланированного перезапуска выполняется вызовом DELETE /restart
.
Конечные точки POST /restart
и DELETE /restart
используются для patronictl перезапуск и patronictl flush cluster-name перезагрузка соответственно.
Перезагрузка конечной точки
Вызов POST /reload
прикажет Patroni перечитать и применить файл конфигурации. Это эквивалентно отправке сигнала SIGHUP
процессу Patroni. Если изменить некоторые параметры Postgres, требующие перезапуска (например, shared_buffers
), все равно придется явно выполнить перезапуск Postgres, вызвав конечную точку POST /restart
или с помощью patronictl перезагрузка.
Конечная точка reload
используется программой patronictl перезагрузка.
Повторная инициализация конечной точки
POST /reinitialize
: повторная инициализация каталога данных PostgreSQL на указанном узле. Разрешается выполнять только на репликах. После ее вызова будет удален каталог данных и запущен pg_basebackup
или какой-то альтернативный метод создания реплики.
Вызов может завершиться неудачей, если Patroni находится в цикле попыток восстановления (перезапуска) сбойного Postgres. Чтобы решить эту проблему, можно указать {"force":true}
в теле запроса.
Конечная точка повторной инициализации использует patronictl reinit.