shardmand
shardmand — демон конфигурации Shardman
Синтаксис
shardmand
[общие_параметры
] [ --system-bus
] [ --user
]имя_пользователя
Здесь общие_параметры
могут принимать следующие значения:
[ --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 — это демон конфигурации Shardman. Он работает на каждом узле в кластере Shardman, подписывается на изменения ключей shardman/cluster0/data/ladle
и shardman/cluster0/data/cluster
в хранилище etcd (cluster0
— это имя кластера по умолчанию, используемое утилитами Shardman) и управляет процессами 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
попытается инициализировать новые кластеры stolon для звена, она может гарантировать, что на всех узлах звена не осталось ни одного действующего потока stolon из предыдущей конфигурации кластера.
Кроме того, 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/replica
иshardmand/v1/master
узла, возвращается код состояния 404./shardmand/v1/status
— получение информации о статусе shardmand.
Все службы Shardman управляются shardmand@cluster0.service
, поэтому, когда он запускается, останавливается или перезапускается, он также запускает, останавливает или перезапускает все остальные процессы Shardman (включая экземпляры СУБД).
Справка по командной строке
В этом разделе описываются команды shardmand
. Общие параметры команд Shardman описаны в «Общие параметры».
-
--log-format
Задаёт формат журнала:
json
илиtext
. Значение по умолчанию:text
.-
--system-bus
Не используется. Оставлен для совместимости. Игнорируется.
-
--user
имя_пользователя
Не используется. Оставлен для совместимости. Игнорируется.
Общие параметры
Общие параметры shardmand — это необязательные параметры, не являющиеся специфичными для данной утилиты. Они определяют параметры подключения etcd, имя кластера и некоторые другие параметры. По умолчанию shardmand пытается подключиться к хранилищу etcd 127.0.0.1:2379
и использовать имя кластера cluster0
. Уровень журнала по умолчанию — info
.
-
-h, --help
Показывает краткую справочную информацию.
-
--cluster-name
имя_кластера
Указывает имя кластера, где будет работать. По умолчанию указывается имя кластера
cluster0
.-
--log-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
-
SDM_MONITOR_PORT
Указывает порт для HTTP-сервера shardmand для метрик и точек трассировки. По умолчанию — 15432.
-
SDM_API_PORT
Указывает порт для API HTTP-сервера shardmand. По умолчанию — 15432.
Примеры
Настройка службы shardmand
Параметры shardmand обычно указываются в файле /etc/shardman/shardmand-cluster0.env
. Если необходимо, чтобы shardmand подключался к кластеру etcd на узлах n1
-n3
, используя порт 2379, и чтобы все службы Shardman использовали уровень журнала debug
, можно использовать следующий файл env
:
SDM_STORE_ENDPOINTS=http://n1:2379,http://n2:2379,http://n3:2379 SDM_LOG_LEVEL=debug
Обратите внимание, что необходимо перезапустить службу shardmand@cluster0
, чтобы применить новые параметры из файла env
.
Отображение журналов shardmand
Чтобы просмотреть журналы shardmand, можно использовать команду journalctl
:
$
journalctl -u shardmand@cluster0.service
Перезапуск служб Shardman
Можно перезапустить все службы Shardman на узле, используя команды systemctl
:
$
systemctl restart shardmand@cluster0.service