Updated at 2025-10-31 03:31:03.409920

Об инсталляторе

Описание

Инсталлятор Ansible Tarantool Enterprise (ATE) - это набор сценариев Ansible (playbooks) для развертывания и последующего обслуживания продуктов из линейки Tarantool Enterprise.

Инсталлятор может быть предоставлен в виде одного из двух артефактов:

  1. Docker-образа на основе Alpine Linux 3.15 с преднастроенным окружением (ansible-tarantool-enterprise-<version>.tar.gz).

  2. Ansible-коллекции (tarantool-enterprise-<version>.tar.gz).

Конечная функциональность артефактов не отличается, но при работе с Ansible-коллекцией необходимо учитывать особенности окружения и настройки Ansible.

Релизная политика

Мы придерживаемся стратегии feature-релизов. Новая версия инсталлятора выходит по мере готовности новых функций.

Нумерация версий основана на Semantic Versioning 2.0.

CHANGELOG в формате Keep a Changelog предоставляется вместе с инсталлятором.

Зоны ответственности

Инсталлятор поставляется как есть. ВК Цифровые Технологии оказывает техническую поддержку инсталлятора (поиск и устранение дефектов), а также консультации по сценариям использования.

При использовании инсталлятора в виде Ansible-коллекции ответственность ВК Цифровые Технологии ограничивается коллекцией. Любая модификация сценариев или ролей приведет к отказу в технической поддержке до момента устранения изменений.

Список версий

Версия

Дата релиза

EOL

1.12.0

22.07.2025

TBA

1.11.0

27.06.2025

TBA

1.10.0

07.04.2025

TBA

1.9.0

17.02.2025

TBA

1.8.0

29.12.2024

TBA

1.7.0

29.10.2024

TBA

1.6.0

19.09.2024

TBA

1.5.0

02.09.2024

TBA

1.4.0

03.07.2024

TBA

1.3.0

02.05.2024

29.12.2024

1.2.0

29.03.2024

02.09.2024

1.1.0

20.02.2024

01.07.2024

1.0.0

19.01.2024

30.04.2024

Поддерживаемые OS

Поддерживаются следующие ОС:

Список ОС составлен на основе проведенных тестов.

Также возможна установка на RHEL 8, Ubuntu 22.04, Debian 12, но полноценная работоспособность не гарантируется. За дополнительной информацией по поддерживаемым ОС можете обратиться в техническую поддержку.

Поддерживаемая линейка продуктов Tarantool

Инструменты

Название

Сокращенное название

Tarantool Cluster Manager

TCM

Настройка среды

Требования к серверу под инсталлятор

Сервером под инсталлятор может служить:

Требования к серверу под инсталлятор:

Если предполагается использовать Docker-образ инсталлятора, установите:

Если предполагается использовать Ansible-коллекцию инсталлятора, установите:

Подготовка к использованию

Перед запуском сценариев развертывания подготовьте:

где:

Предварительная настройка сервера под Tarantool

Для развертывания продуктовой линейки Tarantool необходима предварительная настройка серверов. В Ansible Tarantool Enterprise, начиная с версии 1.3.0, появились сценарии для проверки и первоначального конфигурирования.

Список дальнейших действий, которые производятся на серверах по необходимости:

Проверка сервера перед развертыванием

Используйте сценарий env_check.yml. Он выполнит проверку и в результате предоставит список найденных несоответствий.

Примечание

По умолчанию сценарий завершится с ошибкой, если будут найдены несоответствия требованиям. Чтобы проигнорировать ошибку, укажите значение true для переменной tarantool_ignore_check_failure.

Проверка лимитов пользователя tarantool будет выполняться только под пользователем root. Для этого переменная tarantool_shared_become_user должна быть root.

Запустить сценарий можно без топологии приложения, с простейшим инвентарём.

Пример 1: Обычный запуск проверки с использованием Ansible-коллекции

ansible-playbook -i inventory.ini \
    --extra-vars  '{
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
    }' \
     playbooks/env_check.yml

Пример 2: Обычный запуск проверки с использованием 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}'",
        "tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
    }' \
    playbooks/env_check.yml

Пример 3: Запуск проверки под пользователем root c использованием 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}'",
        "tarantool_shared_become_user":"root",
    }' \
    playbooks/env_check.yml

Сценарий первичной настройки

Чтобы запустить сценарий подготовки сервера, выполните следующие команды:

Пример 1: Запуск подготовки с использованием Ansible-коллекции

ansible-playbook -i inventory.ini \
    --extra-vars  '{
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"root",
    }' \
     playbooks/env_prepare.yml

Пример 2: Запуск подготовки с использованием 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}'",
        "tarantool_shared_become_user":"root",
    }' \
    playbooks/env_prepare.yml

где:

  • ansible_ssh_private_key_file – путь к закрытому ключу SSH для аутентификации.

  • super_user – имя пользователя, для подключения по SSH и переключения на пользователя root.

  • tarantool_shared_become_userroot.

Важно

Для успешного выполнения сценария требуется доступ к пользователю root.

Использование тегов

Сценарии проверки и настройки разбиты на ряд блоков. С помощью Ansible-тегов можно выбирать, какие из блоков необходимо запустить:

  • tarantool – задачи по настройке пользователя и директорий Tarantool.

  • etcd – задачи по настройке пользователя и директорий ETCD.

  • nginx – задачи по настройке пользователя и директорий nginx.

  • kernel – управление параметрами ядра.

  • journald – настройка журналирования системы.

  • os – особенности операционной системы.

Пример 1: Выполнить только задачи с тегом tarantool

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}'",
        "tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
    }' \
    --tags tarantool \
    playbooks/env_check.yml

Пример 2: Пропустить выполнение задач с тегом nginx

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}'",
        "tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
    }' \
    --skip-tags nginx \
    playbooks/env_check.yml

Пример 3: Выполнить только задачи с тегами tarantool и kernel

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}'",
        "tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
    }' \
    --tags tarantool,kernel \
    playbooks/env_check.yml

Использование Ansible-коллекции

Установите инсталлятор:

  1. Скачайте архив с коллекцией из личного кабинета на сайте tarantool.io или используйте архив, полученный напрямую от доверенного лица. Архив с коллекцией имеет вид tarantool-enterprise-${VERSION}.tar.gz, где ${VERSION} – нужная версия инсталлятора ATE.

  2. Установите коллекцию с помощью ansible-galaxy:

    ansible-galaxy collection install --force tarantool-enterprise-${VERSION}.tar.gz
    

Важно

При использовании плейбуков из коллекции необходимо указать переменную cartridge_custom_steps_dir. Значение должно указывать на директорию playbooks/custom_steps в вашем окружении.

Можно воспользоваться небольшой хитростью и указать переменную вот так {{ playbook_dir }}/custom_steps.

Роль tarantool.enterprise.os_configure

Роль tarantool.enterprise.os_configure выполняет следующие функции:

Важно

Кроме запуска роли os_configure, которая описана в данном разделе, необходима предварительная настройка серверов. Вы можете выполнить настройку самостоятельно при наличии root-доступа для ansible. Если root-доступ для ansible не предоставляется, обратитесь в техподдержку за инструкциями.

Ansible Tarantool Enterprise не использует механизм gather_facts по умолчанию, поэтому многие сценарии начинаются с задачи find_os.yml для определения операционной системы. Добавьте вызов роли tarantool.enterprise.os_configure перед использованием других ролей из Ansible Tarantool Enterprise.

- ansible.builtin.import_role:
    name: tarantool.enterprise.os_configure
    tasks_from: find_os.yml

Запуск роли целиком (main.yml) создаст unit-файлы.

- ansible.builtin.import_role:
    name: tarantool.enterprise.os_configure

Примечание

Если запрещено использовать userspace, то активируйте запуск из-под sudo. Для этого:

  1. Создайте unit-файлы в /etc/systemd/system.

  2. Через extra vars передайте параметр -e tarantool_systemd_userspace_supported_os=[].

Управление сервисами будет происходить с помощью команд sudo systemctl start/stop/restart.

Роль tarantool.enterprise.cartridge

Эта роль нужна для работы с приложениями на Tarantool Cartridge.

Ей соответствует полностью вшитая open-source роль tarantool.cartridge. Документация доступна на GitHub.

Особенности использования в составе коллекции:

Параметры become_* и hosts в сценариях

Есть специальный набор переменных, которые регулируют, каким образом запускаются сценарии:

Комбинирование сценариев

Вы можете управлять tarantool_shared_hosts для создания сложных сценариев с использованием уже существующих сценариев из коллекции Ansible Tarantool Enterprise.

Предположим, у вас в инвентаре есть группы ACTIVE и RESERVE, которые состоят из активных и резервных экземпляров Tarantool соответственно. Сложный сценарий обновления без простоя можно сделать так:

- name: Switch leaders to RESERVE datacenter
  ansible.builtin.import_playbook: tarantool.enterprise.switch_leaders_to
  vars:
    tarantool_shared_hosts: "RESERVE"

- name: Update ACTIVE datacenter
  ansible.builtin.import_playbook: tarantool.enterprise.update_internal
  vars:
    tarantool_shared_hosts: "ACTIVE"

- name: Wait for cluster to become healthy
  ansible.builtin.import_playbook: tarantool.enterprise.wait_is_healthy
  vars:
    tarantool_shared_hosts: "all"

- name: Return leaders to ACTIVE datacenter
  ansible.builtin.import_playbook: tarantool.enterprise.switch_leaders_to
  vars:
    tarantool_shared_hosts: "ACTIVE"

- name: Update RESERVE datacenter
  ansible.builtin.import_playbook: tarantool.enterprise.update_internal
  vars:
    tarantool_shared_hosts: "RESERVE"

- name: Wait for cluster to become healthy
  ansible.builtin.import_playbook: tarantool.enterprise.wait_is_healthy
  vars:
    tarantool_shared_hosts: "all"

Аналогичный механизм реализован в сценарии tarantool.enterprise.update_2x из коллекции Ansible Tarantool Enterprise.

Использование Docker-образа

Установите инсталлятор:

  1. Скачайте архив с инсталлятором из личного кабинета на сайте tarantool.io или используйте архив, полученный напрямую от доверенного лица. Архив с инсталлятором имеет вид ansible-tarantool-enterprise-${VERSION}.tar.gz, где ${VERSION} – нужная версия инсталлятора ATE.

  2. Загрузите образ инсталлятора в Docker:

    docker load -i ansible-tarantool-enterprise-${VERSION}.tar.gz
    
  3. Для упрощения вызовов можно добавить образу тэг latest:

    docker image tag ansible-tarantool-enterprise:${VERSION} ansible-tarantool-enterprise:latest
    

После этого становятся доступны следующие сценарии администрирования:

Сценарии администрирования продуктов

Далее по документации будут встречаться следующие переменные окружения:

Дополнительные переменные описаны в каждом пункте по мере необходимости.

Пример инвентаря для продукта Tarantool Cartridge можно найти в разделе Подготовка к использованию.

Часть переменных используется внутри контейнера во время запуска сценария. Значения переменных передаются в контейнер с помощью опции -e.

Переменная LIMIT — обычный параметр limit для Ansible. Указывать limit можно для любого сценария. В некоторых случаях – обязательно. Можно использовать специальное значение лимита all, чтобы запустить сценарий на всех экземплярах Tarantool.

Tarantool 3.x

Добавлено в версии 1.10.0: Переменные для подключения к централизованному хранилищу на базе Tarantool вместо etcd:

  • tarantool_config_storage (string) - тип централизованного хранилища конфигурации (etcd или Tarantool Config Storage). Если вы хотите использовать Tarantool Config Storage, предварительно установите его (см. файл инвентаря в примерах). Если переменная установлена в значение tarantool, конфигурационный файл будет сгенерирован и сохранён в Tarantool Config Storage с помощью утилиты tt.

    • etcd ← (default)

    • tarantool

  • is_config_storage (boolean) - используется для поднятия кластера Tarantool без централизованого хранилища конфигурации, с указанием пути до файла конфигурации. Как правило, необходимо только при установке кластера Tarantool в качестве Config Storage.

    • true

    • undefined ← (default)

  • tarantool_config_storage_endpoints (list) - аналог tarantool_config_etcd_endpoints. Указывается в соответствии с документацией Tarantool 3.x как значение переменной TT_CONFIG_STORAGE_ENDPOINTS.

    • [{uri: «http://127.0.0.1:4242», login: «user», password: «pass»}]

  • tarantool_config_storage_prefix (path) - префикс, по которому будет сохранена конфигурация кластера Tarantool.

    • /myapp

Важно

Переменная is_config_storage со значением true может быть использована только если переменная tarantool_config_storage задана со значением tarantool.

Сценарии используются для развертывания, обновления, а также администрирования приложений и продуктов на основе Tarantool 3.x Enterprise Edition (например, TDB 2.x, TCS и т.д.). Смотрите также: Примеры инвентарей Tarantool 3.x.

Tarantool 3.x: Управление конфигурацией

Добавлено в версии 1.0.0.

Изменено в версии 1.2.0: Изменена работа с конфигурацией. Уровень global задается в переменной tarantool_config_global, а group – с помощью tarantool_config_group соответственно.

Добавлено управление секциями на уровне replicaset с помощью переменной tarantool_config_replicaset.

Конфигурация Tarantool 3.x генерируется из инвентаря.

Вы можете изменить значения секций конфигурации на любом из уровней окружения. За каждый уровень отвечают собственные переменные:

  • global – общая переменная tarantool_config_global.

  • grouptarantool_config_group на уровне Ansible-групп.

  • replicasettarantool_config_replicaset на том же уровне Ansible-групп, где определена переменная replicaset_alias.

  • instance – собственные переменные у хоста.

Во время запуска Tarantool отдает приоритет уровням в указанном порядке, где самый приоритетный – уровень instance.

Переменная replicaset_alias обязательна, так как экземпляры объединяются в наборы реплик на основе её значения.

Tarantool 3.x: Установка приложения

Добавлено в версии 1.0.0.

Изменено в версии 1.7.0: Добавлена возможность развертывания от имени пользователя root.

Добавлено в версии 1.10.0: Добавлена возможность разворачивать Tarantool Config Storage и приложения с централизованным хранением конфигурации в Tarantool Config Storage.

Основной сценарий для развертывания приложений и продуктов на основе Tarantool 3.x Enterprise Edition (например, TDB 2.x).

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 \
    -v ${PATH_TO_PACKAGE}/${PACKAGE_NAME}:/ansible/packages/${PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e PACKAGE_NAME=${PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'"
    }' \
    playbooks/install_3_0.yml

Для выполнения развертывания в system space (под пользователем root) убедитесь, что переменная tarantool_shared_become_user установлена в root и добавьте переменную systemd_scope со значением system.

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 \
    -v ${PATH_TO_PACKAGE}/${PACKAGE_NAME}:/ansible/packages/${PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e PACKAGE_NAME=${PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"root",
        "systemd_scope":"system"
    }' \
    playbooks/install_3_0.yml

Tarantool 3.x: Отправка конфигурации в etcd

Добавлено в версии 1.0.0.

Изменено в версии 1.4.1: Изменен способ отправки конфигурации Tarantool в ETCD. Теперь отправка происходит по HTTP с сервера Tarantool.

Важно

Начиная с версии ATE 1.4.1 сценарий работает только с версиями ETCD 3.4 и выше, т.к. используется v3 HTTP API.

Текущий подход к хранению конфигурации – отказоустойчивый кластер ETCD. Данный сценарий сохраняет сгенерированный из инвентаря файл конфигурации в ETCD по ключу /tarantool/{{ cartridge_app_name }}/config/all.

Обязательно укажите адрес сервера ETCD в переменной tarantool_etcd_host. Адрес должен быть доступен с сервера, на котором разворачиваются экземпляры Tarantool.

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/etcd_3_0.yml --limit ${HOSTS}

Внимание

${HOSTS} - группа хостов Tarantool 3.x.

Указание лимита может понадобиться в случае, если в инвентаре присутствуют другие компоненты. Например, coordinators для supervised failover или экземпляры GRPC API продукта TQE. Они не должны попасть в конфигурацию в ETCD, так как это приведет к ошибкам. Учитывайте эту особенность в своих инсталляциях.

Дополнительные переменные:

  • etcd_schema_definition (string) — Протокол используемый для передачи данных в etcd.

    • http ← (default)

  • etcd_validate_certs (string) — Наличие проверки серверного сертификата etcd.

  • etcd_client_cert (string) — Путь к ssl-сертификату используемому для установки соединения с etcd.

  • etcd_client_key (string) — Путь к ssl-ключу используемому для установки соединения с etcd.

  • etcd_ca_path (string) — Путь к ca-сертификату используемому для установки соединения с etcd.

  • etcd_tarantool_username (string) — Имя пользователя для логина в etcd.

  • etcd_tarantool_password (string) — Пароль пользователя для логина в etcd.

Tarantool 3.x: Обновление приложения без простоя

В этом сценарии с минимальным временем простоя выполняется последовательное (rolling) обновление кластера Tarantool 3.x с роутерами и stateless-экземплярами (координаторы, scheduler, grpc-сервисы).

Во время данного сценария не все экземпляры Tarantool обновляются одновременно. Процесс постепенно перезапускает экземпляры, переключая при этом роль лидера в наборах реплик. Таким образом кластер всегда остается доступен на запись. В сценарии также предусмотрено обновление экземпляров, не принадлежащих кластеру Tarantool 3.x (экземпляры scheduler, grpc-сервисы) и stateless-узлов.

В сценарии можно управлять количеством одновременных обновлений экземпляров хранилища.

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 STORAGE_GROUP_NAME=${STORAGE_GROUP_NAME} \
  -e PATH_TO_BACKUP_DIRECTORY=${PATH_TO_BACKUP_DIRECTORY} \
  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_shared_become_user":"tarantool",
      "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
      "storage_group":"${STORAGE_GROUP_NAME}"
  }' \
  playbooks/continuous_update.yml

Обязательные переменные:

  • tarantool_3_0_version_support (boolean) — поддержка Tarantool 3.x. Обязательное значение – true.

    • true

    • undefined ← (default)

  • tarantool_group (string) — группа экземпляров, на которых будет проходить обновление. Если переменная не указана, обновление пройдет на всех экземплярах из файла инвентаря.

    • all ← (default)

  • storage_group (string) — группа экземпляров хранилища, которые нужно обновить. Если переменная не указана, узлы хранилища будут определены автоматически. Обновление экземпляров хранилища происходит отдельно, и эта переменная позволяет отделить такие экземпляры от остальных типов узлов в кластере.

Дополнительные переменные:

  • update_batch_size (string) — количество параллельно обновляемых узлов хранилища.

    • 1 ← (default)

  • tt_failover_status_retries (number) — количество повторных попыток для проверки статуса восстановления после отказа (failover).

    • 5 ← (default)

  • tt_failover_status_delay (number) — задержка в секундах для проверки статуса восстановления после отказа.

    • 50 ← (default)

  • schedulers_name_list (string) — список экземпляров scheduler. Данная переменная необходима, если в inventory-файле для экземпляров scheduler задана переменная replicaset_alias.

Внутри этого плейбука используются переменные из других плейбуков:

  • check_3_0

    • tarantool_wait_alive_retries (integer) — количество повторных проверок доступности экземпляра Tarantool после рестарта.

    • tarantool_wait_alive_delay (integer) — время ожидания (в секундах) между проверками доступности экземпляра.

  • tt_failower_switch

    • tt_failover_status_timeout (integer) — время ожидания в секундах выполнения команды failover switch.

    • tt_failover_status_retries (integer) — количество ретраев для запроса статуса выполнения команды failover switch.

    • tt_failover_status_delay (integer) — время ожидания в секундах выполнения команды failover status.

  • promote_leader

    • promote_timeout (integer) — время ожидания в секундах выполнения promote на инстансе.

Примечание

Данный сценарий нельзя выполнять с лимитами.

Если для scheduler в inventory-файле указан replicaset_alias, то необходимо указать переменную schedulers_name_list.

Сценарий можно применять только на кластерах с восстановлением после отказа (failover), включенным в режиме supervised или election. Подробнее про эти режимы можно прочитать в документации Tarantool.

Этапы выполнения плейбука

  1. Сбор информации о кластере и проверка его работоспособности:

    • определение порядка обновления экземпляров хранилища (storage);

    • проверка режима работы восстановления после отказа;

    • определение списка мастер-узлов, экземпляров хранилища и stateless-экземпляров.

    • проверка работоспособности всех узлов кластера Tarantool перед обновлением;

  2. Переключение мастер-узла:

    • передача роли мастера списку выбранных хостов под названием replicaset_masters_list;

    • проверка здоровья кластера после передачи роли мастера.

  3. Обновление реплик:

    • параллельное обновление списка реплик replicaset_upgrade_targets с шагом update_batch_size;

    • проверка здоровья кластера после обновления.

  4. Переключение мастера и обновление хостов предыдущих мастер-узлов. На этом этапе происходит передача роли мастера списку хостов new_masters_list, чтобы обновить хосты мастер-узлов в списке replicaset_masters_list.

  5. Параллельное обновление stateless-сервисов кроме роутеров с шагом update_batch_size.

  6. Обновление схемы данных:

    • обновление схемы данных на replicaset_masters_list и routers_list;

    • проверка здоровья кластера после обновления.

  7. Обновление списка scheduler-хостов.

  8. Финальная проверка здоровья кластера после обновления. На этом этапе идет проверка здоровья всех экземпляров Tarantool.

Tarantool 3.x: Добавление параметров SSL в динамический инвентарь

Добавлено в версии 1.13.0.

Настройте параметр iproto.listen.[0].params в соответствии с документацией Tarantool с помощью переменной tarantool_iproto_ssl_params:

---
plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: tarantool

constants:
  tarantool_iproto_ssl_params:
    transport: 'ssl'
    ssl_cert_file: 'certs/server.crt'
    ssl_key_file: 'certs/server.key'
  ...

Всё, что задано в переменной tarantool_iproto_ssl_params, будет указано в конфигурации Tarantool в каждой секции <instance>.iproto.listen.[0].params «как есть». Например, указанные выше настройки будут преобразованы в следующую секцию конфигурации для всех экземпляров:

"storage-r01-i01": {
  "iproto": {
      "advertise": {
          "client": "127.0.0.1:3301"
      },
      "listen": [
          {
              "params": {
                  "ssl_cert_file": "certs/server.crt",
                  "ssl_key_file": "certs/server.key",
                  "transport": "ssl"
              },
              "uri": "127.0.0.1:3301"
          }
      ]

Задать параметр в глобальной секции конфигурации Tarantool можно аналогично другим глобальным настройкам Tarantool:

tarantool_config_global:
  iproto:
    advertise:
      peer:
        login: replicator
      sharding:
        login: storage
      client: unix/:{{ cartridge_run_dir }}/{% raw %}{{ instance_name }}{% endraw %}.iproto
    listen:
      - uri: unix/:/app/tarantool/kvee/run/{% raw %}{{ instance_name }}{% endraw %}.iproto
        params:
          ssl_cert_file: certs/server.crt
          ssl_key_file: certs/server.key
          transport: ssl

Tarantool 3.x: Включение supervised failover

Добавлено в версии 1.4.0.

Настройка failover с внешним координатором потребует изменений в инвентаре.

  1. Установите параметр replication.failover в значение supervised на одном из уровней конфигурации: tarantool_config_replicaset, tarantool_config_group, tarantool_config_global.

tarantool_config_replicaset:
  replication:
    failover: supervised
  1. Добавьте новые экземпляры и укажите для них переменную tarantool_coordinator: true.

  2. Добавьте пользователю с ролью replication привилегии для выполнения функции failover.execute.

tarantool_config_global:
  credentials:
    users:
      replicator:
        password: 'i-changed-a-password-here'
        roles: ['replication']
        privileges:
          - permissions: [execute]
            lua_call: [failover.execute]

Важно

В версиях Tarantool 3.0 и Tarantool 3.1 настройка supervised failover требует создания отдельной роли для добавления привилегий на исполнение failover.execute.

Подробности можно найти в документации.

Tarantool 3.x: Контролируемое переключение лидера для supervised failover

Добавлено в версии 1.10.0.

Важно

Может быть использован только в режиме supervised failover.

Подробнее про этот режим можно прочитать в документации Tarantool.

Примечание

Параметр LIMIT указывает, какие экземпляры Tarantool должны стать мастерами.

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}'",
      "tarantool_shared_become_user":"tarantool",
      "tt_failover_status_timeout": 30,
      "tt_failover_status_retries": 3,
      "tt_failover_status_delay": 5
  }' \
  playbooks/tt_failover_switch.yml --limit ${LIMIT}

Дополнительные переменные:

  • tt_failover_status_timeout (integer) — время ожидания в секундах выполнения команды failover switch. Например: '{"tt_failover_status_timeout": 30}'.

  • tt_failover_status_retries (integer) — количество повторных попыток для запроса статуса выполнения команды failover switch. Например: '{"tt_failover_status_retries": 3}'.

  • tt_failover_status_delay (integer) — время ожидания в секундах выполнения команды failover status. Например: '{"tt_failover_status_delay": 5}'.

  • tt_ssl_key_file_path (string) — путь к клиентскому ssl-ключу. Например: '{"tt_ssl_key_file_path": "/certs/client.key"}'.

  • tt_ssl_cert_file_path (string) — путь к клиентскому ssl-сертификату. Например: '{"tt_ssl_cert_file_path": "/certs/client.crt"}'.

  • tt_ssl_ca_file_path (string) — путь к доверенному ca-сертификату. Например: '{"tt_ssl_ca_file_path": "/certs/rootCA.crt"}'.

  • tt_etcd_schema_definition (string) — Протокол используемый для передачи данных в etcd. Например: '{"tt_etcd_schema_definition": "http"}'.

  • tt_ssl_verify_host (string) — Наличие проверки серверного сертификата etcd. Например: '{"tt_ssl_verify_host": "False"}'.

  • tt_etcd_username (string) — Имя пользователя для логина в etcd.

  • tt_etcd_password (string) — Пароль пользователя для логина в etcd.

Tarantool Cartridge

Сценарии используются для развертывания, обновления, а также администрирования приложений и продуктов на основе Tarantool Cartridge (например, TDG, TDB 1.x и т.д.). Смотрите также: Примеры инвентарей Tarantool Cartridge.

Tarantool Cartridge: Первичное развертывание

Изменено в версии 1.7.0: Добавлена возможность развертывания от имени пользователя root.

Внимание

После создания кластера будьте крайне осторожны с изменением его топологии.

  • Нельзя изменять названия наборов реплик, групп и самих экземпляров.

  • Для исключения экземпляров Tarantool из кластера используйте соответствующий сценарий.

  • Добавление новых экземпляров возможно только на свободные порты и с уникальными именами.

  • Обратите особое внимание на изменения, если вы используете динамический инвентарь.

Основной сценарий для развертывания приложений и продуктов на основе Tarantool Cartridge (например, TDG, TDB 1.x и т.д.). Используйте после подготовки серверов к развертыванию.

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 \
    -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e PACKAGE_NAME=${PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
    }' \
    playbooks/deploy.yml

Для выполнения развертывания в system space (под пользователем root) убедитесь, что переменная tarantool_shared_become_user установлена в root и добавьте переменную systemd_scope со значением system.

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 \
    -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e PACKAGE_NAME=${PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"root",
        "systemd_scope":"system"
    }' \
    playbooks/deploy.yml

Дополнительные переменные:

  • tarantool_configure_logrotate (boolean) — настраивает ротацию журналов с помощью утилиты logrotate. Имеет смысл только при записи журналов или журналов аудита в файл.

    • true

    • undefined ← (default)

Tarantool Cartridge: Обновление приложения

Сценарий для обновления Tarantool Data Grid, а также приложений и продуктов на основе Tarantool Cartridge. Производит одновременный перезапуск всех экземпляров Tarantool на всех серверах. Рекомендуется использовать на тестовых контурах, если необходимо ускорить развертывание.

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 \
    -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e PACKAGE_NAME=${PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
    }' \
    playbooks/update.yml

Tarantool Cartridge: Обновление приложения без простоя

Типичная топология кластеров Tarantool подразумевает наличие двух дата-центров: Активного и Резервного. Каждый набор реплик хранилища имеет одну или несколько реплик в обоих дата-центрах.

Во время данного сценария не все экземпляры Tarantool обновляются одновременно. Процесс постепенно перезапускает экземпляры в каждом из дата-центров, переключая при этом роль лидера в наборах реплик. Таким образом кластер всегда остается доступен на запись.

В сценарии можно управлять количеством одновременных обновлений экземпляров хранилища и роутеров.

Обязательными являются переменные tarantool_active_hosts, tarantool_passive_hosts и tarantool_stateless_hosts.

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 \
    -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e PACKAGE_NAME=${PACKAGE_NAME} \
    -e CLUSTER_IS_HEALTHY_RETRIES=100 \
    -e CLUSTER_IS_HEALTHY_DELAY=10 \
    -e UPDATE_BATCH_SIZE=2 \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "wait_members_alive_retries":"'${CLUSTER_IS_HEALTHY_RETRIES}'",
        "wait_members_alive_delay":"'${CLUSTER_IS_HEALTHY_DELAY}'",
        "wait_cluster_has_no_issues_retries":"'${CLUSTER_IS_HEALTHY_RETRIES}'",
        "wait_cluster_has_no_issues_delay":"'${CLUSTER_IS_HEALTHY_DELAY}'",
        "update_batch_size":"'${UPDATE_BATCH_SIZE}'",
        "tarantool_active_hosts":"'${TARANTOOL_ACTIVE}'",
        "tarantool_reserve_hosts":"'${TARANTOOL_RESERVE}'",
        "tarantool_stateless_hosts":"'${TARANTOOL_STATELESS}'"
    }' \
    playbooks/update_2x.yml

Обязательные переменные:

  • tarantool_active_hosts (string) — группа хостов, которая состоит из экземпляров Tarantool в активном дата-центре. Активным является дата-центр, который принимает пользовательские запросы и включает в себя всех лидеров наборов реплик.

  • tarantool_passive_hosts (string) — хосты, не попавшие в tarantool_active_hosts. По своей сути является группой хостов, состоящей из всех экземпляров Tarantool в резервном дата-центре.

  • tarantool_stateless_hosts (string) - все остальные экземпляры Tarantool, которые не требуют обязательного обновления по плечам, например роутеры.

  • update_batch_size (number) — количество экземпляров, которые будут обновляться одновременно.

  • wait_members_alive_retries (number) — количество проверок доступности экземпляров.

  • wait_members_alive_delay (number) — время ожидания между проверками доступности экземпляров.

  • wait_cluster_has_no_issues_retries (number) — количество проверок консистентности кластера.

  • wait_cluster_has_no_issues_delay (number) — время ожидания между проверками консистентности кластера.

Tarantool Cartridge: Доставка поставки приложения

Сценарий доставки новой версии продукта без перезапуска экземпляров.

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 \
    -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool"
    }' \
    playbooks/update_bundle.yml

Tarantool Cartridge: Запуск модуля миграций

Сценарий запускает процесс обновления схемы данных. Аналогичен сценарию миграции для Tarantool DB.

См. подробнее про миграции в документации по Tarantool.

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}'",
        "tarantool_shared_become_user":"tarantool",
    }' \
    playbooks/migrations.yml

