Проверка работоспособности кластера
Доступно с версии 3.1.0.
В этом руководстве показано, как проверить работоспособность (здоровье) кластера с помощью технологической роли roles.healthcheck.
Роль позволяет:
- получать текущее состояние здоровья экземпляра;
- устанавливать оповещения (alerts) в кластере при проблемах с работоспособностью узла;
- отключать дополнительные проверки;
- задавать свой формат ответа;
- настраивать свою логику дополнительной проверки здоровья экземпляра.
Полный список опций конфигурации для технологической роли roles.healthcheck приведен в
справочнике по конфигурации.
Подробную информацию по настройке и использованию модуля healthcheck можно найти в документации модуля на GitHub.
Содержание:
- Пререквизиты
- Запуск стенда
- Проверка здоровья узлов кластера
- Имитация отказа реплики в наборе реплик
- Имитация отказа репликации на реплике
- Остановка стенда
Для выполнения примера требуются:
-
установленный Docker-образ Tarantool DB;
-
приложение Docker Compose;
-
приложение curl;
-
исходные файлы примера
healthcheck.
Для успешного запуска должны быть свободны следующие порты:
- 2379
- 3301--3308
- 8081
- 8281--8288
Перейдите в директорию примера healthcheck:
cd ./docs/docs/ru/assets/examples/healthcheck/
Запустите кластер Tarantool DB:
make start
Запущенный стенд состоит из:
- кластера Tarantool DB:
- 2 роутера;
- 2 набора реплик по 3 хранилища;
- 1 Tarantool Cluster Manager (TCM);
- кластера etcd из 3 узлов.
После запуска должны работать все контейнеры, кроме init_host. Также после запуска становится доступен веб-интерфейс TCM.
Для входа в веб-интерфейс TCM откройте в браузере адрес http://localhost:8081. Логин и пароль для входа:
- Username:
admin - Password:
secret
В TCM откройте вкладку Stateboard. После применения настроек кластер будет выглядеть так:

Чтобы запросить метрику здоровья экземпляра, выполните HTTP GET-запрос на соответствующий порт с помощью утилиты curl. В примере ниже приведен запрос для узла storage-1-msk с портом 8283 и адресом метрики /healthcheck:
curl localhost:8283/healthcheck
Ответ выглядит так:
{"status":"alive"}
Чтобы сымитировать отказ экземпляра, остановите его с помощью команды docker compose pause:
cd clusterdocker compose pause tarantool-storage-1-spb
Проверьте работоспособность мастер-узла:
curl localhost:8283/healthcheck
Ответ выглядит так:
{"status":"alive"}
Проверка работоспособности показывает, что мастер-узел исправен. Это сделано намеренно для уменьшения чувствительности проверки, поскольку в данном случае доступны запись и чтение с мастер-узла.
Теперь проверьте здоровье второй реплики в этом наборе реплик:
curl localhost:8285/healthcheck
Ответ:
{"status":"dead","details":["replication.state_bad.storage-1-spb: Replication from \"storage-1-spb\" to \"storage-1-brn\" state \"connect\" (timed out)"]}
Видно, что реплика имеет статус dead. Кроме того, в ее описании указана информация о недоступности другой реплики. Если в наборе реплик отключить мастер-узел вместо реплики, то обе реплики перейдут в статус dead.
Верните экземпляр в работу:
docker compose unpause tarantool-storage-1-spb
Чтобы сымитировать отказ репликации на одной из реплик:
- Откройте TCM и перейдите на вкладку Stateboard.
- Нажмите на набор реплик
storage-1. - Выберите узел
storage-1-brnи в открывшемся окне перейдите на вкладку Terminal. - Во вкладке Terminal выполните следующую команду:
box.cfg({replication = {}})
Проверьте здоровье узла storage-1-brn:
curl localhost:8285/healthcheck
Ответ:
{"status":"dead","details":["replication.upstream_absent.storage-1-msk: Replication from \"storage-1-msk\" to \"storage-1-brn\" is not running","replication.upstream_absent.storage-1-spb: Replication from \"storage-1-spb\" to \"storage-1-brn\" is not running"]}
Видно, что реплика имеет статус dead. Кроме того, в ее описании указана информация о недоступности других узлов из набора реплик.
Чтобы остановить стенд, выполните в локальном терминале следующую команду:
make stop