Проверка работоспособности кластера¶
Доступно с версии 3.1.0.
В этом руководстве показано, как проверить работоспособность (здоровье) кластера с помощью технологической роли roles.healthcheck.
Роль позволяет:
получать текущее состояние здоровья экземпляра;
устанавливать оповещения (alerts) в кластере при проблемах с работоспособностью узла;
отключать дополнительные проверки;
задавать свой формат ответа;
настраивать свою логику дополнительной проверки здоровья экземпляра.
Подробную информацию по настройке и использованию модуля healthcheck можно найти в документации модуля на GitHub.
Содержание:
Пререквизиты¶
Для выполнения примера требуются:
установленный Docker-образ Tarantool DB;
приложение Docker Compose;
приложение curl;
исходные файлы примера
healthcheck.Примечание
Есть два способа получить исходные файлы примера:
Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива:
tarantooldb-documentation-3.1.0.tar.gz. Примерhealthcheckрасположен в таком архиве в директории./doc/examples/healthcheck/.Отдельный архив healthcheck.tar.gz, скачанный c сайта Tarantool.
Запуск стенда¶
Для успешного запуска должны быть свободны следующие порты:
2379
3301–3308
8081
8281–8288
Перейдите в директорию примера healthcheck:
cd ./doc/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:
adminPassword:
secret
В TCM откройте вкладку Stateboard. После применения настроек кластер будет выглядеть так:

Проверка здоровья узлов кластера¶
Чтобы запросить метрику здоровья экземпляра, выполните HTTP GET-запрос на соответствующий порт с помощью утилиты curl. В примере ниже приведен запрос для узла storage-1-msk с портом 8283 и адресом метрики /healthcheck:
curl localhost:8283/healthcheck
Ответ выглядит так:
{"status":"alive"}
Имитация отказа реплики в наборе реплик¶
Чтобы сымитировать отказ экземпляра, остановите его с помощью команды docker compose pause:
cd cluster
docker 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