Tarantool Cartridge: Перезагрузка ролей

Важно

Сценарий можно применять только на подготовленных Enterprise-приложениях Tarantool Cartridge, построенных по принципу hot-reload.

Сценарий используется для обновления поставки приложения и последующей перезагрузки ролей Tarantool Cartridge для обновления без перезапуска.

Предусмотрено два вида данного сценария:

  1. reload_roles.yml – для кластера без избыточности.

    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 \
        -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
        -e SUPER_USER_NAME=${SUPER_USER_NAME} \
        -e PACKAGE_NAME=${PACKAGE_NAME} \
        ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
        ansible-playbook -i /ansible/inventories/hosts.yml \
        --extra-vars '{
            "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
            "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
            "super_user":"'${SUPER_USER_NAME}'",
            "tarantool_shared_become_user":"tarantool",
        }' \
        playbooks/reload_roles.yml
    
  2. reload_roles_2x.yml – для кластера с избыточностью «2».

    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 \
        -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
        -e CLUSTER_IS_HEALTHY_RETRIES=100 \
        -e CLUSTER_IS_HEALTHY_DELAY=10 \
        -e UPDATE_BATCH_SIZE=2 \
        -e SUPER_USER_NAME=${SUPER_USER_NAME} \
        -e PACKAGE_NAME=${PACKAGE_NAME} \
        ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
        ansible-playbook -i /ansible/inventories/hosts.yml \
        --extra-vars '{
            "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
            "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
            "super_user":"'${SUPER_USER_NAME}'",
            "tarantool_shared_become_user":"tarantool",
            "wait_members_alive_retries":"'${CLUSTER_IS_HEALTHY_RETRIES}'",
            "wait_members_alive_delay":"'${CLUSTER_IS_HEALTHY_DELAY}'",
            "wait_cluster_has_no_issues_retries":"'${CLUSTER_IS_HEALTHY_RETRIES}'",
            "wait_cluster_has_no_issues_delay":"'${CLUSTER_IS_HEALTHY_DELAY}'",
            "update_batch_size":"'${UPDATE_BATCH_SIZE}'",
            "tarantool_active_hosts":"'${TARANTOOL_ACTIVE}'",
            "tarantool_reserve_hosts":"'${TARANTOOL_RESERVE}'",
            "tarantool_stateless_hosts":"'${TARANTOOL_STATELESS}'"
        }' \
        playbooks/reload_roles_2x.yml
    

Обязательные переменные:

  • tarantool_active_hosts (string) — группа хостов, которая состоит из экземпляров Tarantool в активном дата-центре. Активным является дата-центр, который принимает пользовательские запросы и включает в себя всех лидеров наборов реплик.

  • tarantool_passive_hosts (string) — хосты, не попавшие в tarantool_active_hosts. По своей сути является группой хостов, состоящей из всех экземпляров Tarantool в резервном дата-центре.

  • tarantool_stateless_hosts (string) - все остальные экземпляры Tarantool, которые не требуют обязательного обновления по плечам, например роутеры.

  • update_batch_size (number) — количество экземпляров, которые будут обновляются одновременно.

  • wait_members_alive_retries (number) — количество проверок доступности экземпляров.

  • wait_members_alive_delay (number) — время ожидания между проверками доступности экземпляров.

  • wait_cluster_has_no_issues_retries (number) — количество проверок консистентности кластера.

  • wait_cluster_has_no_issues_delay (number) — время ожидания между проверками консистентности кластера.

Tarantool Cluster Manager

Смотрите также: Примеры инвентарей TCM.

Tarantool Cluster Manager: Установка и запуск

Добавлено в версии 1.1.0.

Сценарий предназначен для развертывания, настройки и запуска продукта Tarantool Cluster Manager.

Команда для запуска сценария с помощью Docker-образа:

  • PATH_TO_PACKAGE - путь до директории с архивами.

  • TCM_PACKAGE_NAME — имя архива с поставкой Tarantool Cluster Manager.

  • HOSTS - указание группы хостов TCM, например clusters-manager из примера инвентаря.

docker run --network host -it --rm \
    -v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
    -v ${PATH_TO_INVENTORY}:/ansible/inventories/tcm.yml:Z \
    -v ${PATH_TO_PACKAGE}/${TCM_PACKAGE_NAME}:/ansible/packages/${TCM_PACKAGE_NAME}:Z \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/tcm.yml \
    --extra-vars '{
        "tcm_package_path":"/ansible/packages/'${TCM_PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tcm/install.yml

Tarantool Cluster Manager: Перезапуск

Добавлено в версии 1.1.0.

Команда для запуска сценария с помощью Docker-образа:

  • HOSTS - указание группы хостов TCM, например clusters-manager из примера инвентаря.

docker run --network host -it --rm \
    -v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
    -v ${PATH_TO_INVENTORY}:/ansible/inventories/tcm.yml:Z \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/tcm.yml \
    --extra-vars '{
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tcm/restart.yml

Tarantool Data Grid

Для развертывания, обновления и администрирования TDG используются сценарии из разделов Tarantool Cartridge и Общие сценарии администрирования. Смотрите также: Примеры инвентарей TDG.

Tarantool Data Grid: Обновление конфигурации

В продукте Tarantool Data Grid бизнес-логика поставляется в виде архива с конфигурацией. Этот сценарий загружает конфигурацию в кластер TDG.

  • TDG_CONFIG_DIR — полный путь к директории с конфигурациями TDG.

  • TDG_CONFIG_NAME — имя архива с конфигурацией, например my-app-config-1.0.0.zip.

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 \
    -v ${TDG_CONFIG_DIR}/${TDG_CONFIG_NAME}:/ansible/packages/${TDG_CONFIG_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e TDG_CONFIG_NAME=${TDG_CONFIG_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_app_config_path":"/ansible/packages/'${TDG_CONFIG_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
    }' \
    playbooks/tdg_config.yml

Tarantool Data Grid: Включение режима разработчика

Добавлено в версии 1.4.0.

Сценарий используется для включения (и отключения) режима разработчика в Tarantool Data Grid.

Сценарий может запускаться без лимита.

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}'",
        "tarantool_shared_become_user":"tarantool",
        "tdg_dev_mode":"true"
    }' \
    playbooks/switch_tdg_mode.yml

Обязательные переменные:

  • tdg_dev_mode (string) - флаг управления режимом разработчика: false (по умолчанию) - выключить DEV_MODE, true - включить DEV_MODE;

Важно

Для того что бы изменения вступили в силу, необходимо перезапустить экземпляр(ы) после вызова сценария switch_tdg_mode.yml.

Tarantool DB

Для развертывания, обновления и администрирования Tarantool DB используются следующие сценарии:

Смотрите также: Примеры инвентарей TDB.

Tarantool DB 1.x: Запуск модуля миграций

Сценарий предназначен исключительно для продукта Tarantool DB 1.x. Сценарий запускает процесс обновления схемы данных. Аналогичен сценарию миграции для Tarantool Enterprise Edition.

Подробная информация о миграциях приведена в документации по Tarantool и Tarantool DB.

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}'",
        "tarantool_shared_become_user":"tarantool",
    }' \
    playbooks/migrations.yml

Tarantool DB 1.x: Загрузка кода миграций через конфигурацию

Сценарий предназначен исключительно для продукта Tarantool DB 1.x. Сценарий загружает код миграций на Lua через конфигурацию кластера.

Важно

После выполнения данного сценария необходимо запустить миграции. См. сценарий Tarantool DB: Запуск модуля миграций.

  • PATH_TO_MIGRATIONS — путь до директории с миграциями на Lua.

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 \
    -v ${PATH_TO_MIGRATIONS}:/ansible/migrations \
    -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}'",
        "tarantool_migrations_directory":"/ansible/migrations/"
    }' \
    playbooks/upload_migrations.yml --limit ${LIMIT}

Обязательные переменные:

  • tarantool_migrations_directory (string) — директория c DDL-миграциями.

Tarantool Queue Enterprise (MQ)

Для развертывания Tarantool Queue Enterprise используются следующие сценарии:

Для обновления и администрирования TQE используются следующие сценарии:

Смотрите также: Примеры инвентарей TQE.

Tarantool Queue Enterprise (MQ): Установка кластерного приложения Tarantool 3.x с модулем API

Добавлено в версии 1.5.0.

  • Для установки кластерного приложения TQE на Tarantool 3.x используйте сценарий install_tqe_3_0.yml.

  • Для установки API TQE на Tarantool 3.x используйте сценарий install_api_3_0.yml.

Сценарий для установки и настройки продукта TQE (версия 1.10 и выше) и модуля Message Queue install_3_0.yml.

  • PATH_TO_INVENTORY — путь до файла.

  • PATH_TO_TQE_PACKAGE - путь до артефакта.

  • TQE_PACKAGE_NAME — имя архива с поставкой Tarantool Queue Enterprise.

  • HOSTS - группа хостов хранилищ очереди и API модуля.

Важно

