Управление кластером через tt
Плейбуки для управления кластером: переключение лидера, начальная загрузка VShard, публикация и применение миграций, включение режима принудительного восстановления. Большинство операций выполняются через утилиту tt.
Плейбук для переключения лидера набора реплик.
Перед переключением плейбук проверяет, что экземпляры находятся в статусе ready. Список допустимых статусов можно изменить через переменную tarantool_allowed_statuses, например ['ready','check_warnings'].
Плейбук определяет режим отказоустойчивости кластера и действует в зависимости от него:
- election — вызывает
box.ctl.promote()на целевом экземпляре и ожидает перехода в режим лидера в течениеpromote_timeoutсекунд; - supervised — выполняет команду
tt cluster failover switchдля целевого экземпляра и опрашивает результат черезtt cluster failover switch-statusдо получения итогового статуса.
Режимы, отличные от election и supervised, не поддерживаются — плейбук завершится с ошибкой.
Переменная | Описание |
|---|---|
| Время ожидания перевода экземпляра в режим лидера в секундах (режим |
Запуск через коллекцию:
ansible-playbook -i ${PATH_TO_INVENTORY} \--user ${SUPER_USER_NAME} \-e ansible_ssh_private_key_file=${PATH_TO_PRIVATE_KEY} \playbooks/switch_leader.yml --limit ${LIMIT}
Запуск через Docker-образ инсталлятора:
docker run --network host -it --rm \-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \-e SUPER_USER_NAME=${SUPER_USER_NAME} \ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \ansible-playbook -i /ansible/inventories/hosts.yml \--extra-vars '{"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key","super_user":"'${SUPER_USER_NAME}'"}' \playbooks/switch_leader.yml --limit ${LIMIT}
Плейбук для начальной загрузки VShard в наборе реплик. Выполняется один раз на одном экземпляре (run_once): запускает команду tt replicaset vshard bootstrap, подключаясь к экземпляру по адресу из iproto.advertise.client.
Плейбук применяется к роутерам TQE: целевые хосты определяются пересечением с группой vshard_router_hosts. Плейбук идемпотентен: если VShard уже загружен, выполнение пропускается.
Переменная | Описание |
|---|---|
| Имя пользователя для подключения к экземпляру Tarantool. Значение по умолчанию: |
| Пароль для подключения к экземпляру Tarantool. Значение по умолчанию: |
| Таймаут выполнения команды в секундах. Значение по умолчанию: |
Запуск через коллекцию:
ansible-playbook -i ${PATH_TO_INVENTORY} \--user ${SUPER_USER_NAME} \-e ansible_ssh_private_key_file=${PATH_TO_PRIVATE_KEY} \playbooks/tt_vshard_bootstrap.yml --limit ${LIMIT}
Запуск через Docker-образ инсталлятора:
docker run --network host -it --rm \-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \-e SUPER_USER_NAME=${SUPER_USER_NAME} \ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \ansible-playbook -i /ansible/inventories/hosts.yml \--extra-vars '{"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key","super_user":"'${SUPER_USER_NAME}'"}' \playbooks/tt_vshard_bootstrap.yml --limit ${LIMIT}
Плейбук для публикации и применения миграций. Выполняется один раз на одном экземпляре (run_once).
Если переменная tarantool_migrations_directory задана, плейбук:
- копирует файлы миграций из
tarantool_migrations_directoryво временную директорию на удалённом сервере; - публикует миграции в хранилище конфигурации командой
tt migrations publish; - применяет миграции командой
tt migrations apply.
Если переменная не задана, публикация и применение миграций пропускаются.
Переменная | Описание |
|---|---|
| Путь к директории с файлами миграций на стороне инсталлятора. Если переменная не задана, публикация и применение миграций пропускаются. Значение по умолчанию: |
Запуск через коллекцию:
ansible-playbook -i ${PATH_TO_INVENTORY} \--user ${SUPER_USER_NAME} \-e ansible_ssh_private_key_file=${PATH_TO_PRIVATE_KEY} \-e tarantool_migrations_directory=${PATH_TO_MIGRATIONS} \playbooks/tt_migrations.yml --limit ${LIMIT}
Запуск через Docker-образ инсталлятора:
docker run --network host -it --rm \-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \-e SUPER_USER_NAME=${SUPER_USER_NAME} \-e PATH_TO_MIGRATIONS=${PATH_TO_MIGRATIONS} \ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \ansible-playbook -i /ansible/inventories/hosts.yml \--extra-vars '{"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key","super_user":"'${SUPER_USER_NAME}'","tarantool_migrations_directory":"'${PATH_TO_MIGRATIONS}'"}' \playbooks/tt_migrations.yml --limit ${LIMIT}
Плейбук для запуска экземпляра в режиме принудительного восстановления (TT_FORCE_RECOVERY=true).
Плейбук временно устанавливает переменную окружения TT_FORCE_RECOVERY=true через файл переопределения systemd, перезагружает systemd и перезапускает экземпляр. Файл переопределения удаляется, а systemd перезагружается повторно, только после того как экземпляр достигнет допустимого статуса — таким образом режим принудительного восстановления действует только на один запуск, а при следующем перезапуске экземпляр возвращается в обычный режим. Если восстановление не удалось (экземпляр не достиг допустимого статуса), файл переопределения остаётся на месте — чтобы аварийный перезапуск не зацикливался на повреждённом снимке состояния, — а плейбук завершается с ошибкой.
Если включена переменная tarantool_snapshot, плейбук после запуска в режиме принудительного восстановления дожидается загрузки экземпляра, создаёт снимок состояния через box.snapshot() и перезапускает экземпляр в обычном режиме.
Переменная | Описание |
|---|---|
| Создать снимок состояния ( |
Запуск через коллекцию:
ansible-playbook -i ${PATH_TO_INVENTORY} \--user ${SUPER_USER_NAME} \-e ansible_ssh_private_key_file=${PATH_TO_PRIVATE_KEY} \playbooks/set_force_recovery.yml --limit ${LIMIT}
Запуск через Docker-образ инсталлятора:
docker run --network host -it --rm \-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \-e SUPER_USER_NAME=${SUPER_USER_NAME} \ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \ansible-playbook -i /ansible/inventories/hosts.yml \--extra-vars '{"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key","super_user":"'${SUPER_USER_NAME}'"}' \playbooks/set_force_recovery.yml --limit ${LIMIT}