shardmand
shardmand — Демон конфигурации Postgres Pro Shardman
Запуск Postgres Pro Shardman с shardmand #
shardmand — демон настройки Postgres Pro Shardman, который работает на каждом узле кластера Shardman и предоставляет распределённое хранилище пар ключ-значение для служебной информации.
shardmand генерирует boot_uuid при каждом запуске, отслеживает изменения ключей shardman/cluster0/data/ladle и shardman/cluster0/data/cluster в распределённом хранилище (cluster0 — это имя кластера по умолчанию, используемое утилитами Postgres Pro Shardman) и управляет процессами Postgres Pro Shardman на соответствующих узлах согласно конфигурации, описанной в этих документах JSON.
Расширение shardmand управляет встроенными процессами keeper. При запуске и изменении одного из отслеживаемых ключей в распределённом хранилище shardmand перенастраивает их следующим образом:
Вычисляет ожидаемую конфигурацию узла, т. е. список процессов
keeper, которые должны быть запущены, и их конфигурации из значенийshardman/cluster0/data/ladleиshardman/cluster0/data/cluster.Получает список запущенных процессов
keeperс их конфигурациями от внутреннего диспетчера процессов.Останавливает процессы, выполнение которых не ожидается. Это может быть процесс, принадлежащий кластеру с таким же именем, но другим UUID, или процесс, описание которого больше не присутствует в ожидаемой конфигурации узла. Для процессов
keepershardmand очищает их каталог данных.Если процесс должен быть запущен, но его параметры отличаются от ожидаемых, shardmand обновляет конфигурацию и перезапускает процесс. Если процесс должен быть запущен, но он не запущен, shardmand запускает его.
Кроме того, отдельный поток shardmand периодически обновляет ключ shardman/cluster0/data/shardmand/NODENAME в распределённом хранилище с помощью ClusterUUID последнего кластера, к которому была применена конфигурация. Таким образом, перед тем как команда shardmanctl nodes add попытается инициализировать новые кластеры для звена, она может гарантировать, что на всех узлах звена не осталось ни одного действующего потока из предыдущей конфигурации кластера.
Кроме того, shardmand запускает два HTTP-сервера в отдельных потоках. Если порты серверов совпадают, запускается один сервер, выполняющий обе роли. Первый сервер предоставляет следующие метрики: shardmand_healthy_keepers, shardmand_uptime, 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 #
shardmand [общие_параметры] [ --system-bus ] [ --user ] [ имя_пользователя--zone-name ]
Здесь общие_параметры могут принимать следующие значения:
[ --cluster-name cluster_name ] [ --log-level error | warn | info | debug ] [ --version ] [ -h | --help ] [ --log-format ]
Справка по командной строке #
Данный раздел описывает параметры командной строки, специфичные для shardmand.
-
--log-format# Задаёт формат журнала:
jsonилиtext. Значение по умолчанию:text.-
--system-bus# Не используется. Оставлен для совместимости. Игнорируется.
-
--zone-name# Показывает текущую географическую зону кластера. По умолчанию параметр не задан.
-
--ipc-socket#сокет Задаёт путь до сокета. По умолчанию:
<tmpdir>/shardmand.<shardmand_port>.sock.-
--user#имя_пользователя Не используется. Оставлен для совместимости. Игнорируется.
Общие параметры #
Общие параметры shardmand — это необязательные параметры, не являющиеся специфичными для данной утилиты. Они определяют имя кластера и некоторые другие характеристики. По умолчанию shardmand использует имя кластера cluster0. Уровень журнала по умолчанию — info.
-
-h, --help# Показывает краткую справочную информацию.
-
--cluster-name#cluster_name Указывает имя кластера, где будет работать. По умолчанию указывается имя кластера
cluster0.-
--data-dir#directory Задаёт каталог для хранения данных. По умолчанию —
/var/lib/pgpro/sdm-18/data. Указанный каталог должен иметь следующие разрешения:0700или0750.Важно
shardmand не запускается, если каталог не имеет требуемых разрешений.
-
--log-level#level Задаёт уровень детализации журнала. Возможные значения
уровня(от минимального до максимального):error,warn,infoиdebug. По умолчанию используетсяinfo.-
--server-host#строка Указывает внешний IP-адрес или имя shardmand. По умолчанию указывается
hostname.-
--server-port#число Указывает порт HTTP-сервера shardmand. Порт должен совпадать у всех узлов. По умолчанию — 15432.
-
--server-metrics-port#число Указывает порт HTTP-сервера shardmand для сбора метрик. Порт может совпадать со значением параметра
--server-port. По умолчанию — 15432.-
--server-ssl-key#строка Указывает закрытый ключ для HTTP-сервера shardmand. По умолчанию — не задан.
-
---server-ssl-cert#строка Указывает файл сертификата для идентификации клиента HTTP-сервером shardmand. По умолчанию не определён.
-
--monitor-port#число Указывает порт HTTP-сервера shardmand для метрик и точек трассировки. По умолчанию — 15432.
-
--api-port#число Указывает порт для API HTTP-сервера shardmand. По умолчанию — 15432.
-
--version# Показывает информацию о версии shardman-utils.
Переменные среды shardmand #
Служба shardmand считывает переменные среды из /etc/shardman/shardmand-cluster0.env. Следующие переменные среды влияют на поведение shardmand.
Примечание
Служба shardmand использует значения переменных окружения, только если не определены соответствующие параметры. Если ни переменная окружения, ни параметр не определены, используется соответствующее значение по умолчанию.
-
SDM_CLUSTER_NAME# Аналог параметра
--cluster-name-
SDM_DATA_DIR# Аналог параметра
--data-dir.-
SDM_LOG_LEVEL# Аналог параметра
--log-level-
SDM_SERVER_HOST# Аналог параметра
--server-host-
SDM_SERVER_PORT# Аналог параметра
--server-port-
SDM_SERVER_METRICS_PORT# Аналог параметра
--server-metrics-port-
SDM_SERVER_SSL_KEY# Аналог параметра
--server-ssl-key-
SDM_SERVER_SSL_CERT# Аналог параметра
--server-ssl-cert-
SDM_SYSTEM_BUS# Аналог параметра
--system-bus-
SDM_ZONE_NAME# Аналог параметра
--zone-name-
SDM_USER# Аналог параметра
--user-
SDM_IPC_SOCKET# Аналог параметра
--ipc-socket