В инвентаре задайте хостам API модуля переменную tarantool_grpc в значение true.

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 \
    -v ${PATH_TO_TQE_PACKAGE}:/ansible/packages/${TQE_PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e TQE_PACKAGE_NAME=${TQE_PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${TQE_PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tqe/install_3_0.yml

Tarantool Queue Enterprise (MQ): Установка кластерного приложения Tarantool Cartridge

Добавлено в версии 1.0.0.

Изменено в версии 1.1.0: Добавлен пример инвентаря.

Изменено в версии 1.5.0: Сценарии install_tqe.yml и install_tqe_api.yml функционируют до версии TQE 1.10 на Tarantool Cartridge.

Сценарий для установки и настройки продукта TQE и модуля Message Queue.

  • PATH_TO_INVENTORY — путь до файла.

  • PATH_TO_TQE_PACKAGE - путь до артефакта.

  • TQE_PACKAGE_NAME — имя архива с поставкой Tarantool Queue Enterprise.

  • HOSTS - группа хостов хранилищ очереди.

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 \
    -v ${PATH_TO_TQE_PACKAGE}:/ansible/packages/${TQE_PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e TQE_PACKAGE_NAME=${TQE_PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${TQE_PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tqe/install_tqe.yml

Tarantool Queue Enterprise (MQ): Установка модуля API для Tarantool Cartridge

Добавлено в версии 1.0.0.

Изменено в версии 1.5.0: Добавлена переменная tqe_binary_name.

  • tqe_binary_name - путь до исполняемого файла модуля API. Значение по умолчанию: bin/message-queue-ee.

({{ cartridge_app_instances_dir }}/{{ cartridge_app_name }}.{{ inventory_hostname }}/{{ tqe_binary_name }})

Сценарий для установки и настройки API части продукта Tarantool Queue Enterprise.

  • PATH_TO_INVENTORY — путь до файла инвентаря.

  • PATH_TO_TQE_PACKAGE - путь до артефакта.

  • TQE_PACKAGE_NAME — имя архива с поставкой Tarantool Queue Enterprise.

  • HOSTS - группа API-хостов.

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 \
    -v ${PATH_TO_TQE_PACKAGE}:/ansible/packages/${TQE_PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e TQE_PACKAGE_NAME=${TQE_PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "cartridge_package_path":"/ansible/packages/'${TQE_PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tqe/install_tqe_api.yml

Tarantool Clusters Federation

Смотрите также: Примеры инвентарей TCF.

Tarantool Clusters Federation: Установка и запуск

Изменено в версии 1.1.0: Сценарий переименован в tarantool.enterprise.tcf.install.

Изменено в версии 1.2.0: Изменено имя параметра конфигурации prometheus для Destination на http_server. Добавлена настройка logrotate для логов TCF.

Добавлено в версии 1.10.0: Добавлена возможность указать SSL-сертификаты для компонентов Destination и Gateway.

Добавлено в версии 1.11.0: Добавлена возможность указать alias для метрик компонентов Destination и Gateway (доступно с TCF 0.8.0). Добавлена возможность указать параметры truncate_collect_timeout и truncate_buffer_size в Destination для настройки выполнения операции TRUNCATE (доступно с TCF 0.9.0).

Добавлено в версии 1.11.0: Добавлена возможность включить метрики для компонента Gateway.

Добавлено в версии 1.11.0: Добавлены переменные tcf_authorization_provider и tcf_authorization_provider_params.

Сценарий предназначен для развертывания и настройки продукта Tarantool Clusters Federation. Tarantool Clusters Federation имеет собственный инвентарь, в котором описываются подключения к двум независимым кластерам Tarantool.

Стенд с Tarantool Clusters Federation состоит из кластеров Tarantool, межкластерных репликаторов данных (компоненты Gateway и Destination) и хранилища конфигурации и состояния кластеров (etcd). Обратите внимание, что перед запуском данного сценария необходимо развернуть:

  • кластер etcd для хранения конфигурации и состояния кластеров;

  • кластеры Tarantool, поверх которых будет запущен Tarantool Clusters Federation.

Порядок действий:

  1. Установите TCF:

    • PATH_TO_INVENTORY — путь до файла инвентаря приложения на Tarantool EE.

    • PATH_TO_TCF_INVENTORY — путь до файла инвентаря самого TCF.

    • TCF_PACKAGE_NAME — имя архива с поставкой Tarantool Clusters Federation.

    • HOSTS - указание группы хостов TCF, например tcf из примера инвентаря.

    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 \
        -v ${PATH_TO_TCF_INVENTORY}:/ansible/inventories/tcf.yml:Z \
        -v ${PATH_TO_TCF_PACKAGE}:/ansible/packages/${TCF_PACKAGE_NAME}:Z \
        -e SUPER_USER_NAME=${SUPER_USER_NAME} \
        -e TCF_PACKAGE_NAME=${TCF_PACKAGE_NAME} \
        ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
        ansible-playbook \
        -i /ansible/inventories/tcf.yml \
        -i /ansible/inventories/hosts.yml \
        --extra-vars '{
            "tcf_package_path":"/ansible/packages/'${TCF_PACKAGE_NAME}'",
            "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
            "super_user":"'${SUPER_USER_NAME}'",
            "tarantool_shared_become_user":"tarantool",
            "tarantool_shared_hosts":"'${HOSTS}'",
        }' \
        playbooks/tcf/install.yml
    

    Сценарий также настраивает автоматическую ротацию журналов. Настройку ротации можно отключить, если выставить значение переменной tarantool_configure_logrotate в false.

  2. После установки TCF настройте кластерные приложения. Для этого выполните сценарий Изменение настроек кластера (сценарий settings.yml).

    • Для кластеров Tarantool 2.x на основе Cartridge необходимо добавить в инвентарь каждого из кластеров секцию cartridge_app_config.cluster_federation. Пример:

      cartridge_app_config:
        cluster_federation:
          body:
            cluster_1: cluster_a
            cluster_2: cluster_b
            initial_status: active
            replication_password: "password"
            replication_user: replicator
            failover_timeout: 6
            max_suspect_counts: 3
            health_check_delay: 1
      

      Здесь:

      • собственное имя кластера равно значению параметра cluster_1.

      • параметры replication_user и replication_password должны соответствовать значениям tcf_user и tcf_user_password из инвентаря TCF.

      Значения параметров cluster_1 и cluster_2 должны быть зеркальными, то есть на втором кластере конфигурация будет следующая:

      cartridge_app_config:
        cluster_federation:
          body:
            cluster_1: cluster_b
            cluster_2: cluster_a
            initial_status: active
            replication_password: "password"
            replication_user: replicator
            failover_timeout: 6
            max_suspect_counts: 3
            health_check_delay: 1
      
    • Для кластеров на основе Tarantool 3.x необходимо добавить в инвентарь каждого из кластеров секции с настройками ролей roles.tcf-coordinator (задается на роутерах) и roles.tcf-worker (задается на всех узлах). Пример:

      roles_cfg:
        roles.tcf-worker:
          cluster_1: cluster_a
          cluster_2: cluster_b
          initial_status: active
          dml_users: [ tcf-dml ]
          replication_user: tcf-replicator
          replication_password: secret
          status_ttl: 4
          enable_system_check: true
        roles.tcf-coordinator:
          failover_timeout: 20
          health_check_delay: 2
          max_suspect_counts: 3
      

      Здесь:

      • собственное имя кластера равно значению параметра cluster_1.

      • параметры replication_user и replication_password должны соответствовать значениям tcf_user и tcf_user_password из инвентаря TCF.

      Значения параметров cluster_1 и cluster_2 должны быть зеркальными, то есть на втором кластере конфигурация будет следующая:

      roles_cfg:
        roles.tcf-worker:
          cluster_1: cluster_b
          cluster_2: cluster_a
          initial_status: passive
          dml_users: [ tcf-dml ]
          replication_user: tcf-replicator
          replication_password: secret
          status_ttl: 4
          enable_system_check: true
        roles.tcf-coordinator:
          failover_timeout: 20
          health_check_delay: 2
          max_suspect_counts: 3
      

Добавлено в версии 1.14.0: Добавлена поддержка TQE 3.x при отсутствии в инвентаре секций конфигурации grpc_port и publisher.

Поддержка TQE 3.x предназначена для работы с новым форматом конфигурации.

Определение режима конфигурации (legacy vs new):

  • Старый формат — ATE считает, что нужно сформировать конфигурацию TQE 2.x, если в конфигурации кластера TQE указаны секции grpc_port, grpc_host или publisher.

  • Новый формат — используется, если в конфигурации отсутствуют маркеры старого формата (grpc_port и publisher), даже если секция consumer не задана.

Поведение в режимах

Старый режим

Новый режим

Tarantool Clusters Federation: Пример инвентаря

Изменено в версии 1.1.0: Добавлен пример инвентаря.

Добавлено в версии 1.10.0: Добавлен пример указания SSL-сертификатов для компонентов Destination и Gateway.

Добавлено в версии 1.11.0: Добавлен пример указания alias для метрик компонентов Destination и Gateway. Добавлен пример указания опций truncate_collect_timeout и truncate_buffer_size для компонента Destination.

Добавлено в версии 1.11.0: Добавлена возможность указать destination.gateway.dial_timeout с помощью переменной tcf_dial_timeout в инвентаре.

Добавлено в версии 1.13.0: Добавлена поддержка параметра destination.gateways компонента Destination через переменную tcf_gateways

Добавлена поддержка параметров destination.storage и destination.storage_params.

Инвентарь представлен для топологии, где есть два кластера: Cluster A и Cluster B. TCF настроен на двустороннюю синхронизацию изменений.

Важно

Группы gateway и destination обязательны. Они отвечают за тип экземпляра TCF соответственно и используются во всех сценариях.

Для настройки безопасного соединения на протоколах GRPC и HTTP добавьте следующие три переменные в инвентарь:

tcf_ssl_cert_file: /path/to/server.crt
tcf_ssl_key_file: /path/to/server.key
tcf_ssl_ca_file: /path/to/ca.crt

Для настройки лейбла alias метрик компонентов Gateway и Destination (доступно с TCF 0.8.0) добавьте следующие переменные в инвентарь:

tcf_gateway_alias: gateway_a_b
tcf_destination_alias: destination_a_b

Для указания экземпляров компонента Gateway добавьте следующие переменные в инвентарь:

tcf_gateways:
  - host: gateway-a.example.org
    port: 8080
  - host: gateway-b.example.org
    port: 8080

Для подключения Destination к хранилищу добавьте следующие переменные в инвентарь:

tcf_destination_storage: etcd_v2
tcf_destination_storage_endpoints:
  - host: "{{ tarantool_etcd_host }}"
    port: 2379
tcf_destination_storage_prefix: /tcf
tcf_destination_storage_ttl: 30

Для настройки опций truncate_collect_timeout и truncate_buffer_size компонента Destination (доступно с TCF 0.9.0) добавьте следующие переменные в инвентарь:

tcf_destination_truncate_collect_timeout: '1m'
tcf_destination_truncate_buffer_size: 100000
  • tcf_destination_truncate_collect_timeout — это время, за которое ожидается получение события truncate с каждого из шардов кластера-источника, начиная с первого такого события. Тип значения - строка в формате число с единицей измерения (s - секунды, m - минуты, h - часы и т.д.).

  • tcf_destination_truncate_buffer_size - размер буфера с событиями, собираемые после операции TRUNCATE, которые будут применены после его выполнения. Тип значения - число, измеряется в количестве событий.

Для настройки авторизации на TCF Gateway/Destination, укажите в инвентаре TCF следующие параметры. Обратите внимание, что эти параметры будут добавлены ко всем Destination и Gateway. Для настройки воркеров кластера, передайте нужную настройку в конфигурацию кластера, как показано ниже.

tcf_authorization_provider: "keycloak"
tcf_authorization_provider_params:
   provider_params:
     url: "https://keycloak.example.com/"
     roles:
       info: ORDERDB_TCF_INFO     # default TCF_INFO
       toggle: ORDERDB_TCF_TOGGLE # default TCF_TOGGLE
       admin: ORDERDB_TCF_ADMIN   # default TCF_ADMIN
     ssl:
       ca_file: "/etc/ssl/certs/keycloak-ca.pem"
       cert_file: "/etc/ssl/certs/client.pem"
       key_file: "/etc/ssl/private/client-key.pem"

Если необходимо включить авторизацию для воркера, укажите её в соответствии с документацией TCF наравне с остальной конфигурацией: Чтобы настроить шифрование для исходящих запросов HTTP, если включена авторизация на репликаторе (Gateway/Destination), раскомментируйте параметры client_id, client_secret_path, realm:

roles_cfg:
  roles.tcf-worker:
    authorization:
      provider: keycloak
      provider_params:
        url: "https://keycloak.example.com/"
        roles:
          info: ORDERDB_TCF_INFO     # default TCF_INFO
          toggle: ORDERDB_TCF_TOGGLE # default TCF_TOGGLE
          admin: ORDERDB_TCF_ADMIN   # default TCF_ADMIN
        ssl:
          ca_file: "/etc/ssl/certs/keycloak-ca.pem"
          cert_file: "/etc/ssl/certs/client.pem"
          key_file: "/etc/ssl/private/client-key.pem"
        # client_id: "client"
        # client_secret_path: "/path/to/file"
        # realm: "myrealm"

Или в случае работы с Cartridge:

cartridge_app_config:
  clusters_federation:
    authorization:
      provider: keycloak
      provider_params:
        url: "https://keycloak.example.com/"
        roles:
          info: ORDERDB_TCF_INFO     -- default TCF_INFO
          toggle: ORDERDB_TCF_TOGGLE -- default TCF_TOGGLE
          admin: ORDERDB_TCF_ADMIN   -- default TCF_ADMIN
        ssl:
          ca_file: "/etc/ssl/certs/keycloak-ca.pem"
          cert_file: "/etc/ssl/certs/client.pem"
          key_file: "/etc/ssl/private/client-key.pem"
        # client_id: "client"
        # client_secret_path: "/path/to/file"
        # realm: "myrealm"

Tarantool Clusters Federation: Обновление

Добавлено в версии 1.1.0.

Сценарий предназначен для обновления версии продукта Tarantool Clusters Federation. После развертывания новой версии происходит перезапуск всех экземпляров TCF.

  • PATH_TO_INVENTORY — путь до файла инвентаря приложения на Tarantool EE.

  • PATH_TO_TCF_INVENTORY — путь до файла инвентаря самого TCF.

  • TCF_PACKAGE_NAME — имя архива с поставкой Tarantool Clusters Federation.

  • HOSTS - указание группы хостов TCF, например tcf из примера инвентаря.

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 \
    -v ${PATH_TO_TCF_INVENTORY}:/ansible/inventories/tcf.yml:Z \
    -v ${PATH_TO_TCF_PACKAGE}:/ansible/packages/${TCF_PACKAGE_NAME}:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    -e TCF_PACKAGE_NAME=${TCF_PACKAGE_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook \
    -i /ansible/inventories/tcf.yml \
    -i /ansible/inventories/hosts.yml \
    --extra-vars '{
        "tcf_package_path":"/ansible/packages/'${TCF_PACKAGE_NAME}'",
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tcf/update.yml

Tarantool Clusters Federation: Перезапуск

Добавлено в версии 1.1.0.

Сценарий предназначен для перезапуска всех экземпляров Tarantool Clusters Federation.

  • PATH_TO_TCF_INVENTORY — путь до файла инвентаря самого TCF.

  • TCF_PACKAGE_NAME — имя архива с поставкой Tarantool Clusters Federation.

  • HOSTS - указание группы хостов TCF, например tcf из примера инвентаря.

docker run --network host -it --rm \
    -v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
    -v ${PATH_TO_TCF_INVENTORY}:/ansible/inventories/tcf.yml:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook \
    -i /ansible/inventories/tcf.yml \
    --extra-vars '{
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tcf/restart.yml --limit ${LIMIT}

Значение LIMIT может быть, например, tcf-host-3 – экземпляр типа gateway из примера.

Примечание

Если требуется перезапустить только репликатор данных Destination, обратитесь к разделам Перезапуск репликатора и Перезапуск репликатора с повторной инициализацией в руководстве администратора TCF.

Tarantool Clusters Federation: Остановка

Добавлено в версии 1.1.0.

Сценарий предназначен для остановки всех экземпляров Tarantool Clusters Federation.

  • PATH_TO_TCF_INVENTORY — путь до файла инвентаря самого TCF.

  • TCF_PACKAGE_NAME — имя архива с поставкой Tarantool Clusters Federation.

  • HOSTS - указание группы хостов TCF, например tcf из примера инвентаря.

docker run --network host -it --rm \
    -v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
    -v ${PATH_TO_TCF_INVENTORY}:/ansible/inventories/tcf.yml:Z \
    -e SUPER_USER_NAME=${SUPER_USER_NAME} \
    ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
    ansible-playbook \
    -i /ansible/inventories/tcf.yml \
    --extra-vars '{
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_shared_hosts":"'${HOSTS}'",
    }' \
    playbooks/tcf/stop.yml --limit ${LIMIT}

Tarantool Column Store

Для развертывания Tarantool Column Store используется сценарий из раздела Tarantool Column Store: Установка приложения. Для обновления и администрирования TCS используются сценарии из разделов Tarantool 3.x и Общие сценарии администрирования.

Смотрите также: Примеры инвентарей TCS.

Tarantool Column Store: Установка приложения

Добавлено в версии 1.2.0.

Изменено в версии 1.4.1: Сценарий установки работает для версии TCS на Tarantool 3.x.

Продукт TCS состоит из кластера Tarantool 3.x и API-сервиса под названием Scheduler. Каждый компонент развертывается отдельно.

Порядок действий:

  1. Установите кластерное хранилище.

    • PATH_TO_INVENTORY — путь до файла инвентаря.

    • PATH_TO_PACKAGE - путь до артефакта.

    • PACKAGE_NAME — имя архива с поставкой Tarantool Column Store.

    • HOSTS - группа хостов кластерного хранилища.

    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 \
        -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
        -e SUPER_USER_NAME=${SUPER_USER_NAME} \
        -e PACKAGE_NAME=${PACKAGE_NAME} \
        ansible-tarantool-enterprise:latest \
        ansible-playbook -i /ansible/inventories/hosts.yml \
        --extra-vars '{
            "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
            "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
            "super_user":"'${SUPER_USER_NAME}'",
            "tarantool_shared_become_user":"tarantool",
            "tarantool_shared_hosts":"'${HOSTS}'",
        }' \
        playbooks/tcs/install.yml
    

Добавлено в версии 1.12.0: Добавлены переменные для установки TCS 1.x

  • tcs_v1_support (bool) - установите значение true, если используете динамический инвентарь для установки TCS 1.x.

  • tcs_http_credentials (object) - задайте username и password для секции конфигурации roles_cfg.app/aggregator_role.http.credentials, если используете динамический инвентарь для установки TCS 1.x.

  • tcs_sql_credentials (object) - задайте username и password для секции конфигурации roles_cfg.app/aggregator_role.arrow_flight_sql.credentials, если используете динамический инвентарь для установки TCS 1.x.

  • tcs_http_enabled (bool) - задайте значение false, если хотите отключить поддержку http-запросов для TCS. Значение по умолчанию: true.

  1. Только для версии < 1.0. Запустите сценарий установки API-сервиса. Он входит в поставку TCS и устанавливается из того же артефакта.

    Обратите внимание на переменную tarantool_shared_hosts: она указывает, какие из хостов в инвентаре являются API-сервисами. Можно указать группу.

    • HOSTS - группа API сервисов.

    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 \
        -v ${PATH_TO_PACKAGE}:/ansible/packages/${PACKAGE_NAME}:Z \
        -e SUPER_USER_NAME=${SUPER_USER_NAME} \
        -e PACKAGE_NAME=${PACKAGE_NAME} \
        ansible-tarantool-enterprise:latest \
        ansible-playbook -i /ansible/inventories/hosts.yml \
        --extra-vars '{
            "cartridge_package_path":"/ansible/packages/'${PACKAGE_NAME}'",
            "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
            "super_user":"'${SUPER_USER_NAME}'",
            "tarantool_shared_become_user":"tarantool",
            "tarantool_shared_hosts":"'${HOSTS}'",
        }' \
        playbooks/tcs/install_scheduler.yml
    

Изменено в версии 1.14.0: Добавлены новые способы расширения конфигурации API-сервиса Scheduler: tcs_additional_config и tcs_scheduler_config_template.

  • tcs_additional_config (object) — дополнительные опции конфигурации, которые автоматически добавляются в конец сгенерированного YAML-конфига Scheduler. Поддерживаются словарь или список (mapping/sequence), которые сериализуются в YAML.

  • tcs_scheduler_config_template (string, путь к Jinja2-шаблону на контроллере) — полностью заменяет встроенный шаблон конфигурации Scheduler. Если переменная задана, роль использует указанный файл вместо roles/tcs/templates/tcs-scheduler-config.yml.j2.

Пример указания переменных tcs_additional_config и tcs_scheduler_config_template в динамическом инвентаре

constants:
  tcs_additional_config:
    metadata:
      environment: "test"
      generated_by: "ATE"

  tcs_scheduler_config_template: "/home/user/custom-templates/my-scheduler.yml.j2"

Tarantool Column Store 0.x: Пример инвентаря

Добавлено в версии 1.2.0.

Изменено в версии 1.4.0: Изменены имена полей конфигурации для версий TCS 0.15.1 и новее. depth -> index_depth, should_index -> indexed, arrow_data_type -> data_type.

Добавлено в версии 1.10.0: Добавлена возможность использования параметров features и metrics в scheduler. Features можно задавать в переменной tcs_scheduler_features через список (tcs_scheduler_features: [«experimental_api»]). Дополнительно включать/выключать features можно через переменную tcs_scheduler_features_enabled, если в переменной tcs_scheduler_features не заданы features то tcs_scheduler_features_enabled автоматически становится в значени$ Метрики также можно включать/выключать через переменную tcs_scheduler_metrics_enabled.

Изменено в версии 1.10.0: TCS обновлен до версии 0.27.0, поддержка версий младше 0.27 не гарантируется.

Tarantool Column Store 1.x: Пример динамического инвентаря

Примечание

Текущий пример и пример статического инвентаря можно найти в разделе «Примеры инвентарей».

Примечание

Обратите внимание, для корректной генерации инвентаря TCS 1.x необходимо указать переменную tcs_v1_support: true.

---
plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: TCS

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: tcs
  tarantool_etcd_host: "{{ tarantool_etcd_host }}"
  tcs_v1_support: true
  tcs_storage_group_name: aggregator
  tcs_storage_replicaset_name: aggregator-r01
  tarantool_wait_alive_delay: 2
  tarantool_wait_alive_retries: 50
  cartridge_extra_env:
    TCS_REPL_PASS: super-secret
  tcs_extra_env:
    TOKIO_WORKER_THREADS: 1
  tarantool_config_global:
    fiber:
      slice:
        err: 15
    credentials:
      users:
        replicator:
          password: "{% raw %}{{ context.replicator_password }}{% endraw %}"
          roles: [replication]
          privileges:
            - permissions: [execute]
              functions: [failover.execute]
        client:
          password: 'secret'
          roles: [super]
    memtx:
      memory: 114748364
    config:
      context:
        replicator_password:
          from: env
          env: TCS_REPL_PASS
    iproto:
      advertise:
        peer:
          login: 'replicator'
    compat:
      box_error_serialize_verbose: "new"
    failover:
      call_timeout: 1
      connect_timeout: 1
      lease_interval: 10
      probe_interval: 1
      renew_interval: 10
      stateboard:
        keepalive_interval: 15
        renew_interval: 3

servers:
  - name: 'vm_1'
    host: '{{ tarantool_ansible_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
    zone: 'DC2'
    port_starts:
      iproto: 3444
      http: 8091

components:
  - name: coordinator
    replicasets: 1
    replicas: 2
  - name: aggregator
    replicasets: 1
    replicas: 2
    port_starts:
      http_streaming: 9081
    config:
      aggregator:
        rv_update_ms: 100
      replicaset:
        replication:
          failover: supervised
      group:
        roles: [app/aggregator_role, app/etcd_stateboard_client]
        roles_cfg:
          app/aggregator_role:
            tcs:
              aggregator:
                rv_update_ms: 100

Tarantool Column Store: Перезапуск экземпляров Scheduler API

Добавлено в версии 1.2.0.

  • LIMIT - группа хостов или индивидуальный хост, который вы хотите перезапустить.

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:latest \
    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_shared_become_user":"tarantool",
    }' \
    playbooks/tcs/restart.yml --limit ${LIMIT}

Общие сценарии администрирования

Эти сценарии применимы для всех продуктов из линейки Tarantool Enterprise.

Примечание

Указание LIMIT обязательно для сценариев start, stop, restart, rebootstrap, force recovery.

Запуск экземпляр(ов)

Примечание

Сценарий работает для кластера Tarantool 3.x с указанием переменной tarantool_3_0_version_support: true.

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/start.yml --limit ${LIMIT}

Остановка экземпляра(ов)

Примечание

Сценарий работает для кластера Tarantool 3.x с указанием переменной tarantool_3_0_version_support: true.

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/stop.yml --limit ${LIMIT}

Перезагрузка экземпляра(ов)

Сценарий принудительно перезапускает указанные экземпляры Tarantool.

Примечание

Сценарий работает для кластера Tarantool 3.x с указанием переменной tarantool_3_0_version_support: true.

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/restart.yml --limit ${LIMIT}

Автоматическое резервирование

Изменено в версии 1.5.0: Добавлена поддержка версии Tarantool-3.x .

Изменено в версии 1.10.2: Добавлены переменные tarantool_backup_wait_snapshot_timeout и tarantool_backup_wait_snapshot_delay для ожидания окончания snapshot в случае, если snapshot создается на момент запуска процедуры резервирования.

Изменено в версии 1.14.0: Добавлена поддержка резервного копирования кластеров Tarantool с использованием централизованного хранилища конфигурации (Tarantool Config Storage). Теперь при указании переменной tarantool_3_0_version_support: true сценарий резервирования может получать кластерную конфигурацию не только из etcd, но и напрямую из Tarantool Config Storage (по переменным tarantool_config_storage_*).

Примечание

Сценарий работает для кластера Tarantool 3.x с указанием переменной tarantool_3_0_version_support: true.

В сценарии резервирования архивируются рабочие директории экземпляров Tarantool и конфигурационные файлы.

Количество параллельных задач по умолчанию равно 1, то есть все экземпляры будут обрабатываться последовательно. Изменить можно с помощью переменной tarantool_ansible_serial_executors.

Порядок резервирования произвольный.

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_BACKUP_DIRECTORY=${PATH_TO_BACKUP_DIRECTORY} \
  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_shared_become_user":"tarantool",
      "tarantool_remote_backups_dir":"'${PATH_TO_BACKUP_DIRECTORY}'"
  }' \
  playbooks/backup.yml

Обязательные переменные:

Дополнительные переменные:

Автоматическое восстановление

Изменено в версии 1.5.0: Добавлена возможность восстанавливать экземпляры из бэкапа, ближайшего к указанному времени с использованием переменной backup_time.

Изменено в версии 1.5.0: Добавлена поддержка версии Tarantool-3.x .

Примечание

Сценарий работает только на выключенном экземпляре. Перед восстановлением запустите сценарий stop.yml. После восстановления запустите сценарий start.yml.

Примечание

Сценарий работает для кластера Tarantool 3.x с указанием переменной tarantool_3_0_version_support: true.

Сценарий используется для восстановления из резервных копий, созданных с помощью Ansible Tarantool Enterprise.

Количество параллельных задач по умолчанию равно 1, то есть все экземпляры будут обрабатываться последовательно. Изменить можно с помощью переменной tarantool_ansible_serial_executors.

Порядок восстановления произвольный.

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_BACKUP_DIRECTORY=${PATH_TO_BACKUP_DIRECTORY} \
  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_shared_become_user":"tarantool",
      "tarantool_remote_backups_dir":"'${PATH_TO_BACKUP_DIRECTORY}'"
  }' \
  playbooks/restore.yml

Обязательные переменные:

Дополнительные переменные:

Включение режима резервирования экземпляра(ов)

Сценарий используется для перевода экземпляра(ов) кластера в режим резервирования. На сервере инсталлятора создаются текстовые файлы по каждому физическому серверу. Файлы содержат список путей, необходимых для создания резервной копии конкретного сервера.

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_BACKUP_DIRECTORY=${PATH_TO_BACKUP_DIRECTORY} \
    -e PATH_TO_WRITE_BACKUP_LIST_FILES="/tmp" \
    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_shared_become_user":"tarantool",
        "path_to_write_backup_list_files":"'${PATH_TO_WRITE_BACKUP_LIST_FILES}'"
    }' \
    playbooks/backup_start.yml --limit ${LIMIT}

Выключение режима резервирования экземпляра(ов)

Сценарий используется для выключения режима резервирования экземпляра(ов) кластера.

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_BACKUP_DIRECTORY=${PATH_TO_BACKUP_DIRECTORY} \
    -e PATH_TO_WRITE_BACKUP_LIST_FILES="/tmp" \
    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_shared_become_user":"tarantool",
        "path_to_write_backup_list_files":"'${PATH_TO_WRITE_BACKUP_LIST_FILES}'"
    }' \
    playbooks/backup_stop.yml --limit ${LIMIT}

Переключение лидера в наборах реплик

Примечание

Параметр LIMIT указывает, какие экземпляры Tarantool должны стать лидерами.

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/switch_leaders_to.yml --limit ${LIMIT}

Выбор лидера в наборах реплик

Важно

Может быть использован только в случае election replication.failover

Примечание

Параметр LIMIT указывает, какие экземпляры Tarantool должны стать лидерами.

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}'",
      "tarantool_shared_become_user":"tarantool",
      "promote_timeout": 30,
  }' \
  playbooks/promote_leader.yml --limit ${LIMIT}

Дополнительные переменные:

Проверка работоспособности

Сценарий запрашивает произвольный экземпляр кластера о наличии issues в Tarantool Cartridge.

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/check_is_healthy.yml

Ожидание работоспособности

Изменено в версии 1.3.0: Добавлена возможность игнорировать критические ошибки в кластере (allow_critical_issues).

Сценарий запрашивает произвольный экземпляр кластера о наличии issues в Tarantool Cartridge в течение указанного времени.

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}'",
        "tarantool_shared_become_user":"tarantool"
    }' \
    playbooks/wait_is_healthy.yml

Регулируйте поведение с помощью следующих переменных:

Восстановление экземпляра

Сценарий используется для игнорирования ошибок при восстановлении из snapshot- и WAL-файлов. Опцию нельзя оставлять включенной по умолчанию. Сценарий временно устанавливает значение в true и возвращает обратно после запуска экземпляра.

Подробности про механизм восстановления см. в документации по Tarantool.

Примечание

Параметр LIMIT обязателен. Указывает, какие экземпляры Tarantool необходимо запустить с опцией force_recovery = true.

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}'",
      "tarantool_shared_become_user":"tarantool"
  }' \
  playbooks/force_recovery.yml --limit ${LIMIT}

Восстановление экземпляра Tarantool 3.x

Сценарий set_force_recovery_3x.yml включает переменную окружения TT_FORCE_RECOVERY=true через systemd override для указанных экземпляров Tarantool 3.x. Это позволяет запустить инстанс даже при повреждённых .snap файлах.

Также предусмотрена опциональная генерация snapshot и перезапуск в обычном режиме после восстановления.

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}'",
      "tarantool_shared_become_user":"tarantool",
      "tarantool_shared_hosts":"vm_1",
      "tarantool_snapshot":true
  }' \
  playbooks/set_force_recovery_3x.yml

Переменные:

Пересоздание экземпляра

