shardmand — Демон конфигурации Postgres Pro Shardman
shardmand — это демон конфигурации Postgres Pro Shardman. Он работает на каждом узле в кластере Shardman, генерирует boot_uuid при каждом запуске, подписывается на изменения ключей shardman/cluster0/data/ladle и shardman/cluster0/data/cluster в хранилище etcd (cluster0 — это имя кластера по умолчанию, используемое утилитами Postgres Pro Shardman) и управляет процессами Postgres Pro Shardman на соответствующих узлах согласно конфигурации, описанной в этих документах JSON.
Расширение shardmand управляет встроенными процессами keeper и sentinel. При запуске и изменении одного из отслеживаемых ключей etcd shardmand перенастраивает их следующим образом:
Вычисляет ожидаемую конфигурацию узла, т. е. список процессов keeper и sentinel, которые должны быть запущены, и их конфигурации из значений shardman/cluster0/data/ladle и shardman/cluster0/data/cluster.
Получает список запущенных процессов keeper и sentinel с их конфигурациями от внутреннего диспетчера процессов.
Останавливает процессы, выполнение которых не ожидается. Это может быть процесс, принадлежащий кластеру с таким же именем, но другим UUID, или процесс, описание которого больше не присутствует в ожидаемой конфигурации узла. Для процессов keeper shardmand очищает их каталог данных.
Если процесс должен быть запущен, но его параметры отличаются от ожидаемых, shardmand обновляет конфигурацию и перезапускает процесс. Если процесс должен быть запущен, но он не запущен, shardmand запускает его.
Кроме того, отдельный поток shardmand периодически обновляет ключ etcd shardman/cluster0/data/shardmand/NODENAME с помощью ClusterUUID последнего кластера, к которому была применена конфигурация. Таким образом, перед тем как команда
shardmanctl
nodes add попытается инициализировать новые кластеры для звена, она может гарантировать, что на всех узлах звена не осталось ни одного действующего потока из предыдущей конфигурации кластера.
Кроме того, shardmand запускает два HTTP-сервера в отдельных потоках. Если порты серверов совпадают, запускается один сервер, выполняющий обе роли. Первый сервер предоставляет следующие метрики: shardmand_etcd_unavailable_time_секунды, shardmand_healthy_keepers, shardmand_sentinels, shardmand_uptime, shardmand_etcd_errors_total, shardmand_reconfigurations_number_total, shardmand_demotions_number_total. Также сервер предоставляет конечную точку /healthz для проверки работоспособности shardmand. Второй сервер предоставляет следующие конечные точки:
/shardmand/v1/replica — возвращает код состояния 200, если на узле работает резервный экземпляр, код состояния 500, если на узле работает ведущий экземпляр, /shardmand/v1/master — возвращает код состояния 200, если на узле работает ведущий экземпляр, код состояния 500, если на узле работает резервный экземпляр, /shardmand/v1/referee — возвращает код состояния 200, если на узле работает рефери экземпляр, код состояния 500, если на узле работает резервный или ведущий экземпляр, 404 если экземпляров несколько. Если как ведущий, так и резервный экземпляры работают на конечных точках /shardmand/v1/replica и shardmand/v1/master узла, возвращается код состояния 404.
/shardmand/v1/status — получение информации о статусе shardmand, в том числе boot_uuid.
/shardmand/v1/tables — возвращает списком информацию о сегментированных и глобальных таблицах в следующем формате:
[
{
"table": "schema.table",
"type": "sharded",
"distributed_by": [
{
"number": 1,
"field": "key",
"type": "integer"
}
],
"colocate_with": "schema.table",
"partitions": [
{
"shard": "shard-1",
"code": 0
}
],
"fields": [
{
"name": "key",
"type": "integer",
"nullable": false
}
]
}
]Все службы Postgres Pro Shardman управляются shardmand@cluster0.service, поэтому, когда он запускается, останавливается или перезапускается, он также запускает, останавливает или перезапускает все остальные процессы Postgres Pro Shardman (включая экземпляры СУБД).
shardmand [общие_параметры] [
--system-bus
] [
--user
]имя_пользователя
Здесь общие_параметры могут принимать следующие значения:
[
--cluster-name
cluster_name
] [
--log-level
error
|
warn
|
info
|
debug
] [
--retries
] [
число_повторов--session-timeout
] [
секунды--store-endpoints
] [
адреса_хранилища--store-ca-file
] [
файл_сертификата_ca--store-cert-file
] [
файл_сертификата_клиента--store-key
] [
частный_ключ_клиента--store-timeout
] [
длительность--version
] [
-h
|
--help
] [
--log-format
]
Данный раздел описывает параметры командной строки, специфичные для shardmand.
Общие параметры shardmand — это необязательные параметры, не являющиеся специфичными для данной утилиты. Они определяют параметры подключения etcd, имя кластера и некоторые другие параметры. По умолчанию shardmand пытается подключиться к хранилищу etcd 127.0.0.1:2379 и использовать имя кластера cluster0. Уровень журнала по умолчанию — info.
-h, --help
#Показывает краткую справочную информацию.
--cluster-name cluster_name
#Указывает имя кластера, где будет работать. По умолчанию указывается имя кластера cluster0.
--log-level level
#Задаёт уровень детализации журнала. Возможные значения уровня (от минимального до максимального): error, warn, info и debug. По умолчанию используется info.
--retries число
#Указывает, сколько раз shardmanctl должен повторять прерванный запрос к etcd. Если запрос etcd прерывается, скорее всего, из-за проблем с подключением, shardmanctl повторяет его указанное количество раз, прежде чем сообщить об ошибке. Значение по умолчанию — 5.
--session-timeout секунды
#Указывает таймаут блокировок в сеансе shardmanctl. Если нет связи между shardmanctl и хранилищем etcd в течение указанного количества секунд, блокировка снимается. Значение по умолчанию — 30.
--store-endpoints строка
#Задаёт адрес/порт etcd в формате: http[s]://. Значение по умолчанию — адрес[:порт](,http[s]://адрес[:порт])*http://127.0.0.1:2379.
--store-ca-file строка
#Проверяет сертификат сервера хранилища etcd с поддержкой HTTPS, используя этот пакет CA.
--store-cert-file строка
#Указывает файл сертификата для идентификации клиента в хранилище etcd.
--store-key строка
#Указывает файл закрытого ключа для идентификации клиента в хранилище etcd.
--store-timeout длительность
#Задаёт тайм-аут для запроса etcd. Значение по умолчанию — 5 секунд.
--monitor-port число
#Указывает порт HTTP-сервера shardmand для метрик и точек трассировки. По умолчанию — 15432.
--api-port число
#Указывает порт для API HTTP-сервера shardmand. По умолчанию — 15432.
--version
#Показывает информацию о версии shardman-utils.
Служба shardmand считывает переменные среды из /etc/shardman/shardmand-cluster0.env. Следующие переменные среды влияют на поведение shardmand.
SDM_CLUSTER_NAME
#Аналог параметра --cluster-name
SDM_LOG_LEVEL
#Аналог параметра --log-level
SDM_RETRIES
#Аналог параметра --retries
SDM_SYSTEM_BUS
#Аналог параметра --system-bus
SDM_STORE_ENDPOINTS
#Аналог параметра --store-endpoints
SDM_STORE_CA_FILE
#Аналог параметра --store-ca-file
SDM_STORE_CERT_FILE
#Аналог параметра --store-cert-file
SDM_STORE_KEY
#Аналог параметра --store-key
SDM_STORE_TIMEOUT
#Аналог параметра --store-timeout
SDM_SESSION_TIMEOUT
#Аналог параметра --session-timeout
SDM_USER
#Аналог параметра --user