Команда доступна с установкой пакета ecss-utils 14.15.7.24 и выше |
В момент выполнения процедур техобслуживания, в частности выполнения обновления программного обеспечения, необходимо выключить автоматическое выполнение команды ecss-detect-split. Для этого выполнить:
|
Данная команда входит в пакет ecss-utils (устанавливается вместе с пакетом ecss-node).
Данная команда позволяет обнаружить проблемы с кластером (сплит кластера) и исправить их, если таковые имеются.
Команда может выполниться в ручном режиме (выполняться однократно), а для постоянного мониторинга состояния кластера нужен запуск команды по таймеру (используя systemd).
Команда при обнаружении сплита запускает из-под себя другую команду (ecss-restart-nodes) для перезапуска всех нод на соседнем хосте.
Использование команды ecss-detect-split не требует аргументов.
Команда работает следующим образом:
Далее проверяем сервисы нод через CoCon-команду node/check-services:
Затем проверяем состояние erlang и mnesia нод через CoCon-команды node/nodes-info и system-status:
|
|
Перед началом работы с командой необходимо настроить следующий конфигурационный файл (является общим для ecss-detect-split и ecss-restart-nodes):
# Конфигурация используется для ecss-restart-nodes и ecss-detect-split # Список имен пользователей узлов кластера (hostname=username) HOSTS_USERNAMES="ecss1=ecss ecss2=ecss" # Список имен пользователей для подключения к CoCon (hostname=cocon_username) COCON_USERNAMES="ecss1=admin ecss2=admin" # Список портов для подключения к CoCon (hostname=cocon_port) COCON_PORTS="ecss1=8023 ecss2=8023" # Таймаут для того, чтобы ноды и сервисы успели подняться (в секундах) # Значение по умолчанию - 60 секунд WAIT_STARTUP_TIMEOUT="60" |
Для работы ecss-detect-split понадобится конфигурирование следующих параметров:
HOSTS_USERNAMES - соответствие имени каждого хоста кластера к имени его пользователя (через пробел)
COCON_PORTS - соответствие имени каждого хоста кластера к номеру его порта для входа в CoCon (через пробел)
WAIT_STARTUP_TIMEOUT - время на поднятие нод после рестарта в секундах (обычно хватает 60 секунд, но может понадобится больше)
Для управления нодами через CoCon необходимо:
Изначально таймер настроен на периодичность в 10 минут и выключен.
Для того, чтобы поменять периодичность, потребуется изменить значение OnCalendar=*:0/10 в следующем файле:
[Timer] OnCalendar=*:0/10 [Unit] Description=Check for cluster split detection every 10 minutes [Install] WantedBy=timers.target |
Есть возможность внести изменения в секции Timer для параметра OnCalendar, где:
Нужно указать пользователя (параметр User) и группу (параметр Group), от которых будет выполняться скрипт в следующем конфигурационном файле фоновой службы скрипта:
[Unit] Description=Background task for cluster split detection [Service] User=ecss Group=ssw Type=oneshot CPUQuota=10% MemoryLimit=50M Nice=15 Environment="TERM=xterm" EnvironmentFile=/etc/ecss/ecss-nodes.conf AmbientCapabilities=CAP_NET_RAW ProtectSystem=strict ProtectHome=false PrivateTmp=true NoNewPrivileges=true ExecStart=/usr/bin/ecss-detect-split StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target |
После того, как всё настроено, нужно запустить таймер следующей командой ТОЛЬКО НА ECSS1:
Данную команду ни в коем случае не выполнять на ECSS2. |
Имеется кластер из двух хостов (скрипт запускаем на ecss1, при обнаружении сплита перезапускаем все сервисы ecss2):
Пример конфигурации:
# Конфигурация используется для ecss-restart-nodes и ecss-detect-split # Список имен пользователей узлов кластера (hostname=username) HOSTS_USERNAMES="ecss1=ecss ecss2=ecss" # Список имен пользователей для подключения к CoCon (hostname=cocon_username) COCON_USERNAMES="ecss1=admin ecss2=admin" # Список портов для подключения к CoCon (hostname=cocon_port) COCON_PORTS="ecss1=8023 ecss2=8023" # Таймаут для того, чтобы ноды и сервисы успели подняться (в секундах) # Значение по умолчанию - 60 секунд WAIT_STARTUP_TIMEOUT="60" |
Затем нужно создать пару ключей на каждом хосте кластера и скопировать их на все хосты кластера (обычно это уже сделано в момент установки кластера):
На этом настройка закончена. При выполнении команды не будет запрашиваться пароль для подключения к соседнему хосту и CoCon.
Выполнить проверку подключения по ssh и в CoCon следующими командами, все команды должны выполняться без запроса пароля:
Пример выполнения команды, подключения к хосту "ecss2":
ecss@ecss1:~$ ssh ecss@ecss2 Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-213-generic x86_64) . . . Last login: Mon Dec 16 17:18:24 2024 from 10.0.20.35 |
Пример выполнения команды, подключения к CoCon "ecss1":
ecss@ecss1:~$ ssh admin@ecss1 -p8023 Checking... ┌─┬───────────────┬──────────────────────────┬───────────────────────────────┬─────────────────────┬──────┐ │ │ Node │ Release │ Erlang nodes │ Mnesia nodes │Uptime│ ├─┼───────────────┼──────────────────────────┼───────────────────────────────┼─────────────────────┼──────┤ │ │core1@ecss1 │ecss-core-3.14.15.1240 │core1@ecss1,core1@ecss2 │not running │16h 4m│ │ │core1@ecss2 │ecss-core-3.14.15.1240 │core1@ecss1,core1@ecss2 │not running │16h 4m│ │ │ds1@ecss1 │ecss-ds-3.14.15.1240 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2 │16h 4m│ │ │ds1@ecss2 │ecss-ds-3.14.15.1240 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2 │16h 4m│ │ │md1@ecss1 │ecss-mediator-3.14.15.1240│md1@ecss1,md1@ecss2 │md1@ecss1,md1@ecss2 │16h 4m│ │ │md1@ecss2 │ecss-mediator-3.14.15.1240│md1@ecss1,md1@ecss2 │md1@ecss1,md1@ecss2 │16h 4m│ │ │mycelium1@ecss1│ecss-mycelium-3.14.15.1240│mycelium1@ecss1,mycelium1@ecss2│not running │16h 4m│ │ │mycelium1@ecss2│ecss-mycelium-3.14.15.1240│mycelium1@ecss1,mycelium1@ecss2│not running │16h 4m│ │ │sip1@ecss1 │ecss-pa-sip-3.14.15.1240 │sip1@ecss1,sip1@ecss2 │sip1@ecss1,sip1@ecss2│16h 4m│ │ │sip1@ecss2 │ecss-pa-sip-3.14.15.1240 │sip1@ecss1,sip1@ecss2 │sip1@ecss1,sip1@ecss2│16h 4m│ └─┴───────────────┴──────────────────────────┴───────────────────────────────┴─────────────────────┴──────┘ All services are started. Active media resource selected list specific: ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐ │ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │ │ │ │ version │ │ │ ├─────────────┼───────────┼─────────────┼───────────┼───────────┤ │ core1@ecss1 │ msr.ecss1 │ 3.14.15.243 │ connected │ 16:03:53 │ │ │ msr.ecss2 │ 3.14.15.243 │ connected │ 16:03:52 │ │ core1@ecss2 │ msr.ecss1 │ 3.14.15.243 │ connected │ 16:03:52 │ │ │ msr.ecss2 │ 3.14.15.243 │ connected │ 16:03:55 │ └─────────────┴───────────┴─────────────┴───────────┴───────────┘ |
Пример лога выполнения команды при обнаружении сплита кластера
|