Изменено в версии 1.10.2: Сценарий работает с продуктами на основе Tarantool 3.

Примечание

Параметр –limit обязателен.

Вариант 1: Продукты на основе Tarantool 3.x (TDB 2.x, TCS, TQE)

Сценарий используется для пересоздания экземпляра из мастера продуктов на основе Tarantool 3.x.

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}'",
      "tarantool_shared_become_user":"tarantool",
      "tarantool_3_0_version_support":true
  }' \
  playbooks/rebootstrap.yml --limit ${LIMIT}

Обязательные переменные:

  • tarantool_3_0_version_support (bool) — поддержка Tarantool 3. Обязательное значение – true.

Дополнительные переменные:

  • tarantool_wait_alive_retries (integer) — количество повторных проверок доступности экземпляра Tarantool после рестарта.

  • tarantool_wait_alive_delay (integer) — время ожидания (в секундах) между проверками доступности экземпляра.

Вариант 2: Приложения на основе Tarantool Cartridge

Вариант запуска в случае использования Tarantool Cartridge.

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}'",
      "tarantool_shared_become_user":"tarantool"
  }' \
  playbooks/rebootstrap.yml --limit ${LIMIT}

Изменение настроек кластера

Сценарий используется для изменения настроек экземпляров кластера.

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}'",
      "tarantool_shared_become_user":"tarantool"
  }' \
  playbooks/settings.yml --limit ${LIMIT}

Изменение настроек кластера в runtime

Сценарий используется только при аварийно-восстановительных работах, для целей тестирования и при разработке. Позволяет менять только динамические настройки: box.cfg() и cartridge.cfg().

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 CLUSTER_NEW_SETTINGS=${CLUSTER_NEW_SETTINGS} \
    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_shared_become_user":"tarantool",
        "cluster_new_settings":"'${CLUSTER_NEW_SETTINGS}'",
    }' \
    playbooks/runtime_settings.yml --limit ${LIMIT}

Обязательные переменные:

Исключение экземпляра(ов) из кластера

Добавлено в версии 1.4.0.

Сценарий включает два варианта исключения экземпляров из кластера Tarantool:

  1. Исключение одного или нескольких экземпляров.

  2. Исключение целого набора реплик.

Запуск сценария в Docker для исключения одного/нескольких экземпляров

На исключаемых экземплярах в инвентаре добавляем expelled: true.

Пример конфигурации:

  hosts:
    kvee-r01-s01:
      config:
        advertise_uri: localhost:3401
        http_port: 8080
        log: /app/logs/kvee/kvee-r01-s01.log
        vinyl_cache: 0
        vinyl_memory: 0
      expelled: true

Запуск сценария исключения

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/expel_instances.yml

Запуск сценария в Docker для исключения целого набора реплик

На исключаемом наборе в инвентаре добавляем weight: 0.

Пример конфигурации:

  replicaset_vag_storage_02:
    hosts:
      kvee-r02-s01:
      kvee-r02-s02:
    vars:
      failover_priority:
        - kvee-r02-s02
        - kvee-r02-s01
      replicaset_alias: vag-storage-02
      roles:
        - vshard-storage
        - crud-storage
        - metrics
        - expirationd
      weight: 0

Запуск сценария исключения

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/expel_instances.yml

Важно

При исключении набора реплик целиком обязательно дождитесь, пока все данные перетекут в другие наборы. Это можно наблюдать в web-интерфейсе кластера.

Добавьте параметр expelled: true для исключаемого набора реплик.

Пример конфигурации:

  replicaset_vag_storage_02:
    hosts:
      kvee-r02-s01:
      kvee-r02-s02:
    vars:
      failover_priority:
        - kvee-r02-s02
        - kvee-r02-s01
      replicaset_alias: vag-storage-02
      roles:
        - vshard-storage
        - crud-storage
        - metrics
        - expirationd
      weight: 0
      expelled: true

Запуск сценария исключения

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/expel_instances.yml

Примечание

После выполнение сценария рекомендуется проверить работоспособность кластера с помощью сценария check_is_healthy.yml.

Управление пользователями Tarantool

Добавлено в версии 1.3.0.

Сценарий предназначен для управления пользователями в Tarantool. Поддерживает три основные функции:

  1. Создание пользователей.

  2. Удаление пользователей.

  3. Назначение пользователям прав доступа к объектам.

Для управления сценарием используется переменная tarantool_users.

Переменная tarantool_users содержит список пользователей Tarantool, каждый из которых может иметь следующие поля:

Задать переменную можно следующим образом:

  1. В инвентаре:

    Укажите tarantool_users или tarantool_users_file_path непосредственно в вашем инвентаре.

  2. В --extra-vars:

    При запуске сценария передайте переменную tarantool_users с помощью extra vars.

  3. В файле (JSON, YAML):

    Создайте файл с пользователями (например, tarantool_users_example.yml) и укажите путь к этому файлу в переменной tarantool_users_file_path.

    Пример файла tarantool_users_example.yml

    tarantool_users:
      - name: tarantool_user_1
        password: Password123
      - name: tarantool_user_2
        state: absent
      - name: tarantool_user_3
        grant:
          - permissions: "read,create"
            object_type: space
            object_name: _user
          - permissions: "read,create,execute"
            object_type: space
            object_name: _user
    

Пример запуска сценария в Docker с использованием файла tarantool_users_example.yml

Пример запуска сценария в Docker с использованием --extra-vars

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-playbook -i /ansible/inventories/hosts.yml \
    --extra-vars  '{
        "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
        "super_user":"'${SUPER_USER_NAME}'",
        "tarantool_shared_become_user":"tarantool",
        "tarantool_users": [
            {
                "name": "tarantool_user_1",
                "password": "Password123",
                "state": "present"
            },
            {
                "name": "tarantool_user_2",
                "state": "absent"
            },
            {
                "name": "tarantool_user_3",
                "state": "present",
                "grant": [
                    {
                        "permissions": "read,create",
                        "object_type": "space",
                        "object_name": "_user"
                    },
                    {
                        "permissions": "read,create,execute",
                        "object_type": "space",
                        "object_name": "_user"
                    }
                ]
            }
        ]
    }' \
    playbooks/manage_tarantool_users.yml

Пример запуска сценария в Docker с использованием зашифрованного файла tarantool_users_example.yml

Чтобы сохранить конфиденциальные данные, можно использовать инструмент шифрования Ansible Vault.

  1. Зашифруйте файл:

    ansible-vault encrypt ${PATH_TO_TARANTOOL_USERS}
    
  2. Отредактируйте файл:

    ansible-vault edit ${PATH_TO_TARANTOOL_USERS}
    
  3. Запустите сценарий с зашифрованным файлом:

    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 \
        -v ${PATH_TO_TARANTOOL_USERS}:/ansible/tarantool_users_example.yml:Z \
        -e SUPER_USER_NAME=${SUPER_USER_NAME} \
        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_shared_become_user":"tarantool",
            "tarantool_users_file_path":"/ansible/tarantool_users_example.yml"
        }' \
        --ask-vault-pass \
        playbooks/manage_tarantool_users.yml
    

Изменение паролей пользователей Tarantool Enterprise

Сценарий используется для изменения паролей пользователей Tarantool (задаются через box.schema.user).

Пользователь должен существовать. Создание пользователя и назначение ему прав рекомендуется делать через сценарий управления пользователями Tarantool.

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 NEW_USERS_CREDENTIALS=${NEW_USERS_CREDENTIALS} \
    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_shared_become_user":"tarantool",
        "new_users_credentials":"'${NEW_USERS_CREDENTIALS}'",
    }' \
    playbooks/change_credentials.yml

Обязательные переменные:

Сбор логов экземпляров Tarantool, TCF, TQE API

Добавлено в версии 1.6.0.

Этот сценарий используется для сбора логов экземпляров Tarantool, TCF, TQE API с удаленных хостов и сохранения их на локальной машине.

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 TARANTOOL_COLLECTED_LOGS_LOCAL_PATH=${TARANTOOL_COLLECTED_LOGS_LOCAL_PATH} \
    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",
        "tarantool_collected_logs_local_path":"'${TARANTOOL_COLLECTED_LOGS_LOCAL_PATH}'",
    }' \
    playbooks/collect_logs.yml

Обязательные переменные:

Описание сценария:

  1. Создание директории для логов на локальной машине:

    • Проверяет наличие указанной директории на локальной машине и создает её, если она отсутствует.

    • Путь к директории указывается в переменной tarantool_collected_logs_local_path.

  2. Сбор логов экземпляров на локальный хост:

    • Сохраняет логи экземпляров с удаленных хостов в указанную директорию на локальной машине.

    • Логи собираются из путей, указанных в переменных продукта и сохраняются в директорию tarantool_collected_logs_local_path.

Применение миграций с помощью tt CLI

Добавлено в версии 1.7.0.

Добавлено в версии 1.10.0: Добавлена возможность применять миграции для кластера на базе Tarantool Config Storage. Для этого в качестве tt_etcd_host укажите хост Tarantool Config Storage, в качестве tt_etcd_port - порт, на котором слушает Tarantool Config Storage, а в качестве tt_etcd_prefix - префикс Tarantool Config Storage (указанный в инвентаре как tarantool_config_storage_prefix). Параметры подключения можно указать либо через переменные tarantool_config_storage_username и tarantool_config_storage_password, либо передав строку подключения в переменной tt_etcd_host (login:password@url).

Сценарий используется для публикации и применения миграций для Tarantool с помощью команд tt migrations publish/apply.

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}'",
      "tarantool_shared_become_user":"tarantool",
      "tt_connect_username":"client",
      "tt_connect_password":"'${CLIENT_PASSWORD}'",
      "tarantool_migrations_directory": "/ansible/migrations"
  }' \
  playbooks/tt_migrations.yml

Обязательные переменные:

Переменные для управления:

Описание сценария:

  1. Подготовка миграций:

    • Удаляет предыдущие миграции на удаленном хосте.

    • Копирует файлы миграций из директории, указанной в tarantool_migrations_directory, в целевую директорию("/tmp/tarantool.enterprise.migrations/scenario) на удаленном хосте.

  2. Публикация миграций:

    • Выполняет команду tt migrations publish для публикации миграций на удаленном хосте.

  3. Применение миграций:

    • Выполняет команду tt migrations apply для применения опубликованных миграций на удаленном хосте, используя учетные данные и параметры подключения.

Первоначальная настройка VShard с помощью tt CLI

Примечание

В параметре LIMIT обязательно укажите, на каких экземплярах Tarantool необходимо выполнить команду. Обычно это группа хостов роутеров (например, "router") или конкретный роутер из этой группы. Убедитесь, что выбранный роутер имеет указанное значение iproto.advertise.client.

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/tt_vshard_bootstrap.yml --limit ${LIMIT}

Этот сценарий используется для выполнения первоначальной настройки VShard в Tarantool с помощью tt replicaset vshard bootstrap.

Обязательные переменные:

  • tt_bin_path (string): Путь к исполняемому файлу tt на удаленном хосте. По умолчанию: "{{ cartridge_app_instances_dir }}/{{ cartridge_app_name }}.{{ inventory_hostname }}".

Переменные для управления:

  • tt_connect_username (string): Имя пользователя для подключения к Tarantool при выполнении vshard bootstrap. По умолчанию: client.

  • tt_connect_password (string): Пароль для подключения к Tarantool при выполнении vshard bootstrap. По умолчанию: secret.

  • tt_timeout (uint): Таймаут завершения операции, в секундах. По умолчанию: 10.

Описание сценария:

  1. Настройка VShard:

    • Плейбук запускает команду tt replicaset vshard bootstrap.

Удаление кластера Tarantool

Добавлено в версии 1.4.0.

Этот сценарий используется для полного удаления кластера Tarantool. Он останавливает все экземпляры, очищает каталоги и удаляет все данные, включая конфигурации ротации логов.

Примечание

Сценарий работает для кластера Tarantool 3.x с указанием переменной tarantool_3_0_version_support: true.

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/uninstall.yml

Описание сценария

  1. Подтверждение удаления кластера:

    • Задача выводит запрос для подтверждения операции, информируя о том, что будут удалены все данные. Принимает ввод yes или no для продолжения или отмены операции.

  2. Удаление компонентов Tarantool:

    • Импортирует роль tarantool.enterprise.uninstall, которая удаляет все компоненты Tarantool на удаленных хостах. Для кластера Tarantool 3.x следует указать tarantool_3_0_version_support: true.

  3. Остановка и отключение служб systemd:

    • Останавливает и отключает все службы systemd Tarantool через роль tarantool.enterprise.systemd, чтобы гарантировать полное удаление экземпляров.

  4. Удаление директорий кластера:

    • Удаляет все директории, связанные с Tarantool.

  5. Удаление конфигурации логротации:

    • Выполняет импорт роли tarantool.enterprise.logrotate, которая удаляет конфигурации ротации логов, если tarantool_configure_logrotate установлено в true.

    • Удаляет файл конфигурации logrotate для каждого хоста, расположенный в logrotate_instance_config_dir с именем файла {{ inventory_hostname }}.conf.

Управление удалением компонентов с помощью тегов

Добавлено в версии 1.8.0.

Для гибкого управления удалением добавлена поддержка тегов. Теги позволяют удалять только определенные компоненты кластера Если запускать сценарий без указания тегов, он удалит только экземпляры Tarantool, не затрагивая Cluster Manager (TCM) или Scheduler (TCS). Используйте теги, чтобы управлять удалением других компонентов:

  1. tarantool

    • Удаляет только экземпляры Tarantool и GRPC сервисы.

    • Используйте этот тег для удаления приложений Tarantool.

  2. tcm

    • Удаляет Cluster Manager (TCM).

    • Используется для удаления менеджера кластера.

  3. tcs

    • Удаляет Scheduler (TCS).

    • Применяется для удаления компонентов TCS.

  4. tcf

    • Удаляет Cluster Federation (TCF).

    • Применяется для удаления компонентов TCF.

Примеры использования

  • Для удаления только экземпляров Tarantool:

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/uninstall.yml --tags tarantool --limit $TARANTOOL_HOSTS
  • Для удаления Cluster Manager (TCM):

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/uninstall.yml --tags tcm --limit $TCM_HOST
  • Для удаления Scheduler (TCS):

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/uninstall.yml --tags tcs --limit $SHEDULER_HOSTS
  • Для удаления Cluster Federation (TCF):

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}'",
      "tarantool_shared_become_user":"tarantool",
  }' \
  playbooks/uninstall.yml --tags tcf --limit $TCF_HOSTS

Добавление и удаление пользовательских файлов

Добавлено в версии 1.12.0: Добавлен плейбук copy_custom_file.yml

Этот сценарий используется для доставки пользовательских файлов на хосты, а также удаления этих файлов. Примеры файлов:

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 \
    -v ${TARANTOOL_CONTEXT_SRC_PATH}:/source/path/to/file:Z \
    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",
        "tarantool_shared_become":"tarantool",
        "tarantool_context_src_path":"/source/path/to/file",
        "tarantool_context_dst_path":"/destination/path/to/file",
        "tarantool_context_file_mode":"0744",
      }' \
    playbooks/copy_custom_file.yml

Обязательные переменные:

Опциональные переменные:

Примечание

Перед запуском сценария на удаление файлов убедитесь, что путь до этих файлов указан корректно.

Добавление файлов на разные хосты

Этот сценарий позволяет добавить файлы на выбранную виртуальную машину как в одну директорию, так и в разные директории на этой машине. Например, если необходимо положить файл в директории с названием каждого экземпляра (/router-r01-i01/file, /storage-r01-i01/file, /storage-r01-i02), можно использовать такую команду:

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 \
    -v ${TARANTOOL_CONTEXT_SRC_PATH}:/source/path/to/file:Z \
    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",
        "tarantool_shared_become":"tarantool",
        "tarantool_context_src_path":"/source/path/to/file",
        "tarantool_context_dst_path":"/{{ inventory_hostname }}/path/to/file",
        "tarantool_context_file_mode":"0744",
      }' \
    playbooks/copy_custom_file.yml

Также можно подготовить несколько разных файлов для экземпляров Tarantool и положить каждый из них в директорию, соответствующую нужному узлу:

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 \
    -v ${TARANTOOL_CONTEXT_SRC_PATH}:/source/path/to/file:Z \
    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",
        "tarantool_shared_become":"tarantool",
        "tarantool_context_src_path":"/{{ inventory_hostname }}/path/to/file",
        "tarantool_context_dst_path":"/{{ inventory_hostname }}/path/to/file",
        "tarantool_context_file_mode":"0744",
      }'

Сценарии администрирования вспомогательных сервисов

Настройка etcd

Важно

Начиная с версии ATE 1.4.1 требуется версия ETCD не ниже 3.4.

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}'",
       "tarantool_shared_become_user":"etcd",
   }' \
   playbooks/etcd.yml

С помощью данного сценария можно настроить SSL-подключение. Для этого необходимо:

  1. В инвентаре указать конечные точки (endpoints) ETCD со схемой https://cartridge_failover_params.etcd2_params.endpoints)

  2. Добавить в инвентарь переменные:

    • etcd_ca_ssl_cert (string) — имя файла SSL-сертификата удостоверяющего центра.

    • etcd_server_ssl_cert (string) — имя файла SSL-сертификата сервера.

    • etcd_server_ssl_key (string) — имя файла ключа для SSL-сертификата сервера.

Дополнительно присутствуют переменные:

Настройка logrotate

Сценарий настраивает ротацию журналов с помощью утилиты logrotate. Имеет смысл только при записи журналов или журналов аудита в файл.

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}'",
      "tarantool_shared_become_user":"tarantool",
      "tarantool_configure_logrotate":"true"
  }' \
  playbooks/logrotate.yml

Обязательный параметр:

Настройка nginx

Сценарий используется для настройки nginx на серверах с Tarantool.

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 BALANCER_FQDN=${BALANCER_FQDN} \
  -e HOSTS_CONFIG_PATH=${HOSTS_CONFIG_PATH} \
  -e REMOTE_SSL_PATH=${REMOTE_SSL_PATH} \
  -e SERVER_SSL_CERT=${SERVER_SSL_CERT} \
  -e SERVER_SSL_KEY=${SERVER_SSL_KEY} \
  -e COPY_CERT_FILES=${COPY_CERT_FILES} \
  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_shared_become_user":"tarantool",
      "balancer_fqdn":"'${BALANCER_FQDN}'",
      "hosts_configs_path":"'${HOSTS_CONFIG_PATH}'",
      "remote_ssl_path":"'${REMOTE_SSL_PATH}'",
      "server_ssl_cert":"'${SERVER_SSL_CERT}'",
      "server_ssl_key":"'${SERVER_SSL_KEY}'",
      "copy_cert_files":"'${COPY_CERT_FILES}'",

  }' \
  playbooks/configure_nginx.yml

Обязательные параметры:

Настройка очистки резервных копий

Добавлено в версии 1.6.0.

Сценарий backup_clean.yml настраивает задания cron для очистки резервных копий Tarantool на указанных хостах. Очистка может быть выполнена по количеству хранимых резервных копий или по их возрасту (дни хранения). Сценарий проверяет, что определена только одна из переменных — tarantool_backup_retention_count или tarantool_backup_retention_days.

  1. Если указана переменная tarantool_backup_retention_count, cron будет настроен на удаление старых резервных копий, когда их количество превышает заданное значение.

  2. Если указана переменная tarantool_backup_retention_days, cron будет настроен на удаление резервных копий, которые старше указанного количества дней.

Примечание

Задачи cron создаются для пользователя tarantool.

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_BACKUP_DIRECTORY=${PATH_TO_BACKUP_DIRECTORY} \
   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_shared_become_user":"tarantool",
       "tarantool_remote_backups_dir":"'${PATH_TO_BACKUP_DIRECTORY}'"
   }' \
   playbooks/backup_clean.yml

Обязательные переменные:

Дополнительные переменные:

Troubleshooting

Failed to connect to bus: No such file or directory

Ошибка может возникнуть при исполнении команд Start / Stop / Restart или в процессе развертывания на аналогичных шагах. Связана с невозможностью пользователя управлять systemd-сервисами.

Возможные причины:

  1. Не выполнена команда loginctl enable-linger tarantool

    • Можно проверить наличием файла /var/lib/systemd/linger/tarantool.

  2. Отсутствуют файлы в /run директории пользователя tarantool:

    /run/user/$(id -u tarantool)/systemd

    • Попробовать заново вызвать команду loginctl enable-linger tarantool, но это помогает не всегда.

    • Пересоздать пользователя tarantool с тем же UID и GID.

    • Создать файлы по аналогии.

Failure during daemon-reload: Failed to connect to bus: Operation not permitted

Возникает при запуске сервисов на RHEL 8, AstraLinux, RedOS.

Failed to connect to socket \”<>.control\”: [Errno 13] Permission denied

Ошибка может возникнуть на этапах конфигурации кластера. Например, сценарий Settings. Связана с некорректным запуском процесса Tarantool.

  1. Проверьте наличие параметров User=tarantool и Group=tarantool в unit-файле systemd.

Ошибки вида: “Address already in use”

Известно о трех ошибках:

  1. CartridgeCfgError: Socket bind error (/udp): Address already in use

  2. HttpInitError: <…> Can’t create tcp_server: Address already in use

  3. RemoteControlError: Can’t start server on :: Address already in use

Эти ошибки можно заметить только в логах Tarantool.

Проблема вызвана тем, что при старте не может быть использован бинарный (например, 3301) или HTTP (например, 8081) порт. В результате экземпляр Tarantool не сможет сконфигурироваться и упадет с ошибкой.

  1. Из текста ошибки определите, какой порт занят.

  2. С помощью unix-команды lsof определите, какое приложение в данный момент использует данный порт.

    sudo lsof -i :<port>
    

    Без sudo-прав можно посмотреть только процессы текущего пользователя.

  3. Определите тип подключения.

    # Исходящее подключение на порту 50858
    TCP 192.168.100.17:50858->google.com:https (ESTABLISHED)
    
    # Ожидание входящих запросов на порту 3301
    TCP localhost:3301 (LISTEN)
    
  4. Дальнейшие действия зависят от найденного приложения и типа подключения.

    1. Это исходящее подключение:

      • Настройте параметр сети, отвечающий за пул исходящих портов. Например, так:

      echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range
      /etc/rc.d/init.d/network restart
      
    2. Это входящее подключение:

      • Для Google Chrome / etcd / nginx / любого другого приложения определите, можно ли изменить параметры, чтобы освободить этот порт.

      • Для Tarantool – скорее всего, у вас неверная топология кластера или запущено несколько кластеров одновременно. Обратитесь в техподдержку Tarantool за консультацией.

Failed to restart <…>: Unit not found

Ошибка возникает при запуске экземпляров Tarantool с помощью systemd. Как правило, на RHEL 7.

sudo: timed out reading password

Ошибка возникает при запуске экземпляров Tarantool, nginx или etcd с помощью systemd.

  1. Убедитесь, что корректно выставлены sudoers-права для администраторов. Права должны предусматривать запуск команд без пароля, то есть должно быть ключевое слово NOPASSWD.

  2. Проверьте название приложения, cartridge_app_name. Переменная используется для формирования имени сервис-файла в формате < cartridge_app_name >@.service. Если название файла не совпадает с переменной в файле-инвентаре hosts.yml, исправьте это.

Failed to connect to the host via ssh: <…>: Permission denied (…)

Ошибка подключения к серверу по SSH. Возникает в начале исполнения сценариев, требующих подключения.

Возможные причины:

  1. На SSH-ключе установлен пароль (passphrase). Инсталлятор на текущий момент не поддерживает интерактивный ввод пароля.

    • Создайте новый ключ без использования passphrase.

  2. Публичная часть ключа не была добавлена на сервер как доверенная.

    • Скопируйте публичную часть на все сервера с помощью команды ssh-copy-id.

    ssh-copy-id -i ~/.ssh/mykey user@host
    

    Другой вариант – добавить вручную в файл ~/.ssh/authorized_keys для пользователя администратора.

Job for service <…>.service failed because the control process exited with error code

