2.1. Службы кластера

Конфигурация кластера Shardman хранится в etcd. Службы кластера Shardman организованы как службы systemd. Демон настройки Shardman shardmand отслеживает конфигурацию кластера и управляет экземплярами PostgreSQL посредством интегрированного менеджера stolon. У каждого узла есть одна служба shardmand, которая обычно называется shardmand@CLUSTER_NAME.service. Здесь ИМЯ_КЛАСТЕРА — это имя кластера Shardman, по умолчанию cluster0.

Каждый shardmand включает в себя несколько интегрированных процессов stolon keeper и stolon sentinel.

С каждым зарегистрированным экземпляром СУБД связан процесс stolon keeper, который напрямую управляет этим экземпляром PostgreSQL. Процесс keeper запускает, останавливает, инициализирует и синхронизирует экземпляры PostgreSQL в зависимости от необходимого состояния кластера stolon.

С каждым зарегистрированным экземпляром СУБД связан процесс stolon sentinel. Для каждой группы репликации процессы stolon sentinel выбирают так называемого лидера среди таких существующих процессов. Этот лидер принимает решения о необходимом состоянии кластера (например, какой процесс keeper должен стать новым ведущим при сбое). При выборе нового ведущего сервера в группе репликации лидер выбирает процесс keeper с минимальной задержкой. Когда все реплики синхронны, keeper с максимальным приоритетом выбирается новым ведущим, даже если ведущий сервер в группе репликации «жив». Shardman использует только синхронные реплики (в противном случае существует вероятность потери данных при сбое узла).

shardmand — это модуль systemd, его журналы записываются в journald. Ознакомиться с его работой можно, используя команду journalctl. Например, чтобы получить все журналы с 2023-05-09 10:00 для службы shardmand кластера cluster0, можно использовать следующую команду:

                 $ journalctl -u shardmand@cluster0 --since '2023-05-09 10:00'
             

Чтобы задать уровень детализации журнала для всех служб Shardman, укажите SDM_LOG_LEVEL в файле конфигурации shardmand.