Возникает в процессе запуска экземпляра Tarantool.

Возможные причины:

  1. Процесс не может создать рабочие директории.

    • Проверьте корректность путей в сервис-файле systemd.

    • Проверьте корректность всех путей из переменных в инвентаре.

Подключение через jumphost из Docker контейнера

Вариант 1: Конфигурационный файл SSH

Создайте конфигурационный файл и укажите необходимые значения для jumphost IP, jumphost user, IP/FQDN сервера(ов) под Tarantool, super user.

Host jump
  User <jumphost user>
  HostName <jumphost IP>
  UserKnownHostsFile /dev/null
  IdentityFile /ansible/.ssh/id_private_key
  StrictHostKeyChecking no

Host <IP/FQDN>
  User <super user>
  ProxyJump jump
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no

Добавьте к команде запуска ATE подключение конфигурации с помощью опции -v (volume):

-v ${SSH_CONFIG_FILE}:/root/.ssh/config:Z

Например:

docker run --network host -it --rm \
  -v ${SSH_CONFIG_FILE}:/root/.ssh/config:Z \
  -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}'",
      "tarantool_shared_become_user":"tarantool",
      "tarantool_configure_logrotate":"true"
  }' \
  playbooks/logrotate.yml

Вариант 2: Опция ProxyCommand

Добавьте опцию ProxyCommand к переменной инвентаря ansible_ssh_common_args. Подставьте свои значения <jumhost user> и <jumhost IP>.

ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no -o ProxyCommand="ssh -W %h:%p <jumhost user>@<jumhost IP> -i /ansible/.ssh/id_private_key
      -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

Команды docker run будут работать без дополнительных изменений.

Примеры инвентарей

Здесь собраны примеры файлов инвентаря inventory.yml для различных продуктов, используемых в тестах. Эти файлы содержат пример конфигурации инвентаря для каждого продукта.

Статический инвентарь — это вручную созданный текстовый файл со списком хостов, групп и переменных.

Динамический инвентарь — это файл для Ansible-плагина (например, генератора), который на основе данных динамически формирует список хостов, групп и переменных.

Tarantool 3.x

Сценарии для приложений и продуктов на основе Tarantool 3.x Enterprise Edition приведены в разделе Tarantool 3.x. Пример инвентаря для централизованного хранилища конфигурации на основе Tarantool приведен в разделе Tarantool Config Storage.

Статический инвентарь

---
tarantool:
  children:
    ROUTERS:
      children:
        router:
      vars:
        tarantool_config_group:
          app:
            module: router
          sharding:
            roles: [router]
          roles:
            - roles.another-role
    STORAGES:
      children:
        storage-1:
        storage-2:
      vars:
        tarantool_config_group:
          app:
            module: storage
            cfg:
              space_name: super-duper-space
          sharding:
            roles: [storage]
          memtx:
            memory: 1000241024
          roles:
            - roles.my-role
    storage-1:
      hosts:
        kvee-r01-s01:
        kvee-r01-s02:
      vars:
        replicaset_alias: storage-1
        tarantool_config_replicaset:
          memtx:
            memory: 512000000
    storage-2:
      hosts:
        kvee-r02-s01:
        kvee-r02-s02:
      vars:
        replicaset_alias: storage-2
    router:
      hosts:
        kvee-router-01:
      vars:
        replicaset_alias: router-1
    vm_1:
      hosts:
        kvee-r01-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3310
            advertise:
              client: 127.0.0.1:3310
          labels:
            server: "{{ ansible_host }}"
        kvee-r02-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3311
            advertise:
              client: 127.0.0.1:3311
          labels:
            server: "{{ ansible_host }}"
        kvee-router-01:
          iproto:
            listen:
              - uri: 127.0.0.1:3312
            advertise:
              client: 127.0.0.1:3312
          labels:
            server: "{{ ansible_host }}"
        kvee-r01-s02:
          labels:
            server: "{{ ansible_host }}"
        kvee-r02-s02:
          labels:
            server: "{{ ansible_host }}"
      vars:
        ansible_host: 127.0.0.1
        ansible_user: "{{ super_user }}"
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_app_name: kvee
    tarantool_etcd_host: "{{ tarantool_etcd_host }}"
    tarantool_config_global:
      fiber:
        slice:
          err: 15
      credentials:
        users:
          client:
            password: 'secret'
            roles: [super]
          replicator:
            password: 'secret'
            roles: [replication]
          storage:
            password: 'secret'
            roles: [sharding]
      roles_cfg:
        my-role:
          variable_1: 10
          variable_2: my-user
        another-role:
          welcome_message: "Hello there, general Kenobi!"
      iproto:
        advertise:
          peer:
            login: replicator
          sharding:
            login: storage
          client: 'unix/:{{ cartridge_run_dir }}/{% raw %}{{ instance_name }}{% endraw %}.iproto'
        listen:
          - uri: unix/:/app/tarantool/kvee/run/{% raw %}{{ instance_name }}{% endraw %}.iproto

Динамический инвентарь

plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: tarantool
# distribution_strategy: StrategyEvenByZone

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: kvee
  tarantool_etcd_host: "{{ tarantool_etcd_host }}"
  tarantool_wait_alive_delay: 2
  tarantool_wait_alive_retries: 50
  tarantool_config_etcd_endpoints:
    - http://{{ tarantool_etcd_host }}:{{ tarantool_etcd_port }}
    - http://etcd-molecule.molecule:{{ tarantool_etcd_port }}
  tarantool_config_global:
    fiber:
      slice:
        err: 15
    credentials:
      users:
        client:
          password: 'secret'
          roles: [super]
        replicator:
          password: 'secret'
          roles: [replication]
        storage:
          password: 'secret'
          roles: [sharding]
    roles_cfg:
      my-role:
        variable_1: 10
        variable_2: my-user
      another-role:
        welcome_message: "Hello there, general Kenobi!"
    compat:
      box_error_serialize_verbose: "new"
    iproto:
      advertise:
        peer:
          login: replicator
        sharding:
          login: storage
        client: 'unix/:{{ cartridge_run_dir }}/{% raw %}{{ instance_name }}{% endraw %}.iproto'
      listen:
        - uri: unix/:/app/tarantool/kvee/run/{% raw %}{{ instance_name }}{% endraw %}.iproto

servers:
  - name: 'vm_1'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
  - name: 'vm_2'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    zone: 'DC5'
    user: '{{ super_user }}'
    port_starts:
      iproto: 3401
      http: 9091
  # - name: 'vm_3'
  #   host: 127.0.0.1
  #   advertise_host: '127.0.0.1'
  #   port: 2201
  #   zone: 'DC5'
  #   user: '{{ super_user }}'
  #   port_starts:
  #     iproto: 3444
  #     http: 9092

components:
  - name: storage
    replicasets: 2
    replicas: 2
    config:
      replicaset:
        memtx:
          memory: 512000000
      group:
        app:
          module: storage
          cfg:
            space_name: super-duper-space
        sharding:
          roles: [storage]
        memtx:
          memory: 1000241024
        roles:
          - roles.my-role
  - name: router
    replicasets: 2
    replicas: 1
    config:
      group:
        app:
          module: router
        sharding:
          roles: [router]
        roles:
          - roles.another-role

# changes:
#   - type: set_variables
#     hosts:
#       - router
#       - storage-r02-i02
#     values:
#       example: test

Tarantool Cartridge

Сценарии для приложений и продуктов на основе Tarantool Cartridge приведены в разделе Tarantool Cartridge.

Статический инвентарь

---
tnt-cluster-1:
  children:
    ROUTERS:
      hosts:
        kvee-router-01:
        kvee-router-02:
    STORAGES:
      hosts:
        kvee-r01-s01:
        kvee-r01-s02:
        kvee-r02-s01:
        kvee-r02-s02:
    STORAGES_GROUP_1:
      hosts:
        kvee-r01-s01:
        kvee-r02-s01:
    STORAGES_GROUP_2:
      hosts:
        kvee-r01-s02:
        kvee-r02-s02:
    replicaset_vag_router_01:
      hosts:
        kvee-router-01:
      vars:
        failover_priority:
          - kvee-router-01
        replicaset_alias: vag-router-01
        roles:
          - vshard-router
          - crud-router
          - failover-coordinator
          - metrics
    replicaset_vag_router_02:
      hosts:
        kvee-router-02:
      vars:
        failover_priority:
          - kvee-router-02
        replicaset_alias: vag-router-02
        roles:
          - vshard-router
          - crud-router
          - failover-coordinator
          - metrics
    replicaset_vag_storage_01:
      hosts:
        kvee-r01-s01:
        kvee-r01-s02:
      vars:
        failover_priority:
          - kvee-r01-s02
          - kvee-r01-s01
        replicaset_alias: vag-storage-01
        roles:
          - vshard-storage
          - crud-storage
          - metrics
          - expirationd
    replicaset_vag_storage_02:
      hosts:
        kvee-r02-s01:
        kvee-r02-s02:
      vars:
        failover_priority:
          - kvee-r02-s02
          - kvee-r02-s01
        replicaset_alias: vag-storage-02
        roles:
          - vshard-storage
          - crud-storage
          - metrics
          - expirationd
    vm_1:
      hosts:
        kvee-r01-s01:
        kvee-r02-s01:
        kvee-router-01:
        kvee-router-02:
      vars:
        ansible_host: 127.0.0.1
        ansible_user: '{{ super_user }}'
    vm_2:
      hosts:
        kvee-r01-s02:
        kvee-r02-s02:
      vars:
        ansible_host: 127.0.0.1
        ansible_user: '{{ super_user }}'
  hosts:
    kvee-r01-s01:
      config:
        advertise_uri: localhost:3401
        http_port: 8080
        log: /app/logs/kvee/kvee-r01-s01.log
        vinyl_cache: 0
        vinyl_memory: 0
      cartridge_extra_env:
        EXAMPLE: true
      cartridge_systemd_dir: "{{ tarantool_systemd_userspace_dir }}"
    kvee-r01-s02:
      config:
        advertise_uri: localhost:3410
        http_port: 8099
        log: /app/logs/kvee/kvee-r01-s02.log
        vinyl_cache: 0
        vinyl_memory: 0
    kvee-r02-s01:
      config:
        advertise_uri: localhost:3411
        http_port: 8098
        log: /app/logs/kvee/kvee-r02-s01.log
        vinyl_cache: 0
        vinyl_memory: 0
    kvee-r02-s02:
      config:
        advertise_uri: localhost:3402
        http_port: 8092
        log: /app/logs/kvee/kvee-r02-s02.log
        vinyl_cache: 0
        vinyl_memory: 0
    kvee-router-01:
      config:
        advertise_uri: localhost:3403
        http_port: 8093
        log: /app/logs/kvee/kvee-router-01.log
        vinyl_cache: 0
        vinyl_memory: 0
    kvee-router-02:
      config:
        advertise_uri: localhost:3404
        http_port: 8094
        log: /app/logs/kvee/kvee-router-02.log
        vinyl_cache: 0
        vinyl_memory: 0
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_app_directory: /app/tarantool/kvee
    cartridge_app_name: kvee
    cartridge_keep_num_latest_dists: 10
    cartridge_cluster_cookie: molecule-testing
    cartridge_failover_params:
      etcd2_params:
        endpoints:
          - http://{{ tarantool_etcd_host }}:2379
        lock_delay: 10
        prefix: /kvee-1
      failover_timeout: 20
      fencing_enabled: true
      fencing_pause: 2
      fencing_timeout: 10
      mode: stateful
      state_provider: etcd2

Динамический инвентарь

# inventory.config file in YAML format
# remember to enable this inventory plugin in the ansible.cfg before using
# View the output using `ansible-inventory -i inventory.config --list`
plugin: tarantool.enterprise.generator
product: cartridge
cluster_name: tnt-cluster-1

constants:
  tarantool_collected_logs_local_path: /tmp/logs
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_directory: /app/tarantool/kvee
  cartridge_app_name: kvee
  cartridge_keep_num_latest_dists: 10
  cartridge_cluster_cookie: molecule-testing
  cartridge_failover_params:
    etcd2_params:
      endpoints:
        - http://{{ tarantool_etcd_host }}:2379
      lock_delay: 10
      prefix: /kvee-1
    failover_timeout: 20
    fencing_enabled: true
    fencing_pause: 2
    fencing_timeout: 10
    mode: stateful
    state_provider: etcd2

servers:
  - name: 'vm_1'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
    zone: 'DC2'
    port_starts:
      iproto: 3444
      http: 8091
  - name: 'vm_2'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    zone: 'DC5'
    user: '{{ super_user }}'
    port_starts:
      iproto: 3401
      http: 9091

zones:
  - name: 'DC2'
    distances:
      DC2: 0
      DC5: 2
  - name: 'DC5'
    distances:
      DC2: 2
      DC5: 0

components:
  - name: storage
    replicasets: 2
    replicas: 2
    config:
      roles:
        - vshard-storage
        - crud-storage
        - metrics
        - expirationd
      vinyl_cache: 0
      vinyl_memory: 0
  - name: router
    replicasets: 2
    replicas: 1
    config:
      roles:
        - vshard-router
        - crud-router
        - failover-coordinator
        - metrics
      vinyl_cache: 0
      vinyl_memory: 0
      memtx_memory: 1024

changes:
  - type: set_variables
    hosts:
      - storage-r01-i01
    values:
      cartridge_extra_env:
        EXAMPLE: true
      cartridge_systemd_dir: "{{ tarantool_systemd_userspace_dir }}"
#         vinyl_cache: 1
#         vinyl_memory: 2
#   - type: remove_instances
#     hosts:
#       - kvee-app-r001-s01
#       - kvee-app-r002-s02
#   - type: add_replicasets
#     component: storage
#     quantity: 2
#   - type: add_instances
#     hosts:
#       - 'vm_1'
#       - 'vm_2'
#     component: storage
#     quantity: 2

Tarantool Config Storage

Централизованное хранилище конфигурации на основе Tarantool (Tarantool Config Storage) используется с кластерами на основе Tarantool 3.x. Узнать больше:

Динамический инвентарь

Добавлено в версии 1.10.0.

plugin: tarantool.enterprise.generator
cluster_name: tarantool_config_storage
product: tarantool
# distribution_strategy: StrategyEvenByZone

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: config_storage
  tarantool_config_storage: 'tarantool'
  is_config_storage: true
  tarantool_config_global:
    credentials:
      users:
        replicator:
          password: 'secret'
          roles: [replication]
        config-storage:
          password: '123456'
          privileges:
            - permissions: [read, write]
              spaces: [config_storage, config_storage_meta]
            - permissions: [execute]
              universe: true
    roles_cfg:
      config.storage:
        status_check_interval: 3
    database:
      use_mvcc_engine: true
    iproto:
      advertise:
        peer:
          login: replicator

servers:
  - name: 'vm_1'
    host: '{{ tarantool_etcd_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
    port_starts:
      iproto: 4401
      http: 9091

components:
  - name: config-storage
    replicasets: 1
    replicas: 1
    config:
      replicaset:
        replication:
          failover: election
      group:
        roles:
          - config.storage

Tarantool Cluster Manager

Сценарии для работы с TCM приведены в разделе Tarantool Cluster Manager.

Конфигурация с ETCD

---
cluster-manager:
  hosts:
    tcm:
      tcm_host: 0.0.0.0
      tcm_port: 8080
      tcm_etcd_host: etcd
  vars:
    ansible_host: 127.0.0.1
    ansible_user: '{{ super_user }}'
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    tcm_feature_ttgraph: true
    tcm_feature_column_store: true
    tcm_feature_tqe: true
    tcm_feature_api_token: true
    tcm_bootstrap_password: "tarantool"
    tcm_bootstrap_api_token: "tarantool"
    tcm_initial_clusters:
      - name: Tarantool cluster
        description: Example cluster
        storage-connection:
          provider: etcd
          etcd-connection:
            endpoints:
              - http://etcd:2379
            username: ""
            password: ""
            prefix: "/tarantool/tcs"
        tarantool-connection:
          username: "client"
          password: "secret"
      - name: Tarantool cluster 2
        description: Example cluster
        storage-connection:
          provider: etcd
          etcd-connection:
            endpoints:
              - http://etcd:2379
            username: ""
            password: ""
            prefix: "/tarantool/tcs"
        tarantool-connection:
          username: "client"
          password: "secret"

Конфигурация с ETCD при включенном SSL

---
cluster-manager:
  hosts:
    tcm:
      tcm_config_etcd_endpoints:
        - "{{ tarantool_etcd_schema_definition }}://{{ tarantool_etcd_host }}:2379"
      tcm_host: 0.0.0.0
      tcm_port: 8080
      tcm_etcd_host: etcd
      tcm_etcd_tls_skip_verify: true
      tcm_etcd_tls_skip_san_verify: true
      tcm_etcd_tls_enabled: true
      tcm_etcd_tls_ca_file: "/certs/rootCA.crt"
      tcm_etcd_tls_key_file: "/certs/client.key"
      tcm_etcd_tls_cert_file: "/certs/client.crt"
  vars:
    ansible_host: '{{ tarantool_ansible_host }}'
    ansible_user: '{{ super_user }}'
    ansible_port: 2201
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    tarantool_etcd_schema_definition: "https"
    tcm_feature_ttgraph: true
    tcm_feature_column_store: true
    tcm_feature_tqe: true
    tcm_feature_api_token: true
    tcm_bootstrap_password: "tarantool"
    tcm_bootstrap_api_token: "tarantool"
    tcm_initial_clusters:
      - name: Tarantool Column Store
        id: 00000000-0000-0000-0000-000000000000
        storage-connection:
          provider: etcd
          etcd-connection:
            endpoints:
              - "{{ tarantool_etcd_schema_definition }}://etcd:2379"
            username: ""
            password: ""
            prefix: "/tarantool/tcs"
        tarantool-connection:
          username: "client"
          password: "secret"

Конфигурация с ETCD при включенном basic auth

---
cluster-manager:
  hosts:
    tcm:
      tcm_config_etcd_endpoints:
        - "{{ tarantool_etcd_schema_definition }}://{{ tarantool_etcd_host }}:2379"
      tcm_host: 0.0.0.0
      tcm_port: 8080
      tcm_etcd_host: etcd
      tcm_etcd_username: "root"
      tcm_etcd_password: "mysecurepassword"
  vars:
    ansible_host: '{{ tarantool_ansible_host }}'
    ansible_user: '{{ super_user }}'
    ansible_port: 2201
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    tarantool_etcd_schema_definition: "http"
    tcm_feature_ttgraph: true
    tcm_feature_column_store: true
    tcm_feature_tqe: true
    tcm_feature_api_token: true
    tcm_bootstrap_password: "tarantool"
    tcm_bootstrap_api_token: "tarantool"
    tcm_initial_clusters:
      - name: Tarantool Column Store
        id: 00000000-0000-0000-0000-000000000000
        storage-connection:
          provider: etcd
          etcd-connection:
            endpoints:
              - "{{ tarantool_etcd_schema_definition }}://etcd:2379"
            username: "root"
            password: "mysecurepassword"
            prefix: "/tarantool/tcs"
        tarantool-connection:
          username: "client"
          password: "secret"

Конфигурация с Tarantool Config Storage

cluster-manager:
  hosts:
    tcm:
      tcm_host: 0.0.0.0
      tcm_port: 8080
      tcm_etcd_host: "{{ tarantool_etcd_host }}"
  vars:
    ansible_host: '{{ tarantool_ansible_host }}'
    ansible_user: '{{ super_user }}'
    ansible_port: 2201
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    tcm_feature_ttgraph: true
    tcm_feature_column_store: true
    tcm_feature_api_token: true
    tcm_bootstrap_password: "tarantool"
    tcm_bootstrap_api_token: "tarantool"
    tcm_storage_provider: tarantool
    tcm_config_etcd_endpoints:
      - "{{ tarantool_etcd_host }}:4401"
    tcm_etcd_username: "config-storage"
    tcm_etcd_password: "123456"
    tcm_initial_clusters:
      - name: Tarantool DB
        id: 00000000-0000-0000-0000-000000000000
        storage-connection:
          provider: tarantool
          tarantool-connection:
            endpoints:
              - "{{ tarantool_etcd_host }}:4401"
            username: "config-storage"
            password: "123456"
            prefix: "/tarantool/tarantooldb"
        tarantool-connection:
          username: "client"
          password: "secret"

Tarantool Clusters Federation

Информация о настройке TCF и сценарии для работы с этим продуктом приведены в разделе Tarantool Clusters Federation.

Статический инвентарь

tcf:
  vars:
    tcf_user: replicator
    tcf_user_password: password
    tcf_dial_timeout: 5s
  children:
    vm-1:
      vars:
        ansible_host: 127.0.0.1
        ansible_user: '{{ super_user }}'
      hosts:
        tcf-host-1:
        tcf-host-3:
    vm-2:
      vars:
        ansible_host: 127.0.0.1
        ansible_user: '{{ super_user }}'
      hosts:
        tcf-host-2:
        tcf-host-4:
    destination:
      vars:
        tcf_destination_metrics_enabled: true
      hosts:
        tcf-host-1:
        tcf-host-2:
    gateway:
      vars:
        tcf_gateway_metrics_enabled: true
      hosts:
        tcf-host-3:
        tcf-host-4:
  hosts:
    tcf-host-1:
      tcf_gateway_host: localhost
      tcf_gateway_port: 9099
      tcf_destination_port_metrics: 9100
      tcf_destination_router_uris:
        - localhost:3403
        - localhost:3404
      tcf_destination_host: localhost
      tcf_gateways:
        - host: 127.0.0.1
          port: 10080
        - host: 127.0.0.1
          port: 11080
        - host: 127.0.0.1
          port: 12080
      tcf_destination_storage: etcd_v2
      tcf_destination_storage_endpoints:
        - host: "{{ tarantool_etcd_host }}"
          port: 2379
      tcf_destination_storage_prefix: /destination1
      tcf_destination_storage_ttl: 10
    tcf-host-2:
      tcf_gateway_host: localhost
      tcf_gateway_port: 9199
      tcf_destination_port_metrics: 9101
      tcf_destination_router_uris:
        - localhost:3303
        - localhost:3304
      tcf_destination_host: localhost
      tcf_gateways:
        - host: 127.0.0.1
          port: 10080
        - host: 127.0.0.1
          port: 11080
        - host: 127.0.0.1
          port: 12080
      tcf_destination_storage: etcd_v2
      tcf_destination_storage_endpoints:
        - host: "{{ tarantool_etcd_host }}"
          port: 2379
      tcf_destination_storage_prefix: /destination2
      tcf_destination_storage_ttl: 10
    tcf-host-3:
      tcf_gateway_port: 9299
      tcf_destination_port_metrics: 9102
      tcf_gateway_storage_uris:
        - localhost:3401
        - localhost:3402
        - localhost:3410
        - localhost:3411
      tcf_gateway_host: localhost
    tcf-host-4:
      tcf_gateway_port: 9399
      tcf_destination_port_metrics: 9103
      tcf_gateway_storage_uris:
        - localhost:3301
        - localhost:3302
        - localhost:3310
        - localhost:3311
      tcf_gateway_host: localhost

Динамический инвентарь

Топология репликаторов данных между кластерами (Gateway и Destination) формируется автоматически на основе описания кластеров в инвентаре. Указывать её вручную необязательно – автоматическая настройка покрывает типовые случаи. При необходимости топологию можно задать вручную.

Для настройки компонентов используются переменные, которые имеют значения по умолчанию. Их можно не задавать, если значения по умолчанию подходят. При необходимости переменные можно переопределить в конфигурации. Переменные конфигурации TCF подробно описаны в соответствующем разделе.

plugin: tarantool.enterprise.generator
product: TCF

tcf:
  tcf_user: replicator
  tcf_user_password: password
  tarantool_collected_logs_local_path: /tmp/logs
  tcf_log_directory: /app/logs/tcf
  tcf_dial_timeout: 5s

  tcf_gateways:
    - host: 127.0.0.1
      port: 10080
    - host: 127.0.0.1
      port: 11080
    - host: 127.0.0.1
      port: 12080

  tcf_destination_storage: etcd_v2
  tcf_destination_storage_endpoints:
    - host: "{{ tarantool_etcd_host }}"
      port: 2379
  tcf_destination_storage_prefix: /destination1
  tcf_destination_storage_ttl: 10

cluster_1:
  product: cartridge
  cluster_name: tnt-cluster-1
  constants:
    tarantool_collected_logs_local_path: /tmp/logs
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_app_name: app1
    cartridge_keep_num_latest_dists: 10
    cartridge_cluster_cookie: app1-molecule-testing
    cartridge_failover_params:
      etcd2_params:
        endpoints:
          - http://{{ tarantool_etcd_host }}:2379
        lock_delay: 10
        prefix: /app1
      failover_timeout: 20
      fencing_enabled: true
      fencing_pause: 2
      fencing_timeout: 10
      mode: stateful
      state_provider: etcd2

  servers:
    - name: 'vm_1'
      host: 127.0.0.1
      advertise_host: '127.0.0.1'
      port: 2201
      user: '{{ super_user }}'
      zone: 'DC2'
      port_starts:
        iproto: 3333
        http: 7777
    - name: 'vm_2'
      host: 127.0.0.1
      advertise_host: '127.0.0.1'
      port: 2201
      zone: 'DC5'
      user: '{{ super_user }}'
      port_starts:
        iproto: 3444
        http: 8888

  components:
    - name: storage
      replicasets: 2
      replicas: 2
      config:
        vinyl_cache: 0
        vinyl_memory: 0
        memtx_memory: 134217728
        roles:
          - vshard-storage
          - metrics
          - tcf-worker
    - name: router
      replicasets: 2
      replicas: 1
      config:
        vinyl_cache: 0
        vinyl_memory: 0
        roles:
          - vshard-router
          - failover-coordinator
          - metrics
          - tcf-worker
          - tcf-coordinator
  # changes:
  #   - type: set_variables
  #     hosts:
  #       - storage
  #     values:
  #       example: var_2
cluster_2:
  cluster_name: tnt-cluster-2
  product: cartridge
  constants:
    tarantool_collected_logs_local_path: /tmp/logs
    cartridge_app_name: app-two
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_keep_num_latest_dists: 10
    cartridge_cluster_cookie: app2-molecule-testing
    cartridge_failover_params:
      etcd2_params:
        endpoints:
          - http://{{ tarantool_etcd_host }}:2379
        lock_delay: 10
        prefix: /app2
      failover_timeout: 20
      fencing_enabled: true
      fencing_pause: 2
      fencing_timeout: 10
      mode: stateful
      state_provider: etcd2
  servers:
    - name: 'vm_3'
      host: 127.0.0.1
      advertise_host: '127.0.0.1'
      port: 2201
      user: '{{ super_user }}'
      zone: 'DC2'
      port_starts:
        iproto: 3555
        http: 6666
    - name: 'vm_4'
      host: 127.0.0.1
      advertise_host: '127.0.0.1'
      port: 2201
      zone: 'DC5'
      user: '{{ super_user }}'
      port_starts:
        iproto: 3666
        http: 5555
  components:
    - name: storage-2
      replicasets: 2
      replicas: 2
      config:
        vinyl_cache: 0
        vinyl_memory: 0
        memtx_memory: 134217728
        roles:
          - vshard-storage
          - metrics
          - tcf-worker
    - name: router-2
      replicasets: 2
      replicas: 1
      config:
        vinyl_cache: 0
        vinyl_memory: 0
        roles:
          - vshard-router
          - failover-coordinator
          - metrics
          - tcf-worker
          - tcf-coordinator
  # changes:
  #   - type: set_variables
  #     hosts:
  #       - storage-2
  #     values:
  #       example: test

Tarantool Column Store

Информация о настройке TCS и сценарии для работы с этим продуктом приведены в разделе Tarantool Column Store.

Статический инвентарь для TCS 0.x

---
tarantool:
  children:
    aggregators:
      children:
        storage-1:
        coordinators:
      vars:
        tarantool_config_group:
          roles: [app/aggregator_role, app/etcd_stateboard_client]
          roles_cfg:
            app/aggregator_role:
              tcs:
                default_column_values_limit: 20000
                block_size: 8192
                schema:
                  datafusion:
                    public:
                      attributes:
                        columns:
                          - data_type: i32
                            name: Аттрибут0
                            index_depth: 1000
                            indexed: true
                            column_values_limit: 10000
                          - data_type: i32
                            name: "Аттрибут1"
                            index_depth: 1000
                          - data_type: i32
                            name: Attribute2
                            index_depth: 1000
                          - data_type: i32
                            name: Attribute3
                            index_depth: 1000
                          - data_type: utf8
                            name: Attribute4
                            index_depth: 1000
    storage-1:
      hosts:
        tcs-app-storage-01:
        tcs-app-storage-02:
      vars:
        replicaset_alias: aggregators
        tarantool_group_name: aggregators
        tarantool_config_replicaset:
          replication:
            failover: supervised
    coordinators:
      hosts:
        coordinator-1:
        coordinator-2:
      vars:
        replicaset_alias: coordinators
    vm_1:
      hosts:
        tcs-app-storage-01:
          iproto:
            listen:
              - uri: 127.0.0.1:3311
            advertise:
              client: 127.0.0.1:3311
          labels:
            server: "{{ ansible_host }}"
          roles_cfg:
            tcs:
              aggregator:
                http_listen: 0.0.0.0:8777
        tcs-app-storage-02:
          iproto:
            listen:
              - uri: 127.0.0.1:3312
            advertise:
              client: 127.0.0.1:3312
          labels:
            server: "{{ ansible_host }}"
          roles_cfg:
            tcs:
              aggregator:
                http_listen: 0.0.0.0:8787
        tcs-scheduler-01:
          http_listen: '127.0.0.1:7778'
          tcs_scheduler_metrics_enabled: true
          tcs_scheduler_features: ["experimental_api"]
        tcs-scheduler-02:
          http_listen: '127.0.0.1:8778'
          tcs_scheduler_metrics_enabled: true
          tcs_scheduler_features: ["experimental_api"]
        coordinator-1:
          tarantool_coordinator: true
        coordinator-2:
          tarantool_coordinator: true
      vars:
        ansible_host: 127.0.0.1
        ansible_user: "{{ super_user }}"
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_app_name: tcs
    tarantool_etcd_host: "{{ tarantool_etcd_host }}"
    cartridge_systemd_dir: "{{ tarantool_systemd_userspace_dir }}"
    cartridge_extra_env:
      TCS_REPL_PASS: super-secret
    tarantool_config_global:
      fiber:
        slice:
          err: 15
      credentials:
        users:
          replicator:
            password: "{% raw %}{{ context.replicator_password }}{% endraw %}"
            roles: [replication]
            privileges:
              - permissions: [execute]
                functions: [failover.execute]
          client:
            password: 'secret'
            roles: [super]
      memtx:
        memory: 114748364
      config:
        context:
          replicator_password:
            from: env
            env: TCS_REPL_PASS
      iproto:
        advertise:
          peer:
            login: 'replicator'

Динамический инвентарь для TCS 0.x

plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: TCS

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: tcs
  tarantool_etcd_host: "{{ tarantool_etcd_host }}"
  tcs_storage_group_name: aggregator
  tcs_storage_replicaset_name: aggregator-r01
  tarantool_wait_alive_delay: 2
  tarantool_wait_alive_retries: 50
  cartridge_extra_env:
    TCS_REPL_PASS: super-secret
  tcs_extra_env:
    TOKIO_WORKER_THREADS: 1
  tcs_scheduler_metrics_enabled: true
  tcs_scheduler_features: ["experimental_api"]
  tarantool_config_global:
    fiber:
      slice:
        err: 15
    credentials:
      users:
        replicator:
          password: "{% raw %}{{ context.replicator_password }}{% endraw %}"
          roles: [replication]
          privileges:
            - permissions: [execute]
              functions: [failover.execute]
        client:
          password: 'secret'
          roles: [super]
    memtx:
      memory: 114748364
    config:
      context:
        replicator_password:
          from: env
          env: TCS_REPL_PASS
    iproto:
      advertise:
        peer:
          login: 'replicator'
    compat:
      box_error_serialize_verbose: "new"
    failover:
      call_timeout: 1
      connect_timeout: 1
      lease_interval: 10
      probe_interval: 1
      renew_interval: 10
      stateboard:
        keepalive_interval: 15
        renew_interval: 3

servers:
  - name: 'vm_1'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
    zone: 'DC2'
    port_starts:
      iproto: 3444
      http: 8091

components:
  - name: scheduler
    replicasets: 1
    replicas: 2
  - name: coordinator
    replicasets: 1
    replicas: 2
  - name: aggregator
    replicasets: 1
    replicas: 2
    port_starts:
      http_streaming: 9081
    config:
      aggregator:
        rv_update_ms: 100
      replicaset:
        tarantool_config_replicaset:
          replication:
            failover: supervised
      group:
        roles: [app/aggregator_role, app/etcd_stateboard_client]
        roles_cfg:
          app/aggregator_role:
            tcs:
              default_column_values_limit: 20000
              block_size: 8192
              schema:
                datafusion:
                  public:
                    attributes:
                      columns:
                        - data_type: i32
                          name: Аттрибут0
                          index_depth: 1000
                          indexed: true
                          column_values_limit: 10000
                        - data_type: i32
                          name: "Аттрибут1"
                          index_depth: 1000
                        - data_type: i32
                          name: Attribute2
                          index_depth: 1000
                        - data_type: i32
                          name: Attribute3
                          index_depth: 1000
                        - data_type: utf8
                          name: Attribute4
                          index_depth: 1000

Статический инвентарь для TCS 1.x

---
tarantool:
  children:
    aggregator:
      children:
        storage-1:
        coordinator:
      vars:
        tarantool_config_group:
          roles: [app/aggregator_role, app/etcd_stateboard_client]
    storage-1:
      hosts:
        tcs-app-storage-01:
        tcs-app-storage-02:
      vars:
        replicaset_alias: aggregator
        tarantool_group_name: aggregator
        tarantool_config_replicaset:
          replication:
            failover: supervised
    coordinator:
      hosts:
        coordinator-1:
        coordinator-2:
      vars:
        replicaset_alias: coordinators
    vm_1:
      hosts:
        tcs-app-storage-01:
          iproto:
            listen:
              - uri: 127.0.0.1:3311
            advertise:
              client: 127.0.0.1:3311
          labels:
            server: "{{ ansible_host }}"
          roles_cfg:
            app/aggregator_role:
              arrow_flight_sql:
                credentials:
                  password: tcs
                  username: tcs
                listen: 127.0.0.1:50051
              http:
                credentials:
                  password: tcs
                  username: tcs
                listen: 127.0.0.1:8092
            roles.httpd:
              default:
                listen: 8091
            tcs:
              aggregator:
                rv_update_ms: 100
        tcs-app-storage-02:
          iproto:
            listen:
              - uri: 127.0.0.1:3312
            advertise:
              client: 127.0.0.1:3312
          labels:
            server: "{{ ansible_host }}"
          roles_cfg:
            app/aggregator_role:
              arrow_flight_sql:
                credentials:
                  password: tcs
                  username: tcs
                listen: 127.0.0.1:50052
              http:
                credentials:
                  password: tcs
                  username: tcs
                listen: 127.0.0.1:8094
            roles.httpd:
              default:
                listen: 8093
            tcs:
              aggregator:
                rv_update_ms: 100
        coordinator-1:
          tarantool_coordinator: true
        coordinator-2:
          tarantool_coordinator: true
      vars:
        ansible_host: "{{ tarantool_ansible_host }}"
        ansible_port: 2201
        ansible_user: "{{ super_user }}"
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_app_name: tcs
    tarantool_etcd_host: "{{ tarantool_etcd_host }}"
    tarantool_systemd_scope: user
    cartridge_systemd_dir: "{{ tarantool_systemd_userspace_dir }}"
    cartridge_extra_env:
      TCS_REPL_PASS: super-secret
    tarantool_config_global:
      fiber:
        slice:
          err: 15
      credentials:
        users:
          replicator:
            password: "{% raw %}{{ context.replicator_password }}{% endraw %}"
            roles: [replication]
            privileges:
              - permissions: [execute]
                functions: [failover.execute]
          client:
            password: 'secret'
            roles: [super]
      memtx:
        memory: 114748364
      config:
        context:
          replicator_password:
            from: env
            env: TCS_REPL_PASS
      iproto:
        advertise:
          peer:
            login: 'replicator'

Динамический инвентарь для TCS 1.x

Добавлено в версии 1.12.0.

---
plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: TCS

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: tcs
  tarantool_etcd_host: "{{ tarantool_etcd_host }}"
  tcs_v1_support: true
  tcs_http_credentials:
    username: tcs
    password: tcs
  tcs_sql_credentials:
    username: tcs
    password: tcs
  tcs_storage_group_name: aggregator
  tcs_storage_replicaset_name: aggregator-r01
  tarantool_wait_alive_delay: 2
  tarantool_wait_alive_retries: 50
  cartridge_extra_env:
    TCS_REPL_PASS: super-secret
  tcs_extra_env:
    TOKIO_WORKER_THREADS: 1
  tarantool_config_global:
    fiber:
      slice:
        err: 15
    credentials:
      users:
        replicator:
          password: "{% raw %}{{ context.replicator_password }}{% endraw %}"
          roles: [replication]
          privileges:
            - permissions: [execute]
              functions: [failover.execute]
        client:
          password: 'secret'
          roles: [super]
    memtx:
      memory: 114748364
    config:
      context:
        replicator_password:
          from: env
          env: TCS_REPL_PASS
    iproto:
      advertise:
        peer:
          login: 'replicator'
    compat:
      box_error_serialize_verbose: "new"
    failover:
      call_timeout: 1
      connect_timeout: 1
      lease_interval: 10
      probe_interval: 1
      renew_interval: 10
      stateboard:
        keepalive_interval: 15
        renew_interval: 3

servers:
  - name: 'vm_1'
    host: '{{ tarantool_ansible_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
    zone: 'DC2'
    port_starts:
      iproto: 3444
      http: 8091

components:
  - name: coordinator
    replicasets: 1
    replicas: 2
  - name: aggregator
    replicasets: 1
    replicas: 2
    port_starts:
      http_streaming: 9081
    config:
      aggregator:
        rv_update_ms: 100
      replicaset:
        replication:
          failover: supervised
      group:
        roles: [app/aggregator_role, app/etcd_stateboard_client]
        roles_cfg:
          app/aggregator_role:
            tcs:
              aggregator:
                rv_update_ms: 10

Динамический инвентарь для TCS 1.x при включенном SSL для ETCD

---
plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: TCS

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: tcs
  tarantool_etcd_host: "{{ tarantool_etcd_host }}"
  tcs_v1_support: true
  tcs_sql_credentials:
    username: tcs
    password: tcs
  tcs_http_credentials:
    username: tcs
    password: tcs
  tcs_storage_group_name: aggregator
  tcs_storage_replicaset_name: aggregator-r01
  tarantool_wait_alive_delay: 2
  tarantool_wait_alive_retries: 50
  tarantool_etcd_schema_definition: "https"
  tarantool_config_etcd_ssl_key_file: "/certs/client.key"
  tarantool_config_etcd_ssl_cert_file: "/certs/client.crt"
  tarantool_config_etcd_ssl_ca_file: "/certs/rootCA.crt"
  cartridge_extra_env:
    TCS_REPL_PASS: super-secret
  tcs_extra_env:
    TOKIO_WORKER_THREADS: 1
  tarantool_config_global:
    fiber:
      slice:
        err: 15
    credentials:
      users:
        replicator:
          password: "{% raw %}{{ context.replicator_password }}{% endraw %}"
          roles: [replication]
          privileges:
            - permissions: [execute]
              functions: [failover.execute]
        client:
          password: 'secret'
          roles: [super]
    memtx:
      memory: 114748364
    config:
      context:
        replicator_password:
          from: env
          env: TCS_REPL_PASS
    iproto:
      advertise:
        peer:
          login: 'replicator'
    compat:
      box_error_serialize_verbose: "new"
    failover:
      call_timeout: 1
      connect_timeout: 1
      lease_interval: 10
      probe_interval: 1
      renew_interval: 10
      stateboard:
        keepalive_interval: 15
        renew_interval: 3

servers:
  - name: 'vm_1'
    host: '{{ tarantool_ansible_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
    zone: 'DC2'
    port_starts:
      iproto: 3444
      http: 8091

components:
  - name: coordinator
    replicasets: 1
    replicas: 2
  - name: aggregator
    replicasets: 1
    replicas: 2
    port_starts:
      http_streaming: 9081
      sql: 50021
    config:
      aggregator:
        rv_update_ms: 100
      replicaset:
        replication:
          failover: supervised
      group:
        roles: [app/aggregator_role, app/etcd_stateboard_client]
        roles_cfg:
          app/aggregator_role:
            tcs:
              rv_update_ms: 100

Tarantool DB

Информация о настройке TDB и сценарии для работы с этим продуктом приведены в разделе Tarantool DB.

Статический инвентарь для Tarantool DB 2.x

---
all:
  children:
    ROUTERS:
      children:
        router-1:
        router-2:
      vars:
        tarantool_config_group:
          app:
            module: app.vshard_bootstrapper
          sharding:
            roles: [router]
          roles:
            - roles.crud-router
            - roles.metrics-export
            - dictionary.roles.router
          roles_cfg:
            roles.crud-router:
              stats: true
              stats_driver: metrics
              stats_quantiles: true
              stats_quantile_tolerated_error: 0.001
              stats_quantile_age_buckets_count: 5
              stats_quantile_max_age_time: 180
    STORAGES:
      children:
        storage-1:
        storage-2:
      vars:
        tarantool_config_group:
          sharding:
            roles: [storage]
          roles:
            - roles.crud-storage
            - roles.expirationd
            - roles.metrics-export
            - dictionary.roles.storage
          memtx:
            memory: 536870912 #512MiB
          roles_cfg:
            roles.expirationd: []
    storage-1:
      hosts:
        storage-1-1:
        storage-1-2:
      vars:
        replicaset_alias: storage-1
        tarantool_config_replicaset:
          bootstrap_leader: storage-1-1
          replication:
            bootstrap_strategy: config
    storage-2:
      hosts:
        storage-2-1:
        storage-2-2:
      vars:
        replicaset_alias: storage-2
        tarantool_config_replicaset:
          bootstrap_leader: storage-2-1
          replication:
            bootstrap_strategy: config
    router-1:
      hosts:
        router-1:
      vars:
        replicaset_alias: router-1
    router-2:
      hosts:
        router-2:
      vars:
        replicaset_alias: router-2
    tarantooldb_test_env_1:
      hosts:
        storage-1-1:
          iproto:
            listen:
            - uri: 127.0.0.1:3401
            advertise:
              client: 127.0.0.1:3401
          roles_cfg:
            roles.metrics-export:
              http:
                - listen: 8181
                  endpoints:
                    - path: /metrics
                      format: prometheus
        router-1:
          iproto:
            listen:
            - uri: 127.0.0.1:3405
            advertise:
              client: 127.0.0.1:3405
          roles_cfg:
            roles.metrics-export:
              http:
                - listen: 8185
                  endpoints:
                    - path: /metrics
                      format: prometheus
      vars:
        ansible_host: 127.0.0.1
        ansible_user: astra
    tarantooldb_test_env_2:
      hosts:
        router-2:
          iproto:
            listen:
            - uri: 127.0.0.1:3406
            advertise:
              client: 127.0.0.1:3406
          roles_cfg:
            roles.metrics-export:
              http:
                - listen: 8186
                  endpoints:
                    - path: /metrics
                      format: prometheus
        storage-2-1:
          iproto:
            listen:
            - uri: 127.0.0.1:3403
            advertise:
              client: 127.0.0.1:3403
          roles_cfg:
            roles.metrics-export:
              http:
                - listen: 8183
                  endpoints:
                    - path: /metrics
                      format: prometheus
      vars:
        ansible_host: 127.0.0.1
        ansible_user: astra
    tarantooldb_test_env_3:
      hosts:
        storage-1-2:
          iproto:
            listen:
            - uri: 127.0.0.1:3402
            advertise:
              client: 127.0.0.1:3402
          roles_cfg:
            roles.metrics-export:
              http:
                - listen: 8182
                  endpoints:
                    - path: /metrics
                      format: prometheus
        storage-2-2:
          iproto:
            listen:
            - uri: 127.0.0.1:3404
            advertise:
              client: 127.0.0.1:3404
          roles_cfg:
            roles.metrics-export:
              http:
                - listen: 8184
                  endpoints:
                    - path: /metrics
                      format: prometheus
      vars:
        ansible_host: 127.0.0.1
        ansible_user: '{{ super_user }}'
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    ansible_ssh_retries: 5
    cartridge_app_name: tarantooldb
    tarantool_3_0_version_support: true
    tarantool_etcd_host: 127.0.0.1
    etcd_host: 127.0.0.1
    #etcd_cluster_prefix: /cluster
    cartridge_failover_params:
      prefix: /cluster
      state_provider: "etcd2"
      etcd2_params:
        endpoints:
          - "http://127.0.0.1:2379"
    tarantool_config_global:
      iproto:
        advertise:
          peer:
            login: replicator
          sharding:
            login: storage
      credentials:
        users:
          replicator:
            password: 'replicator_password'
            roles:
            - super
          storage:
            password: 'storage_password'
            roles:
            - sharding
          admin:
            password: 'secret-cluster-cookie'
            roles:
            - super
          client:
            password: 'secret'
            roles:
            - super
          admin-tcm:
            password: 'you-know-who'
            roles: ['super']

Динамический инвентарь для Tarantool DB 2.x

plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: tarantool
# distribution_strategy: StrategyEvenByZone

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: tarantooldb
  tarantool_etcd_host: "{{ tarantool_etcd_host }}"
  tarantool_tt_connect_username: client
  tarantool_tt_connect_password: secret
  tarantool_config_global:
    iproto:
      advertise:
        peer:
          login: replicator
        sharding:
          login: storage
    credentials:
      users:
        replicator:
          password: 'replicator_password'
          roles:
            - super
        storage:
          password: 'storage_password'
          roles:
            - sharding
        admin:
          password: 'secret-cluster-cookie'
          roles:
            - super
        client:
          password: 'secret'
          roles:
            - super
        admin-tcm:
          password: 'you-know-who'
          roles: ['super']

servers:
  - name: 'vm_1'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
  - name: 'vm_2'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    zone: 'DC5'
    user: '{{ super_user }}'
    port_starts:
      iproto: 3401
      http: 9091
  # - name: 'vm_3'
  #   host: 127.0.0.1
  #   advertise_host: '127.0.0.1'
  #   port: 2201
  #   zone: 'DC5'
  #   user: '{{ super_user }}'
  #   port_starts:
  #     iproto: 3444
  #     http: 9092

components:
  - name: storage
    replicasets: 2
    replicas: 2
    config:
      replicaset:
        memtx:
          memory: 512000000
      group:
        sharding:
          roles: [storage]
        roles:
          - roles.crud-storage
          - roles.expirationd
          - roles.metrics-export
          - dictionary.roles.storage
        memtx:
          memory: 536870912 #512MiB
        roles_cfg:
          roles.expirationd: []
  - name: router
    replicasets: 2
    replicas: 1
    config:
      group:
        app:
          module: app.vshard_bootstrapper
        sharding:
          roles: [router]
        roles:
          - roles.crud-router
          - roles.metrics-export
          - dictionary.roles.router
        roles_cfg:
          roles.crud-router:
            stats: true
            stats_driver: metrics
            stats_quantiles: true
            stats_quantile_tolerated_error: 0.001
            stats_quantile_age_buckets_count: 5
            stats_quantile_max_age_time: 180

# changes:
#   - type: set_variables
#     hosts:
#       - router
#       - storage-r02-i02
#     values:
#       example: test

Динамический инвентарь для Tarantool DB 2.x при включенном SSL для ETCD

---
plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: tarantool

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: tarantooldb
  tarantool_etcd_host: "{{ tarantool_etcd_host }}"
  tarantool_tt_connect_username: client
  tarantool_tt_connect_password: secret
  tarantool_3_0_version_support: true
  tarantool_etcd_schema_definition: "https"
  tarantool_config_etcd_ssl_key_file: "/certs/client.key"
  tarantool_config_etcd_ssl_cert_file: "/certs/client.crt"
  tarantool_config_etcd_ssl_ca_file: "/certs/rootCA.crt"
  tarantool_config_global:
    iproto:
      advertise:
        peer:
          login: replicator
        sharding:
          login: storage
    credentials:
      users:
        replicator:
          password: 'replicator_password'
          roles:
            - super
        storage:
          password: 'storage_password'
          roles:
            - sharding
        admin:
          password: 'secret-cluster-cookie'
          roles:
            - super
        client:
          password: 'secret'
          roles:
            - super
        admin-tcm:
          password: 'you-know-who'
          roles: ['super']

servers:
  - name: 'vm_1'
    host: '{{ tarantool_ansible_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
  - name: 'vm_2'
    host: '{{ tarantool_ansible_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    zone: 'DC5'
    user: '{{ super_user }}'
    port_starts:
      iproto: 3401
      http: 9091

components:
  - name: storage
    replicasets: 2
    replicas: 2
    config:
      replicaset:
        memtx:
          memory: 512000000
      group:
        sharding:
          roles: [storage]
        roles:
          - roles.crud-storage
          - roles.expirationd
          - roles.metrics-export
          - dictionary.roles.storage
        replication:
          failover: supervised
        memtx:
          memory: 536870912 #512MiB
        roles_cfg:
          roles.expirationd: []
  - name: router
    replicasets: 2
    replicas: 1
    config:
      group:
        app:
          module: app.vshard_bootstrapper
        sharding:
          roles: [router]
        roles:
          - roles.crud-router
          - roles.metrics-export
          - dictionary.roles.router
        roles_cfg:
          roles.crud-router:
            stats: true
            stats_driver: metrics
            stats_quantiles: true
            stats_quantile_tolerated_error: 0.001
            stats_quantile_age_buckets_count: 5
            stats_quantile_max_age_time: 180
  - name: coordinator
    replicasets: 1
    replicas: 2

Динамический инвентарь для Tarantool DB 2.x с централизованным хранилищем Tarantool Config Storage

plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: tarantool
# distribution_strategy: StrategyEvenByZone

constants:
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
  cartridge_app_name: tarantooldb
  tarantool_tt_connect_username: client
  tarantool_tt_connect_password: secret
  tarantool_config_storage_endpoints:
    - uri: "http://{{ tarantool_etcd_host }}:4401"
      login: "config-storage"
      password: "123456"
  tarantool_config_storage_prefix: "/tarantool/tarantooldb"
  tarantool_config_storage: tarantool
  tarantool_config_global:
    iproto:
      advertise:
        peer:
          login: replicator
        sharding:
          login: storage
    credentials:
      users:
        replicator:
          password: 'replicator_password'
          roles:
            - super
        storage:
          password: 'storage_password'
          roles:
            - sharding
        admin:
          password: 'secret-cluster-cookie'
          roles:
            - super
        client:
          password: 'secret'
          roles:
            - super
        admin-tcm:
          password: 'you-know-who'
          roles: ['super']

servers:
  - name: 'vm_2'
    host: '{{ tarantool_ansible_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'
    port_starts:
      iproto: 3301
      http: 9091
  - name: 'vm_3'
    host: '{{ tarantool_ansible_host }}'
    advertise_host: '127.0.0.1'
    port: 2201
    zone: 'DC5'
    user: '{{ super_user }}'
    port_starts:
      iproto: 3401
      http: 9091

components:
  - name: storage
    replicasets: 2
    replicas: 2
    config:
      replicaset:
        memtx:
          memory: 512000000
      group:
        sharding:
          roles: [storage]
        roles:
          - roles.crud-storage
          - roles.expirationd
          - roles.metrics-export
          - dictionary.roles.storage
        memtx:
          memory: 536870912 #512MiB
        roles_cfg:
          roles.expirationd: []
  - name: router
    replicasets: 2
    replicas: 1
    config:
      group:
        app:
          module: app.vshard_bootstrapper
        sharding:
          roles: [router]
        roles:
          - roles.crud-router
          - roles.metrics-export
          - dictionary.roles.router
        roles_cfg:
          roles.crud-router:
            stats: true
            stats_driver: metrics
            stats_quantiles: true
            stats_quantile_tolerated_error: 0.001
            stats_quantile_age_buckets_count: 5
            stats_quantile_max_age_time: 180

Tarantool DB (RESP)

Статический инвентарь

tdb-redis-cluster-1:
  children:
    STORAGES:
      hosts:
        tdb-redis-r01-s01:
        tdb-redis-r01-s02:
    replicaset_tdb_storage_01:
      hosts:
        tdb-redis-r01-s01:
        tdb-redis-r01-s02:
      vars:
        failover_priority:
          - tdb-redis-r01-s01
          - tdb-redis-r01-s02
        replicaset_alias: tdb-storage-01
        roles:
          - metrics
          - failover-coordinator
          - app.roles.tdb_redis
    vm_1:
      hosts:
        tdb-redis-r01-s01:
      vars:
        ansible_host: 127.0.0.1
        ansible_user: '{{ super_user }}'
    vm_2:
      hosts:
        tdb-redis-r01-s02:
      vars:
        ansible_host: 127.0.0.1
        ansible_user: '{{ super_user }}'
  hosts:
    tdb-redis-r01-s01:
      config:
        advertise_uri: localhost:3401
        http_port: 8080
        log: /app/logs/tdb-redis/tdb-redis-r01-s01.log
        vinyl_cache: 0
        vinyl_memory: 0
        tdb_redis_port: 6379
    tdb-redis-r01-s02:
      config:
        advertise_uri: localhost:3410
        http_port: 8099
        log: /app/logs/tdb-redis/tdb-redis-r01-s02.log
        vinyl_cache: 0
        vinyl_memory: 0
        tdb_redis_port: 6380
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_app_directory: /app/tarantool/tdb-redis
    cartridge_app_name: tdb-redis
    cartridge_keep_num_latest_dists: 10
    cartridge_cluster_cookie: molecule-testing
    cartridge_failover_params:
      etcd2_params:
        endpoints:
          - http://{{ tarantool_etcd_host }}:2379
        lock_delay: 10
        prefix: /tdb-redis-1
      failover_timeout: 20
      fencing_enabled: true
      fencing_pause: 2
      fencing_timeout: 10
      mode: stateful
      state_provider: etcd2

Tarantool Data Grid

Сценарии для работы с TDG приведены в разделе Tarantool Data Grid.

Статический инвентарь

---
tdg-cluster:
  children:
    CORE:
      hosts:
        tdg-core-01:
        tdg-core-02:
    CORE_GROUP_1:
      hosts:
        tdg-core-01:
    CORE_GROUP_2:
      hosts:
        tdg-core-02:
    RUNNERS:
      hosts:
        tdg-runner-01:
    STORAGES:
      hosts:
        tdg-r01-s01:
        tdg-r01-s02:
    STORAGES_GROUP_1:
      hosts:
        tdg-r01-s01:
    STORAGES_GROUP_2:
      hosts:
        tdg-r01-s02:
    replicaset_lt_core:
      hosts:
        tdg-core-01:
        tdg-core-02:
      vars:
        failover_priority:
          - tdg-core-01
          - tdg-core-02
        replicaset_alias: lt-core
        roles:
          - core
    replicaset_lt_runner_01:
      hosts:
        tdg-runner-01:
      vars:
        failover_priority:
          - tdg-runner-01
        replicaset_alias: lt-runner-01
        roles:
          - connector
          - failover-coordinator
          - runner
    replicaset_lt_storage_01:
      hosts:
        tdg-r01-s01:
        tdg-r01-s02:
      vars:
        failover_priority:
          - tdg-r01-s01
          - tdg-r01-s02
        replicaset_alias: lt-storage-01
        roles:
          - storage
  hosts:
    tdg-core-01:
      config:
        advertise_uri: localhost:3301
        http_port: 8081
        log: /app/logs/tdg/tdg-core-01.log
        vinyl_cache: 0
        vinyl_memory: 0
    tdg-core-02:
      config:
        advertise_uri: localhost:3302
        http_port: 8082
        log: /app/logs/tdg/tdg-core-02.log
        vinyl_cache: 0
        vinyl_memory: 0
    tdg-r01-s01:
      config:
        advertise_uri: localhost:3303
        http_port: 8083
        log: /app/logs/tdg/tdg-r01-s01.log
    tdg-r01-s02:
      config:
        advertise_uri: localhost:3304
        http_port: 8084
        log: /app/logs/tdg/tdg-r01-s02.log
    tdg-runner-01:
      config:
        advertise_uri: localhost:3305
        http_port: 8080
        log: /app/logs/tdg/tdg-runner-01.log
  vars:
    ansible_host: 127.0.0.1
    ansible_user: '{{ super_user }}'
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_cluster_cookie: tdg-secret-cookie
    cartridge_app_config:
      ldap:
        body:
          - domain: test.mail.ru
            hosts:
              - localhost:389
            options: []
            roles:
              - domain_groups:
                  - CN=test,OU=Groups,OU=Test,DC=test,DC=mail,DC=ru
                role: admin
            search_timeout: 2
            use_active_directory: true
            use_tls: false
      metrics:
        body:
          export:
            - format: prometheus
              path: /metrics
            - format: health
              path: /health
          global-labels:
            name: tdg
    cartridge_app_name: tdg
    cartridge_defaults:
      log_level: 5
    cartridge_failover_params:
      etcd2_params:
        endpoints:
          - http://{{ tarantool_etcd_host }}:2379
        lock_delay: 10
        prefix: /tdg-cluster
      failover_timeout: 20
      fencing_enabled: true
      fencing_pause: 2
      fencing_timeout: 10
      mode: stateful
      state_provider: etcd2
    cartridge_keep_num_latest_dists: 10
    cartridge_package_name: tdg

Tarantool Queue Enterprise

Сценарии для работы с TQE приведены в разделе Tarantool Queue Enterprise (MQ).

Статический инвентарь

all:
  children:
    # Группа, серверы шины
    bus:
      vars:
        # Конфигурация, которая будет загружена в кластер после его готовности
        cartridge_app_config:
          # Логин пароль для подключения к Tarantool
          creds:
            body:
              user: user
              pass: pass
          # Список очередей, которые будут доступны на шине
          queues:
            body:
              - output_by_instruments
              - output_by_users
              - input
              - dictionaries
          # Конфигурация метрик, по какому URL и в каком формате забирать метрики
          metrics:
            body:
              export:
                - format: prometheus
                  path: /metrics
                - format: health
                  path: /health
              global-labels:
                ris_name: my-app
                ris_sub: prod
        ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
        cartridge_app_name: my-app
        cartridge_app_directory: "{{ cartridge_app_directory }}"
        cartridge_app_install_dir: "{{ cartridge_app_directory }}/dist"
        cartridge_app_instances_dir: "{{ cartridge_app_directory }}/bin"
        cartridge_run_dir: "{{ cartridge_app_directory }}/run"
        cartridge_data_dir: "{{ cartridge_app_directory }}/workdir"
        cartridge_conf_dir: "{{ cartridge_app_directory }}/etc/conf.d"
        cartridge_log_dir_parent: "{{ cartridge_log_dir_parent }}"
        cartridge_memtx_dir_parent: "{{ cartridge_memtx_dir_parent }}"
        cartridge_cluster_cookie: some-random-cookie-for-each-cluster
        cartridge_app_group: tarantool
        cartridge_app_user: tarantool
        cartridge_install_tarantool_for_tgz: false
        cartridge_keep_num_latest_dists: 10
        cartridge_multiversion: true
        cartridge_not_save_cookie_in_app_config: false
        cartridge_bootstrap_vshard: true
        cartridge_configure_systemd_unit_files: false
        cartridge_configure_tmpfiles: false
        cartridge_create_user_group_for_tgz: false
        cartridge_defaults:
          audit_filter: compatibility,audit,ddl,custom
          audit_format: plain
          audit_log: syslog:identity=tarantool,facility=user
          log_format: json
          log_level: 5
        cartridge_failover_params:
          mode: eventual
        tarantool_configure_logrotate: true
      hosts:
        my-app-core-01:
          ansible_host: 127.0.0.1
          ansible_user: '{{ super_user }}'
        my-app-api-01:
          ansible_host: 127.0.0.1
          ansible_user: '{{ super_user }}'

    # Группа, конфигурация набора реплик для Tarantool
    replicaset-my-app-core:
      hosts:
        # Список хостов, которые входят в эту группу
        my-app-core-01:
      vars:
        # Приоритет переключения master'a для failover
        # При падении master'a его роль передается следующему в списке
        failover_priority:
          - my-app-core-01
        # Название набора реплик
        replicaset_alias: my-app-core
        # Роли, которые нужно назначить набору реплик
        # Не изменять
        roles:
          - app.roles.queue
          - app.roles.api
  hosts:
    # Хост, экземпляр Tarantool шины СЭТ
    my-app-core-01:
      config:
        # HOST:PORT для подключения по iproto
        advertise_uri: localhost:3305
        # HOST:PORT для iproto трафика
        http_port: 8085
        # настройка записи логов в файл
        log: /app/logs/my-app/my-app-core-01.log
    # Хост, экземпляр Синхронного API и API подписок шины СЭТ
    my-app-api-01:
      state: started
      # Состояние, в котором должен находиться сервис:
      # started   - сервис запущен
      # stopped   - сервис остановлен
      # restarted - сервис перезапущен
      config:
        # Обязательно заполнить этот параметр
        advertise_uri: localhost:3305
        app_name: BUS_API
        app_version: develop
        core_host: 0.0.0.0
        # Порт подключения для выполнения административных функций
        # Например, снятие метрик
        core_port: 8184
        grpc_host: 0.0.0.0
        # Порт, по которому доступно GRPC API сервиса
        grpc_port: 8182

        tracing:
          jaeger_collector_endpoint: "http://localhost:14268/api/traces"

        # Конфигурация подключения к Tarantool
        publisher:
          enabled: true
          tarantool:
            user: "{{ hostvars[groups['bus'][0]]['cartridge_app_config']['creds']['body']['user'] }}"
            pass: "{{ hostvars[groups['bus'][0]]['cartridge_app_config']['creds']['body']['pass'] }}"
            queues:
              output_by_instruments:
                connections:
                  storage:
                    - localhost:3305
              output_by_users:
                connections:
                  storage:
                    - localhost:3305
              input:
                connections:
                  routers:
                    - localhost:3305
              dictionaries:
                connections:
                  storage:
                    - localhost:3305

        # Конфигурация подключения к Tarantool
        consumer:
          enabled: true
          polling_timeout: 500ms
          tarantool:
            user: user
            pass: pass
            queues:
              output_by_instruments:
                connections:
                  storage:
                    - localhost:3305
              output_by_users:
                connections:
                  storage:
                    - localhost:3305
              input:
                connections:
                  routers:
                    - localhost:3305
              dictionaries:
                connections:
                  storage:
                    - localhost:3305

Статический инвентарь (версия 3.0.0)

all:
  children:
    # Группа, серверы шины
    bus:
      vars:
        # Конфигурация, которая будет загружена в кластер после его готовности
        cartridge_app_config:
          # Логин и пароль для подключения к Tarantool
          creds:
            body:
              user: user
              pass: pass
          # Список очередей, которые будут доступны на шине
          queues:
            body:
              - output_by_instruments
              - output_by_users
              - input
              - dictionaries
          # Конфигурация метрик (в каком формате и по каким URL забирать метрики)
          metrics:
            body:
              export:
                - format: prometheus
                  path: /metrics
                - format: health
                  path: /health
              global-labels:
                ris_name: my-app
                ris_sub: prod
        # Параметры SSH-подключения
        ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
        # Основные пути и директории приложения
        cartridge_app_name: my-app
        cartridge_app_directory: "{{ cartridge_app_directory }}"
        cartridge_app_install_dir: "{{ cartridge_app_directory }}/dist"
        cartridge_app_instances_dir: "{{ cartridge_app_directory }}/bin"
        cartridge_run_dir: "{{ cartridge_app_directory }}/run"
        cartridge_data_dir: "{{ cartridge_app_directory }}/workdir"
        cartridge_conf_dir: "{{ cartridge_app_directory }}/etc/conf.d"
        cartridge_log_dir_parent: "{{ cartridge_log_dir_parent }}"
        cartridge_memtx_dir_parent: "{{ cartridge_memtx_dir_parent }}"
        cartridge_cluster_cookie: some-random-cookie-for-each-cluster
        # Пользователь и группа под которыми запускается Tarantool
        cartridge_app_group: tarantool
        cartridge_app_user: tarantool
        # Прочие параметры установки
        cartridge_install_tarantool_for_tgz: false
        cartridge_keep_num_latest_dists: 10
        cartridge_multiversion: true
        cartridge_not_save_cookie_in_app_config: false
        cartridge_bootstrap_vshard: true
        cartridge_configure_systemd_unit_files: false
        cartridge_configure_tmpfiles: false
        cartridge_create_user_group_for_tgz: false
        # Значения по умолчанию для конфигурации Tarantool
        cartridge_defaults:
          audit_filter: compatibility,audit,ddl,custom
          audit_format: plain
          audit_log: syslog:identity=tarantool,facility=user
          log_format: json
          log_level: 5
        # Настройки failover
        cartridge_failover_params:
          mode: eventual
        # Настройка logrotate
        tarantool_configure_logrotate: true
      hosts:
        my-app-core-01:
          ansible_host: 127.0.0.1
          ansible_user: '{{ super_user }}'
        my-app-api-01:
          ansible_host: 127.0.0.1
          ansible_user: '{{ super_user }}'

    # Группа, конфигурация набора реплик для Tarantool
    replicaset-my-app-core:
      hosts:
        # Список хостов, которые входят в эту группу
        my-app-core-01:
      vars:
        # Приоритет переключения master'a для failover
        failover_priority:
          - my-app-core-01
        # Название набора реплик
        replicaset_alias: my-app-core
        # Роли, которые нужно назначить набору реплик
        roles:
          - app.roles.queue
          - app.roles.api
  hosts:
    # Хост, экземпляр Tarantool шины СЭТ
    my-app-core-01:
      config:
        # HOST:PORT для подключения по iproto
        advertise_uri: localhost:3305
        # HOST:PORT для iproto трафика (http API Tarantool)
        http_port: 8085
        # настройка записи логов в файл
        log: /app/logs/my-app/my-app-core-01.log

    # Хост, экземпляр API сервиса (gRPC + REST)
    my-app-api-01:
      state: started
      # Состояние сервиса (started/stopped/restarted)
      config:
        # Обязательно заполнить этот параметр
        advertise_uri: localhost:3305
        # Название и версия приложения
        app_name: BUS_API
        app_version: develop

        # Настройки административного HTTP-интерфейса (метрики/health)
        core_host: 0.0.0.0
        core_port: 8184

        # В новой версии вместо grpc_host/grpc_port используется grpc_listen
        grpc_listen:
          # IPv4 слушатель
          - uri: "tcp://0.0.0.0:8182"
          # IPv6 слушатель
          - uri: "tcp://[::]:8182"

        # Логи gRPC-сервера
        log:
          file: /app/logs/my-app/grpc_log.json
          format: json
          level: info

        # Опции gRPC (включена рефлексия для grpcurl list)
        grpc_options:
          reflection_enabled: true

        # Конфигурация подключения продьюсера (бывший publisher)
        producer:
          enabled: true
          tarantool:
            user: user
            pass: pass
            # Базовые соединения для всех очередей
            connections:
              routers:
                - "127.0.0.1:3307"
                - "127.0.0.1:3308"
          queues:
            # Очереди объявлены, но могут использовать базовые соединения
            output_by_instruments: {}
            output_by_users: {}
            input: {}
            dictionaries: {}

        # Конфигурация подключения консюмера
        consumer:
          enabled: true
          polling_timeout: 500ms
          tarantool:
            user: user
            pass: pass
            # Базовые соединения (каноничный алиас storage-1)
            connections:
              storage-1:
                - "127.0.0.1:3301"
                - "127.0.0.1:3302"
          queues:
            # Для конкретной очереди можно переопределить соединения
            output_by_instruments:
              connections:
                storage-1:
                  - "127.0.0.1:3301"
            output_by_users: {}
            input: {}
            dictionaries: {}

Динамический инвентарь (версия 3.0.0)

# Плагин динамического инвентаря
plugin: tarantool.enterprise.generator

# Имя кластера и продукт
cluster_name: tarantool
product: TQE
# distribution_strategy: StrategyEvenByZone  # (опционально) стратегия раскладки по зонам

# Константы — общие параметры для всего кластера
constants:
  # Куда собирать логи локально на хосте Ansible
  tarantool_collected_logs_local_path: /tmp/logs

  # Параметры SSH-подключения
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

  # Имя приложения и системный пользователь/группа
  cartridge_app_name: my-app
  cartridge_app_group: tarantool
  cartridge_app_user: tarantool

  # Подключение etcd по TLS и пути до сертификатов
  tarantool_etcd_schema_definition: "https"
  tarantool_config_etcd_ssl_key_file: "/certs/client.key"
  tarantool_config_etcd_ssl_cert_file: "/certs/client.crt"
  tarantool_config_etcd_ssl_ca_file: "/certs/rootCA.crt"

  # Глобальная конфигурация Tarantool Config
  tarantool_config_global:
    # Настройка ролей и их параметров
    roles_cfg:
      app.roles.queue:
        queues:
          - name: queue
          - name: output_by_instruments
          - name: output_by_users
          - name: input
          - name: dictionaries
      # Пример для роутеров (раскомментировать при необходимости)
      # app.roles.api:
      #   autobootstrap: true
      #   sharding:
      #     routing:
      #       core_storage-r01:
      #         buckets:
      #           - [501, 1000]
      #       core_storage-r02:
      #         buckets:
      #           - [1, 500]

    # Пользователи и их роли/пароли
    credentials:
      users:
        user:
          roles: [super]
          password: pass
        storage:
          roles: [sharding]
          password: storage
        client:
          password: 'secret'
          roles: [super]
        replicator:
          password: 'topsecret'
          roles: [replication]

    # Настройки iproto авторизации для ролей peer/sharding
    iproto:
      advertise:
        peer:
          login: replicator
        sharding:
          login: storage
          password: storage

    # Общие параметры шардирования
    sharding:
      bucket_count: 1000
      rebalancer_mode: "off"

# Описание хостов, на которых разворачивается кластер
servers:
  - name: 'vm_1'
    host: '{{ tarantool_ansible_host }}'  # адрес берётся из внешней переменной
    advertise_host: '127.0.0.1'           # адрес, по которому экземпляры будут анонсироваться
    port: 2201                            # SSH-порт
    user: '{{ super_user }}'              # SSH-пользователь

# Описание компонент кластера и их параметров
components:
  # Хранилища (storage)
  - name: core_storage
    replicasets: 2     # количество наборов реплик
    replicas: 3        # число копий в каждом наборе
    config:
      replicaset:
        memtx:
          memory: 512000000
        roles:
          - app.roles.queue
        sharding:
          roles: [storage]

  # Роутеры (router)
  - name: core_router
    replicasets: 2
    replicas: 1
    config:
      replicaset:
        roles:
          - app.roles.api
        sharding:
          roles: [router]

  # gRPC-сервис (новая схема 3.0.0)
  - name: grpc_server
    replicasets: 1
    replicas: 1
    config:
      # Название и версия приложения
      app_name: BUS_API
      app_version: develop

      # gRPC слушатели (вместо grpc_host/grpc_port)
      grpc_listen:
        - uri: "tcp://0.0.0.0:8182"   # IPv4
        - uri: "tcp://[::]:8182"     # IPv6

      # Административный HTTP (метрики/health)
      core_host: 0.0.0.0
      core_port: 8089

      # Настройка логирования gRPC
      log:
        file: /app/logs/my-app/grpc_log.json
        format: json
        level: info

      # gRPC-опции (включена рефлексия — удобно для grpcurl list)
      grpc_options:
        reflection_enabled: true

      # Продьюсер (бывший publisher) — новая схема
      producer:
        enabled: true
        tarantool:
          user: user
          pass: pass
          # Базовые соединения для всех очередей
          connections:
            routers:
              - "127.0.0.1:3307"
              - "127.0.0.1:3308"
        # Перечень очередей (per-queue можно переопределить connections)
        queues:
          queue: {}
          output_by_instruments: {}
          output_by_users: {}
          input: {}
          dictionaries: {}

      # Консюмер (каноничный алиас storage-1)
      consumer:
        enabled: true
        polling_timeout: 500ms
        tarantool:
          user: user
          pass: pass
          # Базовые соединения для всех очередей
          connections:
            storage-1:
              - "127.0.0.1:3301"
              - "127.0.0.1:3302"
              - "127.0.0.1:3303"
              - "127.0.0.1:3304"
              - "127.0.0.1:3305"
              - "127.0.0.1:3306"
        queues:
          queue: {}
          # Пример точечного переопределения соединений на уровне очереди
          output_by_instruments:
            connections:
              storage-1:
                - "127.0.0.1:3301"
          output_by_users: {}
          input: {}
          dictionaries: {}

# Изменения поверх сгенерированного инвентаря (патчи)
changes:
  - type: set_variables
    hosts:
      - core_storage-r01-i02
    values:
      replication:
        anon: true

Статический инвентарь для Tarantool 3.x (1 реплика)

---
tarantool:
  children:
    bus:
      children:
        cores:
      vars:
        tarantool_config_group:
          roles:
            - app.roles.api
            - app.roles.queue
          sharding:
            roles: [router, storage]
    cores:
      hosts:
        tqe-app-core-01:
      vars:
        replicaset_alias: cores
        tarantool_group_name: cores
        tarantool_config_replicaset:
          roles_cfg:
            app.roles.queue:
              queues:
                - name: output_by_instruments
                - name: output_by_users
                - name: input
                - name: dictionaries
                - name: queue
            app.roles.api:
              autobootstrap: true
              sharding:
                routing:
                  cores:
                    buckets:
                      - [1, 1000]
        tarantool_config_global:
          credentials:
            users:
              user:
                roles: [super]
                password: pass
              storage:
                roles: [sharding]
                password: storage
          iproto:
            advertise:
              sharding:
                login: storage
                password: storage
          sharding:
            bucket_count: 1000
            rebalancer_mode: "off"
    vm_1:
      vars:
        ansible_host: 127.0.0.1
        ansible_user: "{{ super_user }}"
      hosts:
        tqe-app-core-01:
          iproto:
            listen:
              - uri: 127.0.0.1:3305
            advertise:
              client: 127.0.0.1:3305
          labels:
            server: "{{ ansible_host }}"
        my-app-api-01:
          state: started
          config:
            advertise_uri: localhost:3305
            app_name: BUS_API
            app_version: develop
            core_host: 0.0.0.0
            # Порт подключения для выполнения административных функций
            # Например, снятие метрик
            core_port: 8184
            grpc_host: 0.0.0.0
            # Порт, по которому доступно GRPC API сервиса
            grpc_port: 8182

            tracing:
              jaeger_collector_endpoint: "http://localhost:14268/api/traces"

            # Конфигурация подключения к Tarantool
            publisher:
              enabled: true
              tarantool:
                user: user
                pass: pass
                queues:
                  queue:
                    connections:
                      routers:
                        - localhost:3305
                  output_by_instruments:
                    connections:
                      storage:
                        - localhost:3305
                  output_by_users:
                    connections:
                      storage:
                        - localhost:3305
                  input:
                    connections:
                      routers:
                        - localhost:3305
                  dictionaries:
                    connections:
                      storage:
                        - localhost:3305

            # Конфигурация подключения к Tarantool
            consumer:
              enabled: true
              polling_timeout: 500ms
              tarantool:
                user: user
                pass: pass
                queues:
                  queue:
                    connections:
                      storage:
                        - localhost:3305
                  output_by_instruments:
                    connections:
                      storage:
                        - localhost:3305
                  output_by_users:
                    connections:
                      storage:
                        - localhost:3305
                  input:
                    connections:
                      routers:
                        - localhost:3305
                  dictionaries:
                    connections:
                      storage:
                        - localhost:3305
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    cartridge_app_name: my-app
    cartridge_app_group: tarantool
    cartridge_app_user: tarantool

Статический инвентарь для Tarantool 3.x (несколько реплик/наборов реплик, бутстрап последнего экземпляра роутера)

tarantool:
  children:
    ROUTERS:
      children:
        router-01:
        router-02:
      vars:
        tarantool_config_group:
          roles:
            - app.roles.api
          sharding:
            roles: [router] 
    STORAGES:
      children:
        storage-01:
        storage-02:
      vars:
        tarantool_config_group:
          memtx:
            memory: 512000000
          roles:
            - app.roles.queue
          sharding:
            roles: [storage]
    router-01:
      hosts:
        router-r01-s01:
      vars:
        replicaset_alias: router-01
    router-02:
      hosts:
        router-r02-s01:
      vars:
        replicaset_alias: router-02
        roles_cfg:
          app.roles.api:
            autobootstrap: true
            sharding:
              routing:
                storage-01:
                  buckets:
                    - [501, 1000]
                storage-02:
                  buckets:
                    - [1, 500]
    storage-01:
      hosts:
        storage-r01-s01:
        storage-r01-s02:
      vars:
        replicaset_alias: storage-01
    storage-02:
      hosts:
        storage-r02-s01:
        storage-r02-s02:
      vars:
        replicaset_alias: storage-02
    vm_1:
      vars:
        ansible_host: "{{ tarantool_ansible_host }}"
        ansible_port: 2201
        ansible_user: "{{ super_user }}"
      hosts:
        router-r01-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3305
            advertise:
              client: 127.0.0.1:3305
          labels:
            server: "{{ ansible_host }}"
        router-r02-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3306
            advertise:
              client: 127.0.0.1:3306
          labels:
            server: "{{ ansible_host }}"
        storage-r01-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3307
            advertise:
              client: 127.0.0.1:3307
          labels:
            server: "{{ ansible_host }}"
        storage-r01-s02:
          iproto:
            listen:
              - uri: 127.0.0.1:3308
            advertise:
              client: 127.0.0.1:3308
          labels:
            server: "{{ ansible_host }}"
        storage-r02-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3309
            advertise:
              client: 127.0.0.1:3309
          labels:
            server: "{{ ansible_host }}"
        storage-r02-s02:
          iproto:
            listen:
              - uri: 127.0.0.1:3304
            advertise:
              client: 127.0.0.1:3304
          labels:
            server: "{{ ansible_host }}"
        grpc-01:
          state: started
          tarantool_grpc: true
          config:
            app_name: BUS_API
            app_version: develop
            core_host: 0.0.0.0
            # Порт подключения для выполнения административных функций
            # Например, снятие метрик
            core_port: 8184
            grpc_host: 0.0.0.0
            # Порт, по которому доступно GRPC API сервиса
            grpc_port: 8182
            log:
              file: /app/logs/my-app/grpc_logs.json
              format: json

            tracing:
              jaeger_collector_endpoint: "http://localhost:14268/api/traces"

            # Конфигурация подключения к Tarantool
            publisher:
              enabled: true
              tarantool:
                user: user
                pass: pass
                queues:
                  queue:
                    connections:
                      routers:
                        - localhost:3305
                        - localhost:3306
                  output_by_instruments:
                    connections:
                      routers:
                        - localhost:3305
                        - localhost:3306
                  output_by_users:
                    connections:
                      routers:
                        - localhost:3305
                        - localhost:3306
                  input:
                    connections:
                      routers:
                        - localhost:3305
                        - localhost:3306
                  dictionaries:
                    connections:
                      routers:
                        - localhost:3305
                        - localhost:3306

            # Конфигурация подклчения к Tarantool
            consumer:
              enabled: true
              polling_timeout: 500ms
              tarantool:
                user: user
                pass: pass
                queues:
                  queue:
                    connections:
                      storage:
                        - localhost:3304
                        - localhost:3308
                        - localhost:3309
                        - localhost:3307
                  output_by_instruments:
                    connections:
                      storage:
                        - localhost:3304
                        - localhost:3308
                        - localhost:3309
                        - localhost:3307
                  output_by_users:
                    connections:
                      storage:
                        - localhost:3307
                        - localhost:3304
                        - localhost:3308
                        - localhost:3309
                  input:
                    connections:
                      storage:
                        - localhost:3307
                        - localhost:3304
                        - localhost:3308
                        - localhost:3309
                  dictionaries:
                    connections:
                      storage:
                        - localhost:3307
                        - localhost:3304
                        - localhost:3308
                        - localhost:3309
  vars:
    tarantool_collected_logs_local_path: /tmp/logs
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    cartridge_app_name: my-app
    cartridge_app_group: tarantool
    cartridge_app_user: tarantool
    tarantool_config_global:
      roles_cfg:
        app.roles.queue:
          queues:
            - name: queue
            - name: output_by_instruments
            - name: output_by_users
            - name: input
            - name: dictionaries
      credentials:
        users:
          user:
            roles: [super]
            password: pass
          storage:
            roles: [sharding]
            password: storage
          client:
            password: 'secret'
            roles: [super]
          replicator:
            password: 'topsecret'
            roles: [replication]
      iproto:
        advertise:
          peer:
            login: replicator
          sharding:
            login: storage
            password: storage
      sharding:
        bucket_count: 1000
        rebalancer_mode: "off"

Динамический инвентарь для Tarantool 3.x

plugin: tarantool.enterprise.generator
cluster_name: tarantool
product: TQE
# distribution_strategy: StrategyEvenByZone

constants:
  tarantool_collected_logs_local_path: /tmp/logs
  ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
  cartridge_app_name: my-app
  cartridge_app_group: tarantool
  cartridge_app_user: tarantool
  tarantool_config_global:
    roles_cfg:
      app.roles.queue:
        queues:
          - name: queue
      app.roles.api:
        autobootstrap: true
        sharding:
          routing:
            core-r01:
              buckets:
                - [1, 1000]
    credentials:
      users:
        user:
          roles: [super]
          password: pass
        storage:
          roles: [sharding]
          password: storage
    iproto:
      advertise:
        sharding:
          login: storage
          password: storage
    sharding:
      bucket_count: 1000
      rebalancer_mode: "off"

servers:
  - name: 'vm_1'
    host: 127.0.0.1
    advertise_host: '127.0.0.1'
    port: 2201
    user: '{{ super_user }}'

components:
  - name: core
    replicasets: 1
    replicas: 1
    config:
      replicaset:
        memtx:
          memory: 512000000
        roles:
          - app.roles.api
          - app.roles.queue
        sharding:
          roles: [router, storage]
  - name: grpc_server
    replicasets: 1
    replicas: 1
    config:
      app_name: BUS_API
      app_version: develop
      log:
        file: /app/logs/my-app/grpc_log.json
        format: json
      publisher:
        enabled: true
        tarantool:
          user: user
          pass: pass
          queues:
            queue:
            output_by_instruments:
              connections:
                example:
                  - "127.0.0.1:3301"
            output_by_users:
            input:
            dictionaries:
      consumer:
        enabled: true
        polling_timeout: 500ms
        tarantool:
          user: user
          pass: pass
          queues:
            queue:
            output_by_instruments:
              connections:
                example:
                  - "127.0.0.1:3301"
            output_by_users:
            input:
            dictionaries:

Переменные управления правами доступа

Глобальные переменные (базовые)

Переменная

Назначение

Рекомендуемое значение

Где используется

tarantool_dir_mode

Права доступа на директории

0750

Во всех ролях, создающих каталоги

tarantool_file_mode

Права доступа на неисполняемые файлы

0644

Во всех ролях, создающих файлы конфигурации и неисполняемые файлы

tarantool_exec_file_mode

Права доступа на исполняемые скрипты

0755

В роли cartridge для установщика

tarantool_secret_file_mode

Права доступа на приватные ключи, токены, SSH-файлы

0400

os_configure, etcd, logrotate

tarantool_user

Пользователь, от имени которого работают компоненты

tarantool

Все роли (как owner)

cartridge

Переменная

Назначение

cartridge_dir_mode

Права доступа на директории приложения

cartridge_file_mode

Права доступа на конфигурационные файлы

cartridge_installer_script_mode

Права доступа на установочные скрипты

cartridge_app_config_mode

Права доступа на итоговый файл конфигурации в формате YAML

cartridge_backups_dir_mode

Права доступа на директории для бэкапов

backup_dir_mode

Права доступа на бэкап-каталог

backup_owner_user

Владелец архива бэкапа (совпадает с tarantool_user)

cartridge_app_user

Пользователь приложения (по умолчанию tarantool)

cartridge_app_group

Группа приложения (по умолчанию tarantool)

cluster_manager (TCM)

Переменная

Назначение

tcm_dir_mode

Права доступа на директории TCM

tcm_file_mode

Права доступа на файлы TCM

Переменные для конфигурации Tarantool Cluster Manager

Переменная

Назначение

tcm_log_output

Тип вывода записей журнала: file – запись в файл, syslog – отправка на syslog-сервер

tcm_log_syslog_protocol

Протокол доставки (tcp или udp)

tcm_log_syslog_output

Адрес приёмника в формате host:port (например, 127.0.0.1:514)

tcm_log_syslog_priority

Уровень важности сообщения (info, warning, error и т.д.)

tcm_log_syslog_facility

Подсистема (например, syslog, daemon, local0)

tcm_log_syslog_timeout

Время ожидания при попытке отправки записей журнала в syslog

etcd

Переменная

Назначение

etcd_dir_mode

Права доступа на директории etcd

etcd_conf_mode

Права на основной файл конфигурации etcd

etcd_ssl_file_mode

Права доступа на SSL-файлы и сертификаты etcd

logrotate

Переменная

Назначение

logrotate_dir_mode

Права доступа на директории ротации записей журнала

logrotate_file_mode

Права доступа на конфигурационные файлы ротации логов

cartridge_app_user

Владелец конфигурационных файлов ротации логов (tarantool)

cartridge_app_group

Группа владельца (tarantool)

nginx_cartridge

Переменная

Назначение

nginx_dir_mode

Права на директории nginx

nginx_file_mode

Права на конфигурационные файлы и SSL nginx

os_configure

Переменная

Назначение

systemd_dir_mode

Права доступа на каталоги с systemd-юнитами

systemd_file_mode

Права доступа на unit-файлы

nginx_dir_mode

Права доступа на директории nginx

etcd_dir_mode

Права доступа на каталоги etcd

admin_private_key_mode

Права на приватный ключ пользователя admin

ssh_config_mode

Права на sshd-конфигурацию

os_configure_dir_mode

Общие директории настройки ОС

journald_dir_mode

Каталог с логами systemd

systemd

Переменная

Назначение

systemd_dir_mode

Права доступа на systemd-каталоги

systemd_file_mode

Права доступа на unit-файлы

tcf

Переменная

Назначение

tcf_dir_mode

Права доступа на каталоги TCF

tcf_file_mode

Права доступа на конфигурационные файлы TCF

tcs

Переменная

Назначение

tcs_dir_mode

Права доступа на каталоги TCS

tcs_file_mode

Права доступа на конфигурационные файлы TCS

zabbix

Переменная

Назначение

zabbix_dir_mode

Права доступа на каталоги Zabbix

zabbix_file_mode

Права доступа на конфигурационные файлы Zabbix

Переменные для конфигурации Tarantool

Глобальные переменные (базовые)

Переменная

Назначение

Рекомендуемое значение

Где используется

tarantool_iproto_ssl_params

Дополнительные настройки iproto.listen.params документации Tarantool

{}

Только в динамическом инвентаре

Переменные конфигурации TCF

Подробное описание всех конфигурационных опций доступно в документации TCF в разделах Конфигурация репликаторов данных и HTTP API репликаторов данных.

Глобальные переменные (Gateway)

Переменная

Назначение

tcf_gateway_storage_uris

Список URI маршрутизаторов

tcf_gateway_binary

Путь до бинарного файла Gateway

tcf_gateway_config_file

Путь до конфигурационного файла Gateway

tcf_gateway_host

Адрес (ansible_host)

tcf_gateway_port

Номер порта, на котором будет работать компонент Gateway

tcf_gateway_port_metrics

Порт метрик Gateway

tcf_gateway_replica_type

Тип реплики, в качестве которой Gateway подключается к кластеру

tcf_gateway_replicaset_id

Уникальный идентификатор (UUID) для набора реплик Gateway, и он обязателен, если тип реплики – regular, а не anonymous

tcf_gateway_max_cpu

Максимальное число ядер, которые может использовать Gateway. По умолчанию Gateway использует все доступные ядра и создает один поток для каждого набора реплик

tcf_gateway_log_level

Уровень журналирования. Значение по умолчанию: warn

tcf_gateway_log_type

Формат журналирования. Значение по умолчанию: plain

tcf_gateway_log_path

Путь к каталогу с файлами записей журнала (stderr, stdout, путь к файлу). По умолчанию stderr

tcf_gateway_metrics_enabled

Включение метрик Gateway (boolean)

tcf_gateway_systemd_unit

Содержит имя systemd-юнита, через который будет запускаться Gateway на сервере

tcf_gateway_alias

Имя приложения для идентификации конкретного экземпляра Gateway. Используется для отображения метрик конкретного экземпляра в Grafana. Значение по умолчанию: gateway

Глобальные переменные (Destination)

Переменная

Назначение

tcf_gateways

Список экземпляров компонента Gateway – опция destination.gateways. Элемент списка – это {host, port}, опции ssl_cert_file, ssl_key_file, ssl_ca_file, и dial_timeout. Если список пуст, берётся одиночный узел Gateway из tcf_gateway_host/tcf_gateway_port

tcf_dial_timeout

Время ожидания для подключения к экземплярам Gateway (строка, вида 5s). Переопределяется tcf_gateways[].dial_timeout

tcf_destination_storage

Тип хранилища состояния кластеров – опция destination.storage (etcd_v2, etcd_v3, config_storage). Если тип не задан, блок storage не выводится

tcf_destination_storage_endpoints

Опции {host, port} для storage_params.endpoints

tcf_destination_storage_prefix

Префикс ключей (storage_params.prefix)

tcf_destination_storage_ttl

Время жизни записей в секундах (storage_params.ttl)

tcf_destination_routers_uris

Список URI маршрутизаторов

tcf_destination_binary

Путь до бинарного файла Destination

tcf_destination_config_file

Путь до конфигурационного файла Destination

tcf_destination_metrics_enabled

Включение метрик Destination (boolean)

tcf_destination_host

Адрес (ansible_host)

tcf_destination_port_metrics

Порт метрик Destination

tcf_destination_buffer_size

Размер внутреннего буфера на каждый набор реплик для выполнения служебных операций

tcf_destination_log_level

Уровень журналирования. Значение по умолчанию: warn

tcf_destination_log_type

Формат журналирования. Значение по умолчанию: plain

tcf_destination_log_path

Путь к каталогу с файлами записей журнала (stderr, stdout, путь к файлу). Значение по умолчанию: stderr

tcf_destination_start_retry_delay

Задержка в миллисекундах перед началом повторной попытки подключения к роутерам для получения служебной информации и формирования соединения. Значение по умолчанию: 100

tcf_destination_max_retry_delay

Максимальная задержка в миллисекундах перед началом повторной попытки подключения к роутерам для получения служебной информации и формирования соединения

tcf_destination_retry_attempts

Количество разрешенных попыток повторного подключения к роутерам. Значение по умолчанию: 10

tcf_destination_systemd_unit

Содержит имя systemd-юнита, через который будет запускаться Destination на сервере

tcf_destination_alias

Имя приложения для идентификации конкретного экземпляра Destination. Используется для отображения метрик конкретного экземпляра в Grafana. Значение по умолчанию: destination

tcf_destination_truncate_collect_timeout

Время, за которое ожидается получение на Destination операции truncate от каждого шарда исходного кластера. Значение по умолчанию: 1m

tcf_destination_truncate_buffer_size

Размер буфера для репликационных событий, полученных Destination при ожидании получения truncate от каждого шарда исходного кластера. В буфер попадают события, которые должны быть обработаны строго после truncate. Значение по умолчанию: 100000

Переменные для настройки SSL соединения с ETCD

Глобальные переменные (базовые)

Переменная

Назначение

Рекомендуемое значение

Где используется

tarantool_etcd_schema_definition

Наименование протокола для передачи данных в etcd

http

cartridge, etcd, systemd, tt

tarantool_config_etcd_ssl_key_file

Путь к ssl-ключу используемому для установки соединения с etcd

{}

etcd, systemd, tt

tarantool_config_etcd_ssl_cert_file   

Путь к ssl-сертификату используемому для установки соединения с etcd

{}

etcd, systemd, tt

tarantool_config_etcd_ssl_ca_file

Путь к ca-сертификату используемому для установки соединения с etcd

{}

etcd, systemd, tt

tarantool_config_etcd_ssl_verify_peer

Наличие проверки peer-сертификата etcd

False

systemd

tarantool_config_etcd_ssl_verify_host

Наличие проверки master-сертификата etcd

False

systemd

Переменные для настройки SSL соединения с ETCD

Глобальные переменные (базовые)

Переменная

Назначение

Рекомендуемое значение

Где используется

tarantool_etcd_schema_definition

Наименование протокола для передачи данных в etcd

http

cartridge, etcd, systemd, tt

tarantool_config_etcd_ssl_key_file

Путь к SSL-ключу, используемому для установки соединения с etcd

{}

etcd, systemd, tt

tarantool_config_etcd_ssl_cert_file   

Путь к SSL-сертификату, используемому для установки соединения с etcd

{}

etcd, systemd, tt

tarantool_config_etcd_ssl_ca_file

Путь к CA-сертификату, используемому для установки соединения с etcd

{}

etcd, systemd, tt

tarantool_config_etcd_ssl_verify_peer

Наличие проверки peer-сертификата etcd

False

systemd

tarantool_config_etcd_ssl_verify_host

Наличие проверки master-сертификата etcd

False

systemd

cartridge

Переменная

Назначение

cartridge_etcd_schema_definition

Протокол, используемый для передачи данных в etcd

cartridge_etcd_verify_host

Наличие проверки серверного сертификата etcd

etcd

Переменная

Назначение

etcd_schema_definition

Протокол используемый для передачи данных в etcd

etcd_validate_certs

Наличие проверки серверного сертификата etcd

etcd_client_cert

Путь к SSL-сертификату, используемому для установки соединения с etcd

etcd_client_key

Путь к SSL-ключу, используемому для установки соединения с etcd

etcd_ca_path

Путь к CA-сертификату, используемому для установки соединения с etcd

systemd

Переменная

Назначение

systemd_config_etcd_ssl_key_file

Путь к SSL-ключу, используемому для установки соединения с etcd

systemd_config_etcd_ssl_cert_file

Путь к SSL-сертификату, используемому для установки соединения с etcd

systemd_config_etcd_ssl_ca_file

Путь к CA-сертификату, используемому для установки соединения с etcd

systemd_etcd_schema_definition

Протокол, используемый для передачи данных в etcd

tt

Переменная

Назначение

tt_ssl_key_file_path

Путь к SSL-ключу, используемому для установки соединения с etcd

tt_ssl_cert_file_path

Путь к SSL-сертификату, используемому для установки соединения с etcd

tt_ssl_ca_file_path

Путь к CA-сертификату, используемому для установки соединения с etcd

tt_etcd_schema_definition

Протокол, используемый для передачи данных в etcd

tt_ssl_verify_host

Наличие проверки серверного сертификата etcd