Updated at 2025-10-31 03:31:03.409920
Инсталлятор Ansible Tarantool Enterprise (ATE) - это набор сценариев Ansible (playbooks) для развертывания и последующего обслуживания продуктов из линейки Tarantool Enterprise.
Инсталлятор может быть предоставлен в виде одного из двух артефактов:
Docker-образа на основе Alpine Linux 3.15 с преднастроенным окружением (ansible-tarantool-enterprise-<version>.tar.gz).
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 | 
Поддерживаются следующие ОС:
AstraLinux 1.7
Red OS 7.3
Rosa Linux 2021.1
Список ОС составлен на основе проведенных тестов.
Также возможна установка на RHEL 8, Ubuntu 22.04, Debian 12, но полноценная работоспособность не гарантируется. За дополнительной информацией по поддерживаемым ОС можете обратиться в техническую поддержку.
| Название | Сокращенное название | 
|---|---|
| Приложения на основе Tarantool Cartridge до версии Tarantool 2.11 | – | 
| – | |
| TDG | |
| TDB | |
| TCF | |
| TQE (MQ) | |
| TCS | 
| Название | Сокращенное название | 
|---|---|
| TCM | 
Сервером под инсталлятор может служить:
отдельностоящий сервер, или
один из серверов под Tarantool, или
агент CI/CD системы.
Требования к серверу под инсталлятор:
Операционная система RHEL, AstraLinux, Red OS или аналогичная с поддержкой Docker.
Доступ по 22 порту (SSH) для devops-инженера.
Сетевой доступ по 22 порту (SSH) до всех серверов, на которые производится установка. В том числе до серверов под ETCD, nginx и других сервисов.
Если предполагается использовать Docker-образ инсталлятора, установите:
Docker Engine версии не ниже 20.10.11.
Если предполагается использовать Ansible-коллекцию инсталлятора, установите:
Python 3.10.2 или новее.
Ansible 2.15.5 или новее.
pip модули urllib3==1.26, requests==2.31.0, etcd3==0.12.0.
Перед запуском сценариев развертывания подготовьте:
Инвентарь — описание топологии вашего решения и настроек приложения или продукта.
Пользователя для подключения к серверам по SSH. Может быть root. Должен иметь sudo-права на логин под локального пользователя tarantool.
Приватный SSH-ключ пользователя для подключения к серверам.
Архив с продуктом или приложением.
Пример инвентаря для кластерного приложения на основе Tarantool Cartridge
Это могут быть кластера TCS, TDG, TDB и других продуктов линейки Tarantool Enterprise.
---
tnt-cluster-1:
  children:
    ROUTERS:
      hosts:
        tdb-router-01:
        tdb-router-02:
    STORAGES:
      hosts:
        tdb-r01-s01:
        tdb-r01-s02:
        tdb-r02-s01:
        tdb-r02-s02:
    STORAGES_GROUP_1:
      hosts:
        tdb-r01-s01:
        tdb-r02-s01:
    STORAGES_GROUP_2:
      hosts:
        tdb-r01-s02:
        tdb-r02-s02:
    replicaset_vag_router_01:
      hosts:
        tdb-router-01:
      vars:
        failover_priority:
          - tdb-router-01
        replicaset_alias: vag-router-01
        roles:
          - vshard-router
          - crud-router
          - failover-coordinator
          - metrics
    replicaset_vag_router_02:
      hosts:
        tdb-router-02:
      vars:
        failover_priority:
          - tdb-router-02
        replicaset_alias: vag-router-02
        roles:
          - vshard-router
          - crud-router
          - failover-coordinator
          - metrics
    replicaset_vag_storage_01:
      hosts:
        tdb-r01-s01:
        tdb-r01-s02:
      vars:
        failover_priority:
          - tdb-r01-s02
          - tdb-r01-s01
        replicaset_alias: vag-storage-01
        roles:
          - vshard-storage
          - crud-storage
          - metrics
          - expirationd
    replicaset_vag_storage_02:
      hosts:
        tdb-r02-s01:
        tdb-r02-s02:
      vars:
        failover_priority:
          - tdb-r02-s02
          - tdb-r02-s01
        replicaset_alias: vag-storage-02
        roles:
          - vshard-storage
          - crud-storage
          - metrics
          - expirationd
    vm_1:
      hosts:
        tdb-r01-s01:
        tdb-r02-s01:
        tdb-router-01:
        tdb-router-02:
      vars:
        ansible_host: server-1.vm.test
        ansible_user: '{{ super_user }}'
    vm_2:
      hosts:
        tdb-r01-s02:
        tdb-r02-s02:
      vars:
        ansible_host: server-2.vm.test
        ansible_user: '{{ super_user }}'
  hosts:
    tdb-r01-s01:
      config:
        advertise_uri: localhost:3401
        http_port: 8080
        log: /app/logs/tdb/tdb-r01-s01.log
        vinyl_cache: 0
        vinyl_memory: 0
    tdb-r01-s02:
      config:
        advertise_uri: localhost:3410
        http_port: 8099
        log: /app/logs/tdb/tdb-r01-s02.log
        vinyl_cache: 0
        vinyl_memory: 0
    tdb-r02-s01:
      config:
        advertise_uri: localhost:3411
        http_port: 8098
        log: /app/logs/tdb/tdb-r02-s01.log
        vinyl_cache: 0
        vinyl_memory: 0
    tdb-r02-s02:
      config:
        advertise_uri: localhost:3402
        http_port: 8092
        log: /app/logs/tdb/tdb-r02-s02.log
        vinyl_cache: 0
        vinyl_memory: 0
    tdb-router-01:
      config:
        advertise_uri: localhost:3403
        http_port: 8093
        log: /app/logs/tdb/tdb-router-01.log
        vinyl_cache: 0
        vinyl_memory: 0
    tdb-router-02:
      config:
        advertise_uri: localhost:3404
        http_port: 8094
        log: /app/logs/tdb/tdb-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/tdb
    cartridge_app_name: tdb
    cartridge_keep_num_latest_dists: 10
    cartridge_cluster_cookie: molecule-testing
    cartridge_failover_params:
      etcd2_params:
        endpoints:
          - http://server-1.vm.test:2379
        lock_delay: 10
        prefix: /tdb-1
      failover_timeout: 20
      fencing_enabled: true
      fencing_pause: 2
      fencing_timeout: 10
      mode: stateful
      state_provider: etcd2
где:
{{ super_user }} – имя пользователя для подключения по SSH. Выставляется в
ansible-переменной ansible_user.
Для развертывания продуктовой линейки Tarantool необходима предварительная настройка серверов. В Ansible Tarantool Enterprise, начиная с версии 1.3.0, появились сценарии для проверки и первоначального конфигурирования.
Список дальнейших действий, которые производятся на серверах по необходимости:
Создание групп etcd и nginx.
Создание пользователей etcd, nginx.
Изменение Unix-лимитов для пользователя tarantool.
Max processes: soft - 64000, hard - 64000
Max open files: soft - 64000, hard - 64000
Max core file size: soft - unlimited, hard - unlimited
Создание директорий: /app/etcd, /app/nginx.
Настройка прав для директорий.
Настройка параметров ядра:
vm.overcommit_memory = 2
vm.overcommit_ratio = 100
kernel.core_uses_pid = 1
kernel.core_pattern = /app/tarantool/coredump/core-%e-%u-%g-%p-%t
net.ipv4.ip_local_port_range = 32768    60999
Создание каталога /var/log/journal.
Включение постоянного хранения для журнала journald путем добавления строки Storage=persistent в файл /etc/systemd/journald.conf.
Установка дополнительных пакетов: nginx, crontab, logrotate, gdb, telnet.
Включение службы systemd-logind.
Настройка loginctl для пользователя tarantool.
Добавление пользователя tarantool в группу crontab.
Установка Python-модуля PyYAML.
Используйте сценарий 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
Пример инвентаря
[tarantoolservers]
tarantool_1 ansible_host=10.0.0.1 ansible_user='{{ super_user }}'
tarantool_2 ansible_host=10.0.0.2 ansible_user='{{ super_user }}'
tarantool_3 ansible_host=10.0.0.3 ansible_user='{{ super_user }}'
Пример 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_user – root.
Важно
Для успешного выполнения сценария требуется доступ к пользователю root.
Сценарии проверки и настройки разбиты на ряд блоков. С помощью Ansible-тегов можно выбирать, какие из блоков необходимо запустить:
tarantool – задачи по настройке пользователя и директорий Tarantool.
etcd – задачи по настройке пользователя и директорий ETCD.
nginx – задачи по настройке пользователя и директорий nginx.
kernel – управление параметрами ядра.
journald – настройка журналирования системы.
os – особенности операционной системы.
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
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
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
Установите инсталлятор:
Скачайте архив с коллекцией из личного кабинета
на сайте tarantool.io или используйте архив, полученный напрямую от доверенного лица. Архив с коллекцией имеет вид
tarantool-enterprise-${VERSION}.tar.gz, где ${VERSION} – нужная версия инсталлятора ATE.
Установите коллекцию с помощью 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 выполняет следующие функции:
определяет, поддерживается ли текущая операционная система;
создает systemd unit-файлы в домашней директории пользователя tarantool.
Важно
Кроме запуска роли 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. Для этого:
Создайте unit-файлы в /etc/systemd/system.
Через extra vars передайте параметр -e tarantool_systemd_userspace_supported_os=[].
Управление сервисами будет происходить с помощью команд sudo systemctl start/stop/restart.
Эта роль нужна для работы с приложениями на Tarantool Cartridge.
Ей соответствует полностью вшитая open-source роль tarantool.cartridge.
Документация доступна на GitHub.
Особенности использования в составе коллекции:
Необходимо корректно указать путь до директории custom_steps/ в переменной cartridge_custom_steps_dir.
Переменная cartridge_scenario должна быть объявлена и иметь тип List.
Можно использовать переменную cartridge_scenario_name, чтобы указать исполняемую последовательность по умолчанию.
В таком случае указывать cartridge_scenario нужно только при желании изменить стандартное исполнение.
Есть специальный набор переменных, которые регулируют, каким образом запускаются сценарии:
tarantool_shared_become_user - выставляет значение переменной ansible_become_user. По умолчанию – tarantool.
tarantool_shared_become_method - выставляет значение переменной ansible_become_method. По умолчанию – sudo.
tarantool_shared_become - выставляет значение параметра become в сценариях. По умолчанию – true.
tarantool_shared_hosts - выставляет значение параметра hosts в сценариях. В большинстве сценариев значением по умолчанию является all. Исключением являются сценарии для TCF.
Вы можете управлять 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.
Установите инсталлятор:
Скачайте архив с инсталлятором из личного кабинета
на сайте tarantool.io или используйте архив, полученный напрямую от доверенного лица. Архив с инсталлятором имеет вид
ansible-tarantool-enterprise-${VERSION}.tar.gz, где ${VERSION} – нужная версия инсталлятора ATE.
Загрузите образ инсталлятора в Docker:
docker load -i ansible-tarantool-enterprise-${VERSION}.tar.gz
Для упрощения вызовов можно добавить образу тэг latest:
docker image tag ansible-tarantool-enterprise:${VERSION} ansible-tarantool-enterprise:latest
После этого становятся доступны следующие сценарии администрирования:
Далее по документации будут встречаться следующие переменные окружения:
SUPER_USER_NAME — имя пользователя для SSH-подключения.
PATH_TO_PRIVATE_KEY — полный путь к приватному ключу.
PATH_TO_INVENTORY — полный путь к файлу инвентаря.
PATH_TO_PACKAGE — полный путь к архиву с приложением.
PACKAGE_NAME — имя архива с приложением.
DEPLOY_TOOL_VERSION_TAG — версия инсталлятора.
LIMIT — указание для Ansible, на каких хостах или группах хостов производить действия.
Дополнительные переменные описаны в каждом пункте по мере необходимости.
Пример инвентаря для продукта Tarantool Cartridge можно найти в разделе Подготовка к использованию.
Часть переменных используется внутри контейнера во время запуска сценария.
Значения переменных передаются в контейнер с помощью опции -e.
Переменная LIMIT — обычный параметр limit для Ansible.
Указывать limit можно для любого сценария. В некоторых случаях – обязательно.
Можно использовать специальное значение лимита all, чтобы запустить сценарий на всех экземплярах Tarantool.
Добавлено в версии 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.
Добавлено в версии 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.
group – tarantool_config_group на уровне Ansible-групп.
replicaset – tarantool_config_replicaset на том же уровне Ansible-групп, где определена переменная replicaset_alias.
instance – собственные переменные у хоста.
Во время запуска Tarantool отдает приоритет уровням в указанном порядке, где самый приоритетный – уровень instance.
Переменная replicaset_alias обязательна, так как экземпляры объединяются в наборы реплик на основе её значения.
Шаблонный инвентарь для кластера Tarantool 3.x
Инвентарь представлен для топологии из 5 экземпляров Tarantool: 2 набора реплик хранилищ по 2 реплики и один роутер.
Переменная tarantool_etcd_host — FQDN или IP, доступный с серверов Tarantool, на порту 2379 которого слушает ETCD.
Эта переменная будет прописана в unit-файле systemd для подключения к ETCD если не задана tarantool_config_etcd_endpoints.
Переменная tarantool_config_etcd_endpoints - список FQDN или IP компонент etcd, доступных с серверов Tarantool.
Пример:
tarantool_config_etcd_endpoints:
  - http://etcd:2379
  - http://etcd2:2379
Значение по умолчанию:
tarantool_config_etcd_endpoints:
  - http://{{ tarantool_etcd_host }}:{{ tarantool_etcd_port }}
Переменная tarantool_3_0_version_support в значении true для включения режима работы с Tarantool 3.x.
cartridge_app_name используется для запроса конфигурации из ETCD по пути /tarantool/{{ cartridge_app_name }}/config/all.
---
tarantool:
  children:
    ROUTERS:
      children:
        router:
      vars:
        tarantool_config_group:
          app:
            module: app.router
          sharding:
            roles: [router]
    STORAGES:
      children:
        storage-1:
        storage-2:
      vars:
        # Переопределяются секции на уровне 'group'
        tarantool_config_group:
          app:
            module: app.storage
          sharding:
            roles: [storage]
          memtx:
            memory: 1000241024
    storage-1:
      hosts:
        app-r01-s01:
        app-r01-s02:
      vars:
        replicaset_alias: storage-1
        tarantool_config_replicaset:
          memtx:
            memory: 1100241024
    storage-2:
      hosts:
        app-r02-s01:
        app-r02-s02:
      vars:
        replicaset_alias: storage-2
    router:
      hosts:
        app-router-01:
      vars:
        replicaset_alias: router-1
    vm_1:
      hosts:
        app-r01-s01:
          # Переопределяются секции на уровне 'instance'
          iproto:
            listen:
              - uri: 127.0.0.1:3310
        app-r02-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3311
        app-router-01:
          iproto:
            listen:
              - uri: 127.0.0.1:3312
        app-r01-s02:
        app-r02-s02:
      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: app
    tarantool_etcd_host: etcd
    tarantool_3_0_version_support: true
    # Переопределяются секции на уровне 'global'
    # Перепишет дефолтную секцию credentials
    tarantool_config_global:
      credentials:
        users:
          replicator:
            password: 'i-changed-a-password-here'
            roles: ['replication']
          storage:
            password: 'do-not-repeat'
            roles: ['sharding']
          admin-tcm:
            password: 'you-know-who'
            roles: ['super']
Значения параметров конфигурации Tarantool 3.x по умолчанию
credentials:
  users:
    replicator:
      password: 'secret-password'
      roles: ['replication']
    storage:
      password: storage
      roles: ['sharding']
iproto:
  listen:
    - uri: 'unix/:{{ cartridge_run_dir }}/{% raw %}{{ instance_name }}{% endraw %}.iproto'
  advertise:
    peer:
      login: replicator
    sharding:
      login: storage
console:
  enabled: true
  socket: '{{ cartridge_run_dir }}/{% raw %}{{ instance_name }}{% endraw %}.control'
process:
  pid_file: '{{ cartridge_run_dir }}/{% raw %}{{ instance_name }}{% endraw %}.pid'
  work_dir: '{{ cartridge_app_instances_dir }}/{{ cartridge_app_name }}.{% raw %}{{ instance_name }}{% endraw %}'
wal:
  dir: '{{ cartridge_data_dir }}/{% raw %}{{ instance_name }}{% endraw %}/'
vinyl:
  dir: '{{ cartridge_data_dir }}/{% raw %}{{ instance_name }}{% endraw %}/'
snapshot:
  dir: '{{ cartridge_memtx_dir_parent }}/{% raw %}{{ instance_name }}{% endraw %}/'
log:
  to: file
  file: '{{ cartridge_log_dir_parent }}/{% raw %}{{ instance_name }}{% endraw %}.log'
sharding:
  bucket_count: 30000
replication:
  failover: manual
metrics:
  include: [all]
  labels:
    alias: "{% raw %}{{ instance_name }}{% endraw %}"
security:
  disable_guest: true
В конечном YAML-файле с конфигурацией к каждой из секций по умолчанию будет добавлено сообщение:
# This section is from default Tarantool config in Ansible Tarantool Enterprise.
# To change it: define section '{{ section_name }}' in variable 'tarantool_config'.
Добавлено в версии 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
Добавлено в версии 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.
В этом сценарии с минимальным временем простоя выполняется последовательное (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_failover_status_timeout (integer) — время ожидания в секундах выполнения команды failover switch.
tt_failover_status_retries (integer) — количество ретраев для запроса статуса выполнения команды failover switch.
tt_failover_status_delay (integer) — время ожидания в секундах выполнения команды failover status.
promote_timeout (integer) — время ожидания в секундах выполнения promote на инстансе.
Примечание
Данный сценарий нельзя выполнять с лимитами.
Если для scheduler в inventory-файле указан replicaset_alias, то необходимо указать переменную schedulers_name_list.
Сценарий можно применять только на кластерах с восстановлением после отказа (failover), включенным в режиме supervised или election.
Подробнее про эти режимы можно прочитать в документации Tarantool.
Сбор информации о кластере и проверка его работоспособности:
определение порядка обновления экземпляров хранилища (storage);
проверка режима работы восстановления после отказа;
определение списка мастер-узлов, экземпляров хранилища и stateless-экземпляров.
проверка работоспособности всех узлов кластера Tarantool перед обновлением;
Переключение мастер-узла:
передача роли мастера списку выбранных хостов под названием replicaset_masters_list;
проверка здоровья кластера после передачи роли мастера.
Обновление реплик:
параллельное обновление списка реплик replicaset_upgrade_targets с шагом update_batch_size;
проверка здоровья кластера после обновления.
Переключение мастера и обновление хостов предыдущих мастер-узлов.
На этом этапе происходит передача роли мастера списку хостов new_masters_list, чтобы обновить хосты мастер-узлов в списке replicaset_masters_list.
Параллельное обновление stateless-сервисов кроме роутеров с шагом update_batch_size.
Обновление схемы данных:
обновление схемы данных на replicaset_masters_list и routers_list;
проверка здоровья кластера после обновления.
Обновление списка scheduler-хостов.
Финальная проверка здоровья кластера после обновления. На этом этапе идет проверка здоровья всех экземпляров Tarantool.
Добавлено в версии 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
Добавлено в версии 1.4.0.
Настройка failover с внешним координатором потребует изменений в инвентаре.
Установите параметр replication.failover в значение supervised на одном из
уровней конфигурации: tarantool_config_replicaset, tarantool_config_group, tarantool_config_global.
tarantool_config_replicaset:
  replication:
    failover: supervised
Добавьте новые экземпляры и укажите для них переменную tarantool_coordinator: true.
Добавьте пользователю с ролью 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.
Подробности можно найти в документации.
Полный пример инвентаря с включенным supervised failover
---
tarantool:
  children:
    ROUTERS:
      children:
        router:
      vars:
        tarantool_config_group:
          app:
            module: app.router
          sharding:
            roles: [router]
    STORAGES:
      children:
        storage-1:
        storage-2:
      vars:
        # Переопределяются секции на уровне 'group'
        tarantool_config_group:
          app:
            module: app.storage
          sharding:
            roles: [storage]
          memtx:
            memory: 1000241024
    coordinators:
      hosts:
        coordinator-1:
        coordinator-2:
      vars:
        replicaset_alias: coordinators
    storage-1:
      hosts:
        app-r01-s01:
        app-r01-s02:
      vars:
        replicaset_alias: storage-1
        tarantool_config_replicaset:
          memtx:
            memory: 1100241024
    storage-2:
      hosts:
        app-r02-s01:
        app-r02-s02:
      vars:
        replicaset_alias: storage-2
    router:
      hosts:
        app-router-01:
      vars:
        replicaset_alias: router-1
    vm_1:
      hosts:
        app-r01-s01:
          # Переопределяются секции на уровне 'instance'
          iproto:
            listen:
              - uri: 127.0.0.1:3310
        app-r02-s01:
          iproto:
            listen:
              - uri: 127.0.0.1:3311
        app-router-01:
          iproto:
            listen:
              - uri: 127.0.0.1:3312
        app-r01-s02:
        app-r02-s02:
        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: app
    tarantool_etcd_host: etcd
    tarantool_3_0_version_support: true
    # Переопределяются секции на уровне 'global'
    # Перепишет дефолтную секцию credentials
    tarantool_config_global:
      credentials:
        users:
          replicator:
            password: 'i-changed-a-password-here'
            roles: ['replication']
            privileges:
              - permissions: [execute]
                lua_call: [failover.execute]
          storage:
            password: 'do-not-repeat'
            roles: ['sharding']
          admin-tcm:
            password: 'you-know-who'
            roles: ['super']
Добавлено в версии 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 (например, TDG, TDB 1.x и т.д.). Смотрите также: Примеры инвентарей 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 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 подразумевает наличие двух дата-центров: Активного и Резервного. Каждый набор реплик хранилища имеет одну или несколько реплик в обоих дата-центрах.
Во время данного сценария не все экземпляры 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) — время ожидания между проверками консистентности кластера.
Сценарий доставки новой версии продукта без перезапуска экземпляров.
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 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
Важно
Сценарий можно применять только на подготовленных Enterprise-приложениях Tarantool Cartridge, построенных по принципу hot-reload.
Сценарий используется для обновления поставки приложения и последующей перезагрузки ролей Tarantool Cartridge для обновления без перезапуска.
Предусмотрено два вида данного сценария:
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
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) — время ожидания между проверками консистентности кластера.
Смотрите также: Примеры инвентарей TCM.
Добавлено в версии 1.1.0.
Сценарий предназначен для развертывания, настройки и запуска продукта Tarantool Cluster Manager.
Пример инвентаря для продукта TCM
clusters-manager:
  hosts:
    tcm:
      tcm_host: 0.0.0.0
      tcm_port: 8080
      tcm_etcd_host: etcd
      tcm_etcd_port: 2379
  vars:
    ansible_host: 10.0.0.1
    ansible_user: '{{ super_user }}'
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
    tcm_features:
      tcf: true
tcm_host - адрес, на котором будет запущен web-интерфейс TCM.
tcm_port - порт, на котором будет запущен web-интерфейс TCM.
tcm_etcd_host - адрес, по которому доступен кластер ETCD. Используется TCM для хранения собственной конфигурации.
tcm_etcd_port - порт, на котором слушает экземпляр ETCD.
tcm_features — словарь флагов для активации различных дополнительных опций TCM. Ключами являются названия опций, значениями — true или false.
Tarantool Clusters Manager поддерживает работу с ETCD по SSL.
tcm_etcd_tls_skip_verify - переменная отвечающая за проверку клиентского сертификата в etcd соединении.
tcm_etcd_tls_skip_san_verify - переменная отвечающая за верификацию SAN на стороне клиента.
tcm_etcd_tls_enabled - переменная отвечающая за включение опций TLS для TCM.
tcm_etcd_tls_ca_file - путь к доверенному ca-сертификату.
tcm_etcd_tls_key_file - путь к клиентскому ssl-ключу.
tcm_etcd_tls_cert_file - путь к клиентскому ssl-сертификату.
Tarantool Clusters Manager поддерживает работу с ETCD при включенном basic auth.
tcm_etcd_username - имя пользователя для логина в etcd.
tcm_etcd_password - пароль пользователя для логина в etcd.
Tarantool Clusters Manager поддерживает указание нескольких серверов ETCD для отказоустойчивости.
tcm_config_etcd_endpoints - список FQDN или IP компонент etcd, доступных с серверов TCM.
Пример:
tcm_config_etcd_endpoints:
  - http://etcd:2379
  - http://etcd2:2379
Значение по умолчанию составляется из указанных tcm_etcd_host, tcm_etcd_port или
общей переменной tarantool_config_etcd_endpoints.
tcm_config_etcd_endpoints: "{{ tarantool_config_etcd_endpoints | default(['http://' + tcm_etcd_host + ':' + tcm_etcd_port]) }}"
Команда для запуска сценария с помощью 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
Добавлено в версии 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
Для развертывания, обновления и администрирования TDG используются сценарии из разделов Tarantool Cartridge и Общие сценарии администрирования. Смотрите также: Примеры инвентарей TDG.
В продукте 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
Добавлено в версии 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 используются следующие сценарии:
TDB 1.x: сценарии из разделов Tarantool Cartridge, Tarantool DB 1.x: Запуск модуля миграций, Tarantool DB 1.x: Загрузка кода миграций через конфигурацию и Общие сценарии администрирования. Для загрузки и применения миграций в TDB 1.x используются сценарии Tarantool DB 1.x: Запуск модуля миграций и Tarantool DB 1.x: Загрузка кода миграций через конфигурацию;
TDB 2.x: сценарии из разделов Tarantool 3.x и Общие сценарии администрирования. Для публикации и применения миграций в TDB 2.x используется сценарий Применение миграций с помощью tt CLI.
Смотрите также: Примеры инвентарей TDB.
Сценарий предназначен исключительно для продукта 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. Сценарий загружает код миграций на 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 используются следующие сценарии:
TQE версии 1.10 и выше - Tarantool Queue Enterprise (MQ): Установка кластерного приложения Tarantool 3.x с модулем API;
TQE ниже версии 1.10 - Tarantool Queue Enterprise (MQ): Установка кластерного приложения Tarantool Cartridge и Tarantool Queue Enterprise (MQ): Установка модуля API для Tarantool Cartridge.
Для обновления и администрирования TQE используются следующие сценарии:
TQE версии 1.10 и выше - сценарии из разделов Tarantool 3.x и Общие сценарии администрирования;
TQE ниже версии 1.10 - сценарии из разделов Tarantool Cartridge и Общие сценарии администрирования.
Смотрите также: Примеры инвентарей TQE.
Добавлено в версии 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
Пример инвентаря для продукта TQE на Tarantool 3.x
---
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_global:
          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]
          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: "{{ tarantool_ansible_host }}"
        ansible_port: 2201
        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:
          tarantool_grpc: true
          state: started
          config:
            advertise_uri: localhost:3305
            app_name: 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
Добавлено в версии 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
Пример инвентаря для продукта TQE
all:
  children:
    tnt-bus-cluster:
      vars:
        cartridge_app_config:
          # Логин/пароль для подключения к Tarantool
          creds:
            body:
              user: user
              pass: pass
          # Список очередей, которые будут доступны
          queues:
            body:
              - output
              - input
        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
        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
      hosts:
        my-app-core-01:
          ansible_host: 'server.example.com'
          ansible_user: '{{ super_user }}'
        my-app-api-01:
          ansible_host: 'server.example.com'
          ansible_user: '{{ super_user }}'
    replicaset-my-app-core:
      hosts:
        my-app-core-01:
      vars:
        failover_priority:
          - my-app-core-01
        replicaset_alias: my-app-core
        # Роли, которые нужно назначить набору реплик
        # Не изменять
        roles:
          - app.roles.queue
          - app.roles.api
  hosts:
    my-app-core-01:
      config:
        advertise_uri: localhost:3305
        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:
                connections:
                  storage:
                    - localhost:3305
              input:
                connections:
                  routers:
                    - localhost:3305
        # Конфигурация подключения к Tarantool
        consumer:
          enabled: true
          polling_timeout: 500ms
          tarantool:
            user: user
            pass: pass
            queues:
              output:
                connections:
                  storage:
                    - localhost:3305
              input:
                connections:
                  routers:
                    - localhost:3305
Добавлено в версии 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
Смотрите также: Примеры инвентарей TCF.
Изменено в версии 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.
Порядок действий:
Установите 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.
После установки 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 не задана.
Старый режим
если не указана секция конфигурации publisher.queues.*.connections, ATE автоматически заполнит её, используя адреса указанных в инвентаре роутеров;
если не указана секция конфигурации consumer.queues.*.connections, ATE автоматически заполнит её, используя адреса указанных в инвентаре узлов типа storage;
cовместимость с параметрами grpc_host и grpc_port обеспечивается автоматически.
Новый режим
если не указана секция конфигурации producer.tarantool.connections, ATE автоматически заполнит её адресами роутеров (routers);
если не указана секция конфигурации consumer.tarantool.connections, ATE автоматически заполнит её адресами узлов типа storage;
cекции producer.queues.* и consumer.queues.* наследуют базовые connections, если собственные подключения не заданы;
автоматически добавляются значения по умолчанию для параметров grpc_options и log.level.
Изменено в версии 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 соответственно и используются во всех сценариях.
Пример инвентаря для продукта TCF
tcf:
  vars:
    tcf_user: replicator                # пользователь для подключения к кластерам
    tcf_user_password: secret-password  # пароль пользователя
    tarantool_configure_logrotate: true # значение по умолчанию -- true
    # tcf_ssl_cert_file: /path/to/server.crt
    # tcf_ssl_key_file: /path/to/server.key
    # tcf_ssl_ca_file: /path/to/ca.crt
    # tcf_dial_timeout: 3
    # 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"
  children:
    vm-1:
      vars:
        ansible_host: vm-1.test.env
        ansible_user: '{{ super_user }}'
      hosts:
        tcf-host-1:
        tcf-host-3:
    vm-2:
      vars:
        ansible_host: vm-2.test.env
        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: # Destination для синхронизации B -> A
      tcf_destination_host: vm-1.test.env
      tcf_gateways:
        - host: vm-2.test.env    # адрес Gateway B для подключения
          port: 8080             # порт Gateway B
          # ssl_cert_file: {{ tcf_ssl_cert_file }}
          # ssl_key_file: {{ tcf_ssl_key_file }}
          # ssl_ca_file:  {{ tcf_ssl_ca_file }}
      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_destination_port_metrics: 8001
      tcf_destination_router_uris:       # список роутеров кластера A для отправки изменений
        - vm-1.test.env:3309
    tcf-host-2: # Destination для синхронизации A -> B
      tcf_destination_host: vm-2.test.env
      tcf_gateways:
        - host: vm-1.test.env    # адрес Gateway A для подключения
          port: 8080             # порт Gateway A
          # ssl_cert_file: {{ tcf_ssl_cert_file }}
          # ssl_key_file: {{ tcf_ssl_key_file }}
          # ssl_ca_file:  {{ tcf_ssl_ca_file }}
      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_destination_port_metrics: 8001
      tcf_destination_router_uris:       # список роутеров кластера B для отправки изменений
        - vm-2.test.env:3309
    tcf-host-3: # Gateway для синхронизации A -> B
      tcf_gateway_host: vm-1.test.env
      tcf_gateway_port: 8080
      tcf_gateway_port_metrics: 8000
      tcf_gateway_storage_uris:        # список хранилищ кластера A для получения изменений
        - vm-1.test.env:3301
        - vm-1.test.env:3302
        - vm-1.test.env:3303
        - vm-1.test.env:3304
    tcf-host-4: # Gateway для синхронизации B -> A
      tcf_gateway_host: vm-2.test.env
      tcf_gateway_port: 8080
      tcf_gateway_port_metrics: 8000
      tcf_gateway_storage_uris:       # список хранилищ кластера B для получения изменений
        - vm-2.test.env:3301
        - vm-2.test.env:3302
        - vm-2.test.env:3303
        - vm-2.test.env:3304
Для настройки безопасного соединения на протоколах 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"
Добавлено в версии 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
Добавлено в версии 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.
Добавлено в версии 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: Установка приложения. Для обновления и администрирования TCS используются сценарии из разделов Tarantool 3.x и Общие сценарии администрирования.
Смотрите также: Примеры инвентарей TCS.
Добавлено в версии 1.2.0.
Изменено в версии 1.4.1: Сценарий установки работает для версии TCS на Tarantool 3.x.
Продукт TCS состоит из кластера Tarantool 3.x и API-сервиса под названием Scheduler. Каждый компонент развертывается отдельно.
Порядок действий:
Установите кластерное хранилище.
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.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"
Добавлено в версии 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 не гарантируется.
Пример инвентаря для развертывания продукта TCS
Конфигурация модуля колоночного хранилища размещена в конце примера,
в переменной по пути tarantool_config_group.roles_cfg.app/aggregator_role.tcs.
---
all:
  vars:
    ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
      -o StrictHostKeyChecking=no
    cartridge_app_name: tcs-app
    tarantool_etcd_host: "192.168.1.10"
    tarantool_3_0_version_support: true
    cartridge_systemd_dir: "{{ tarantool_systemd_userspace_dir }}"
    tarantool_config_global:
      credentials:
        users:
          replicator:
            password: 'secret'
            roles: [replication]
            privileges:
              - permissions: [execute]
                functions: [failover.execute]
          client:
            password: 'secret'
            roles: [super]
      memtx:
        memory: 1073741824 # 1G
      iproto:
        advertise:
          peer:
            login: 'replicator'
      groups:
        tcs_storages:
          replicasets:
            tcs_storages_r01:
              leader: tarantool-instance-01
  children:
    storage_1:
      hosts:
        tarantool-instance-01:
        tarantool-instance-02:
      vars:
        replicaset_alias: tcs_storages_r01
        tarantool_group_name: tcs_storages
        tarantool_config_replicaset:
          replication:
            failover: manual
    tcs_storage_1:
      hosts:
        tarantool-instance-01:
          iproto:
            listen:
              - uri: "192.168.1.10:3311"
            advertise:
              client: "192.168.1.10:3311"
          labels:
            server: "192.168.1.10"
          roles_cfg:
            tcs:
              aggregator:
                http_listen: "192.168.1.10:7777"
                http_listen_streaming: "0.0.0.0:9777"
                runtimes:
                  acceptor:
                    name: acceptor
                    thread_count: 1
                  requests:
                    default:
                      name: requests-default
                      thread_count: 1
                    additional:
                      - name: analytics
                        thread_count: 1
                        priority: 0
                  internal:
                    name: internal
                    thread_count: 1
                  streaming:
                    name: streaming
                    thread_count: 1
            roles.metrics-export:
              http:
                - listen: 8681
                  endpoints:
                    - path: /metrics
                      format: prometheus
      vars:
        ansible_host: "192.168.1.10"
        ansible_port: 22
        ansible_user: "{{ super_user }}"
    tcs_storage_2:
      hosts:
        tarantool-instance-02:
          iproto:
            listen:
              - uri: "192.168.1.10:3312"
            advertise:
              client: "192.168.1.10:3312"
          labels:
            server: "192.168.1.10"
          roles_cfg:
            tcs:
              aggregator:
                http_listen: "192.168.1.10:7778"
                http_listen_streaming: "0.0.0.0:9778"
                runtimes:
                  acceptor:
                    name: acceptor
                    thread_count: 1
                  requests:
                    default:
                      name: requests-default
                      thread_count: 1
                    additional:
                      - name: analytics
                        thread_count: 1
                        priority: 0
                  internal:
                    name: internal
                    thread_count: 1
                  streaming:
                    name: streaming
                    thread_count: 1
            roles.metrics-export:
              http:
                - listen: 8682
                  endpoints:
                    - path: /metrics
                      format: prometheus
      vars:
        ansible_host: "192.168.1.10"
        ansible_port: 22
        ansible_user: "{{ super_user }}"
    tcs_scheduler_1:
      hosts:
        tcs-scheduler-01:
          http_listen: '192.168.1.10:8777'
      vars:
        tcs_scheduler_metrics_enabled: true
        tcs_scheduler_features: ["experimental_api"]
        tcs_extra_env:
          TOKIO_WORKER_THREADS: 1
        tcs_storage_group_name: tcs_storages
        tcs_storage_replicaset_name: tcs_storages_r01
        ansible_host: '192.168.1.10'
        ansible_port: 22
        ansible_user: '{{ super_user }}'
    clusters_manager:
      hosts:
        tcm:
          tcm_host: 0.0.0.0
          tcm_port: 9100
          tcm_etcd_host: "192.168.1.10"
          tcm_bootstrap_password: secret
          tcm_cluster_tt_command: /app/tarantool/cluster-manager/tt-dist/tt
      vars:
        ansible_host: "192.168.1.10"
        ansible_user: '{{ super_user }}'
        ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
          -o StrictHostKeyChecking=no
    tcs_storages_r01:
      children:
        storage_1:
      vars:
        tarantool_config_group:
          roles: [app/aggregator_role, app/etcd_stateboard_client, roles.metrics-export]
          roles_cfg:
            app/aggregator_role:
              tcs:
                default_column_values_limit: 20000
                block_size: 8192
                schema:
                  tcs:
                    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 необходимо указать переменную 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
Добавлено в версии 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.
Порядок резервирования произвольный.
PATH_TO_BACKUP_DIRECTORY — путь к директории на удаленном сервере, в которой будут собраны резервные копии.
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
Обязательные переменные:
tarantool_remote_backups_dir (string) — путь к директории на удаленном сервере, в которой будут собраны резервные копии.
Дополнительные переменные:
tarantool_ansible_serial_executors (number) — количество одновременных процессов резервирования.
1 ← (default)
tarantool_fetch_backups (boolean) — флаг для копирования архивов резервных копий с удаленного сервера на локальный.
true
false ← (default)
tarantool_fetch_backups_dir (string) — директория для сбора архивов резервных копий на локальном сервере.
/tmp ← (default)
tarantool_backup_wait_snapshot_timeout (number) - полное время ожидания (в секундах) создания snapshot, если он уже создавался на момент старта резервирования.
1000 ← (default)
tarantool_backup_wait_snapshot_delay (number) - интервал (в секундах) между проверками создания snapshot.
5 ← (default)
Изменено в версии 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
Обязательные переменные:
tarantool_remote_backups_dir (string) — путь к директории на удаленном сервере, в которой расположены архивы с резервными копиями.
Дополнительные переменные:
tarantool_force_restore (boolean) — указание, что необходимо восстановить не только файлы экземпляра(ов), но и общие. Например, конфигурационный файл кластера.
true
false ← (default)
tarantool_allow_alien_backup (boolean) — флаг для отключения проверки принадлежности резервной копии соответствующему экземпляру. Данный флаг необходим только в случае восстановления из резервной копии после создания чистого кластера с нуля.
true
false ← (default)
tarantool_skip_cleanup_on_restore (boolean) — флаг для отключения очистки файлов экземпляра(ов), которые восстанавливаются из резервной копии.
true
false ← (default)
backup_time (string) — время, к которому должен быть выбран ближайший бэкап для восстановления. Формат времени: YYYY-MM-DD-HHMMSS (например, 2024-08-15-140000).
backup_time = null (default) — используется самый свежий бэкап из директории tarantool_remote_backups_dir.
backup_time != null — сценарий восстанавливает состояние экземпляра из резервной копии, которая была создана максимально близко к заданному времени backup_time.
Сценарий используется для перевода экземпляра(ов) кластера в режим резервирования. На сервере инсталлятора создаются текстовые файлы по каждому физическому серверу. Файлы содержат список путей, необходимых для создания резервной копии конкретного сервера.
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}
Дополнительные переменные:
promote_timeout (integer) — время ожидания в секундах выполнения promote на инстансе. Например: '{"promote_timeout": 30}'.
Сценарий запрашивает произвольный экземпляр кластера о наличии 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
Регулируйте поведение с помощью следующих переменных:
wait_members_alive_retries (number) — количество проверок доступности экземпляров (по умолчанию: 10).
wait_members_alive_delay (number) — таймаут между проверками доступности экземпляров (по умолчанию: 5).
wait_cluster_has_no_issues_retries (number) — количество проверок консистентности кластера (по умолчанию: 10).
wait_cluster_has_no_issues_delay (number) — таймаут между проверками консистентности кластера (по умолчанию: 5).
allow_warning_issues (boolean) - разрешает иметь warning issues в кластере (по умолчанию: false).
allow_critical_issues (boolean) - разрешает иметь как warning, так и critical issues.
Полностью игнорирует ошибки в кластере (по умолчанию: false).
show_issues (boolean) - печатает в консоль ошибки (по умолчанию: false).
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_CARTRIDGE_CLUSTER_COOKIE=${NEW_CARTRIDGE_CLUSTER_COOKIE} \
  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_cartridge_cluster_cookie":"'${NEW_CARTRIDGE_CLUSTER_COOKIE}'"
  }' \
  playbooks/change_cookie.yml
Обязательные переменные:
new_cartridge_cluster_cookie (string) — новый секретный пароль кластера.
Сценарий используется для игнорирования ошибок при восстановлении из 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}
Сценарий 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
Переменные:
tarantool_shared_hosts (string или list) — список хостов или одиночное имя хоста, на которых будет выполняться сценарий.
tarantool_snapshot (boolean) — выполнять box.snapshot() после запуска инстанса с TT_FORCE_RECOVERY=true. Если включено, инстанс будет перезапущен в обычном режиме после создания snapshot.
Значения:
true — создать snapshot и выполнить перезапуск
false — не выполнять snapshot (по умолчанию)
Изменено в версии 1.10.2: Сценарий работает с продуктами на основе Tarantool 3.
Примечание
Параметр –limit обязателен.
Сценарий используется для пересоздания экземпляра из мастера продуктов на основе 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) — время ожидания (в секундах) между проверками доступности экземпляра.
Вариант запуска в случае использования 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}
Сценарий используется только при аварийно-восстановительных работах, для целей тестирования и при разработке. Позволяет менять только динамические настройки: 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}
Обязательные переменные:
cluster_new_settings (string) — перечень изменяемых настроек в строковом формате JSON. Например: '{"memtx_memory":123456789}'.
Добавлено в версии 1.4.0.
Сценарий включает два варианта исключения экземпляров из кластера Tarantool:
Исключение одного или нескольких экземпляров.
Исключение целого набора реплик.
Запуск сценария в 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.
Добавлено в версии 1.3.0.
Сценарий предназначен для управления пользователями в Tarantool. Поддерживает три основные функции:
Создание пользователей.
Удаление пользователей.
Назначение пользователям прав доступа к объектам.
Для управления сценарием используется переменная tarantool_users.
Переменная tarantool_users содержит список пользователей Tarantool, каждый из которых может иметь следующие поля:
name – имя пользователя.
state – состояние пользователя: присутствует (present) или отсутствует (absent). По умолчанию: present.
password (опционально) – пароль пользователя. Если не указать, то пользователь будет создан без пароля.
grant (опционально) – привилегии пользователя на определенные объекты (см. документацию по Tarantool):
permissions – права, которые назначаются пользователю (см. документацию по Tarantool).
object_type – тип объекта, для которого выдаются права доступа (см. документацию по Tarantool).
object_name – имя объекта, для которого выдаются права доступа.
Задать переменную можно следующим образом:
В инвентаре:
Укажите tarantool_users или  tarantool_users_file_path непосредственно в вашем инвентаре.
В --extra-vars:
При запуске сценария передайте переменную tarantool_users с помощью extra vars.
В файле (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
PATH_TO_TARANTOOL_USERS — путь к файлу с пользователями, в котором
содержится переменная tarantool_users.
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"
    }' \
    playbooks/manage_tarantool_users.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.
Зашифруйте файл:
ansible-vault encrypt ${PATH_TO_TARANTOOL_USERS}
Отредактируйте файл:
ansible-vault edit ${PATH_TO_TARANTOOL_USERS}
Запустите сценарий с зашифрованным файлом:
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 (задаются через 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
Обязательные переменные:
new_users_credentials (string) — JSON с новыми паролями пользователей.
Например: '{"username":"new-secret"}'.
Добавлено в версии 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
Обязательные переменные:
tarantool_collected_logs_local_path (string) — Путь на локальной машине, где будут сохранены собранные логи. Например: '/path/to/local/logs'.
Описание сценария:
Создание директории для логов на локальной машине:
Проверяет наличие указанной директории на локальной машине и создает её, если она отсутствует.
Путь к директории указывается в переменной tarantool_collected_logs_local_path.
Сбор логов экземпляров на локальный хост:
Сохраняет логи экземпляров с удаленных хостов в указанную директорию на локальной машине.
Логи собираются из путей, указанных в переменных продукта и сохраняются в директорию tarantool_collected_logs_local_path.
Добавлено в версии 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
Обязательные переменные:
tarantool_migrations_directory (string): Путь на локальной машине к директории с миграциями, которые будут опубликованы и применены на удаленных хостах.
Переменные для управления:
tt_connect_username (string): Имя пользователя для подключения к Tarantool при tt migrations apply. По умолчанию: client.
tt_connect_password (string): Пароль для подключения к Tarantool при tt migrations apply. По умолчанию: secret.
tarantool_config_storage_username (string): Имя для подключения к Tarantool Config Storage. По умолчанию: "".
tarantool_config_storage_password (string): Пароль для подключения к Tarantool Config Storage. По умолчанию: "".
tt_etcd_host (string): Хост etcd для подключения. По умолчанию: "{{ tarantool_etcd_host | default('etcd') }}".
tt_etcd_port (string): Порт etcd для подключения. По умолчанию: "{{ tarantool_etcd_port | default('2379') }}".
tt_etcd_prefix (string): Путь префикса в etcd, который указывает расположение конфигурации кластера. По умолчанию: "{{ tarantool_etcd_prefix }}".
tt_bin_path (string): Путь к исполняемому файлу tt на удаленном хосте. По умолчанию: "{{ cartridge_app_instances_dir }}/{{ cartridge_app_name }}.{{ inventory_hostname }}".
tt_etcd_username (string): Имя пользователя для логина в etcd.
tt_etcd_password (string): Пароль пользователя для логина в etcd.
tarantool_config_etcd_ssl_key_file (string) — путь к клиентскому ssl-ключу. Так же для роли tt этот путь можно задать через переменную tt_ssl_key_file_path. Например: '{"tt_ssl_key_file_path": "/certs/client.key"}'.
tarantool_config_etcd_ssl_cert_file (string) — путь к клиентскому ssl-сертификату. Так же для роли tt этот путь можно задать через переменную tt_ssl_cert_file_path. Например: '{"tt_ssl_cert_file_path": "/certs/client.crt"}'.
tarantool_config_etcd_ssl_ca_file (string) — путь к доверенному ca-сертификату. Так же для роли tt этот путь можно задать через переменную tt_ssl_ca_file_path. Например: '{"tt_ssl_ca_file_path": "/certs/rootCA.crt"}'.
tarantool_config_etcd_ssl_verify_host (string) — Наличие проверки серверного сертификата etcd. Например: '{"tarantool_config_etcd_ssl_verify_host": "False"}'.
Описание сценария:
Подготовка миграций:
Удаляет предыдущие миграции на удаленном хосте.
Копирует файлы миграций из директории, указанной в tarantool_migrations_directory, в целевую директорию("/tmp/tarantool.enterprise.migrations/scenario) на удаленном хосте.
Публикация миграций:
Выполняет команду tt migrations publish для публикации миграций на удаленном хосте.
Применение миграций:
Выполняет команду tt migrations apply для применения опубликованных миграций на удаленном хосте, используя учетные данные и параметры подключения.
Примечание
В параметре 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.
Настройка VShard:
Плейбук запускает команду tt replicaset vshard bootstrap.
Добавлено в версии 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
Подтверждение удаления кластера:
Задача выводит запрос для подтверждения операции, информируя о том, что будут удалены все данные. Принимает ввод yes или no для продолжения или отмены операции.
Удаление компонентов Tarantool:
Импортирует роль tarantool.enterprise.uninstall, которая удаляет все компоненты Tarantool на удаленных хостах. Для кластера Tarantool 3.x следует указать tarantool_3_0_version_support: true.
Остановка и отключение служб systemd:
Останавливает и отключает все службы systemd Tarantool через роль tarantool.enterprise.systemd, чтобы гарантировать полное удаление экземпляров.
Удаление директорий кластера:
Удаляет все директории, связанные с Tarantool.
Удаление конфигурации логротации:
Выполняет импорт роли tarantool.enterprise.logrotate, которая удаляет конфигурации ротации логов, если tarantool_configure_logrotate установлено в true.
Удаляет файл конфигурации logrotate для каждого хоста, расположенный в logrotate_instance_config_dir с именем файла {{ inventory_hostname }}.conf.
Добавлено в версии 1.8.0.
Для гибкого управления удалением добавлена поддержка тегов. Теги позволяют удалять только определенные компоненты кластера Если запускать сценарий без указания тегов, он удалит только экземпляры Tarantool, не затрагивая Cluster Manager (TCM) или Scheduler (TCS). Используйте теги, чтобы управлять удалением других компонентов:
tarantool
Удаляет только экземпляры Tarantool и GRPC сервисы.
Используйте этот тег для удаления приложений Tarantool.
tcm
Удаляет Cluster Manager (TCM).
Используется для удаления менеджера кластера.
tcs
Удаляет Scheduler (TCS).
Применяется для удаления компонентов TCS.
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
Этот сценарий используется для доставки пользовательских файлов на хосты, а также удаления этих файлов. Примеры файлов:
контекстный файл конфигурации;
TLS-сертификат;
токен аутентификации keycloack для Tarantool Clusters Federation.
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
Обязательные переменные:
tarantool_context_src_path (string) – путь к файлу на локальной машине, который будет загружен
на виртуальные машины с кластером Tarantool. Директория, в которую нужно скопировать файлы, должна существовать.
Опциональные переменные:
tarantool_context_dst_path (string) – путь на виртуальной машине, по которому будет размещён пользовательский файл.
Значение по умолчанию: cartridge_data_dir (/app/tarantool/${cartridge_app_name}/workdir).
tarantool_context_file_mode (string) – режим доступа до файла. Значение по умолчанию: 0640.
delete_custom_file (bool) – режим работы сценария: копирование файлов на виртуальные машины (False) или удаление загруженных файлов (True). Значение по умолчанию: False.
Если переменная имеет значение True, сценарий удалит заданные файлы с виртуальной машины.
В этом случае должна быть указана переменная tarantool_context_dst_path, которая содержит путь до удаляемого файла.
Переменную tarantool_context_src_path при этом можно опустить.
Примечание
Перед запуском сценария на удаление файлов убедитесь, что путь до этих файлов указан корректно.
Этот сценарий позволяет добавить файлы на выбранную виртуальную машину как в одну директорию, так и в разные директории на этой машине.
Например, если необходимо положить файл в директории с названием каждого экземпляра
(/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",
      }'
Важно
Начиная с версии 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-подключение. Для этого необходимо:
В инвентаре указать конечные точки (endpoints) ETCD со схемой https:// (в cartridge_failover_params.etcd2_params.endpoints)
Добавить в инвентарь переменные:
etcd_ca_ssl_cert (string) — имя файла SSL-сертификата удостоверяющего центра.
etcd_server_ssl_cert (string) — имя файла SSL-сертификата сервера.
etcd_server_ssl_key (string) — имя файла ключа для SSL-сертификата сервера.
Дополнительно присутствуют переменные:
etcd_cleanup_data (string) — полная очистка data-директории с последующим перезапуском ETCD.
yes
no ← (default)
etcd_copy_cert_files (boolean) — копировать SSL-сертификаты на удаленный сервер в случае настройки SSL. Имена сертификатов при этом все равно необходимы для создания конфигурационного файла ETCD.
true ← (default)
false
Сценарий настраивает ротацию журналов с помощью утилиты 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
Обязательный параметр:
tarantool_configure_logrotate (boolean)
true
Сценарий используется для настройки 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
Обязательные параметры:
balancer_fqdn (string) — доменное имя балансировщика; можно указать localhost, если не используется балансировка.
hosts_configs_path (string) — полный путь для создания конфигурационных файлов nginx.
remote_ssl_path (string) — полный путь для копирования сертификатов.
server_ssl_cert (string) — имя сертификата.
server_ssl_key (string) — имя ключа.
copy_cert_files (string) — копировать ли сертификат и ключ:
“yes” — нужно копировать.
“no” — не нужно копировать.
Добавлено в версии 1.6.0.
Сценарий backup_clean.yml настраивает задания cron для очистки резервных копий Tarantool на указанных хостах. Очистка может быть выполнена по количеству хранимых резервных копий или по их возрасту (дни хранения). Сценарий проверяет, что определена только одна из переменных — tarantool_backup_retention_count или tarantool_backup_retention_days.
Если указана переменная tarantool_backup_retention_count, cron будет настроен на удаление старых резервных копий, когда их количество превышает заданное значение.
Если указана переменная 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
Обязательные переменные:
tarantool_remote_backups_dir (string) — путь к директории на удаленном сервере, в которой находятся резервные копии.
tarantool_backup_retention_count (int) — количество хранимых резервных копий. Оставляет только указанное количество новых резервных копий.
tarantool_backup_retention_days (int) - количество дней хранения резервных копий. Удаляет резервные копии, старше заданного количества дней.
Дополнительные переменные:
tarantool_backup_cleanup_time (необязательно) - Время выполнения задачи очистки cron.
По умолчанию: weekly
Возможные значения:
hourly
daily
weekly
monthly
yearly
reboot
Ошибка может возникнуть при исполнении команд Start / Stop / Restart или в процессе развертывания на аналогичных шагах. Связана с невозможностью пользователя управлять systemd-сервисами.
Возможные причины:
Не выполнена команда loginctl enable-linger tarantool
Можно проверить наличием файла /var/lib/systemd/linger/tarantool.
Отсутствуют файлы в /run директории пользователя tarantool:
/run/user/$(id -u tarantool)/systemd
Попробовать заново вызвать команду loginctl enable-linger tarantool, но это помогает не всегда.
Пересоздать пользователя tarantool с тем же UID и GID.
Создать файлы по аналогии.
Возникает при запуске сервисов на RHEL 8, AstraLinux, RedOS.
Ошибка может возникнуть на этапах конфигурации кластера. Например, сценарий Settings. Связана с некорректным запуском процесса Tarantool.
Проверьте наличие параметров User=tarantool и Group=tarantool в unit-файле systemd.
Известно о трех ошибках:
CartridgeCfgError: Socket bind error (
HttpInitError: <…> Can’t create tcp_server: Address already in use
RemoteControlError: Can’t start server on 
Эти ошибки можно заметить только в логах Tarantool.
Проблема вызвана тем, что при старте не может быть использован бинарный (например, 3301) или HTTP (например, 8081) порт. В результате экземпляр Tarantool не сможет сконфигурироваться и упадет с ошибкой.
Из текста ошибки определите, какой порт занят.
С помощью unix-команды lsof определите, какое приложение в данный момент использует данный порт.
sudo lsof -i :<port>
Без sudo-прав можно посмотреть только процессы текущего пользователя.
Определите тип подключения.
# Исходящее подключение на порту 50858
TCP 192.168.100.17:50858->google.com:https (ESTABLISHED)
# Ожидание входящих запросов на порту 3301
TCP localhost:3301 (LISTEN)
Дальнейшие действия зависят от найденного приложения и типа подключения.
Это исходящее подключение:
Настройте параметр сети, отвечающий за пул исходящих портов. Например, так:
echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range
/etc/rc.d/init.d/network restart
Это входящее подключение:
Для Google Chrome / etcd / nginx / любого другого приложения определите, можно ли изменить параметры, чтобы освободить этот порт.
Для Tarantool – скорее всего, у вас неверная топология кластера или запущено несколько кластеров одновременно. Обратитесь в техподдержку Tarantool за консультацией.
Ошибка возникает при запуске экземпляров Tarantool с помощью systemd. Как правило, на RHEL 7.
Проверьте, что на всех серверах создан systemd сервис-файл в директории /etc/systemd/system.
Ошибка возникает при запуске экземпляров Tarantool, nginx или etcd с помощью systemd.
Убедитесь, что корректно выставлены sudoers-права для администраторов.
Права должны предусматривать запуск команд без пароля, то есть должно быть ключевое слово NOPASSWD.
Проверьте название приложения, cartridge_app_name.
Переменная используется для формирования имени сервис-файла в формате < cartridge_app_name >@.service.
Если название файла не совпадает с переменной в файле-инвентаре hosts.yml, исправьте это.
Ошибка подключения к серверу по SSH. Возникает в начале исполнения сценариев, требующих подключения.
Возможные причины:
На SSH-ключе установлен пароль (passphrase). Инсталлятор на текущий момент не поддерживает интерактивный ввод пароля.
Создайте новый ключ без использования passphrase.
Публичная часть ключа не была добавлена на сервер как доверенная.
Скопируйте публичную часть на все сервера с помощью команды ssh-copy-id.
ssh-copy-id -i ~/.ssh/mykey user@host
Другой вариант – добавить вручную в файл ~/.ssh/authorized_keys для пользователя администратора.
Возникает в процессе запуска экземпляра Tarantool.
Возможные причины:
Процесс не может создать рабочие директории.
Проверьте корректность путей в сервис-файле systemd.
Проверьте корректность всех путей из переменных в инвентаре.
Вариант 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 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.
---
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 (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
Сценарии для работы с TCM приведены в разделе Tarantool Cluster Manager.
---
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"
---
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"
---
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"
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"
Информация о настройке 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
Информация о настройке TCS и сценарии для работы с этим продуктом приведены в разделе Tarantool Column Store.
---
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'
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
---
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'
Добавлено в версии 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
---
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
Информация о настройке TDB и сценарии для работы с этим продуктом приведены в разделе Tarantool DB.
---
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']
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
---
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
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
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
Сценарии для работы с 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
Сценарии для работы с 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
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: {}
# Плагин динамического инвентаря
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:
  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:
  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"
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:
| Переменная | Назначение | Рекомендуемое значение | Где используется | 
|---|---|---|---|
| 
 | Права доступа на директории | 
 | Во всех ролях, создающих каталоги | 
| 
 | Права доступа на неисполняемые файлы | 
 | Во всех ролях, создающих файлы конфигурации и неисполняемые файлы | 
| 
 | Права доступа на исполняемые скрипты | 
 | В роли  | 
| 
 | Права доступа на приватные ключи, токены, SSH-файлы | 
 | 
 | 
| 
 | Пользователь, от имени которого работают компоненты | 
 | Все роли (как  | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на директории приложения | 
| 
 | Права доступа на конфигурационные файлы | 
| 
 | Права доступа на установочные скрипты | 
| 
 | Права доступа на итоговый файл конфигурации в формате YAML | 
| 
 | Права доступа на директории для бэкапов | 
| 
 | Права доступа на бэкап-каталог | 
| 
 | Владелец архива бэкапа (совпадает с  | 
| 
 | Пользователь приложения (по умолчанию  | 
| 
 | Группа приложения (по умолчанию  | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на директории TCM | 
| 
 | Права доступа на файлы TCM | 
| Переменная | Назначение | 
|---|---|
| 
 | Тип вывода записей журнала:  | 
| 
 | Протокол доставки ( | 
| 
 | Адрес приёмника в формате  | 
| 
 | Уровень важности сообщения ( | 
| 
 | Подсистема (например,  | 
| 
 | Время ожидания при попытке отправки записей журнала в  | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на директории etcd | 
| 
 | Права на основной файл конфигурации etcd | 
| 
 | Права доступа на SSL-файлы и сертификаты etcd | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на директории ротации записей журнала | 
| 
 | Права доступа на конфигурационные файлы ротации логов | 
| 
 | Владелец конфигурационных файлов ротации логов ( | 
| 
 | Группа владельца ( | 
| Переменная | Назначение | 
|---|---|
| 
 | Права на директории nginx | 
| 
 | Права на конфигурационные файлы и SSL nginx | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на каталоги с systemd-юнитами | 
| 
 | Права доступа на unit-файлы | 
| 
 | Права доступа на директории nginx | 
| 
 | Права доступа на каталоги etcd | 
| 
 | Права на приватный ключ пользователя  | 
| 
 | Права на sshd-конфигурацию | 
| 
 | Общие директории настройки ОС | 
| 
 | Каталог с логами systemd | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на systemd-каталоги | 
| 
 | Права доступа на unit-файлы | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на каталоги TCF | 
| 
 | Права доступа на конфигурационные файлы TCF | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на каталоги TCS | 
| 
 | Права доступа на конфигурационные файлы TCS | 
| Переменная | Назначение | 
|---|---|
| 
 | Права доступа на каталоги Zabbix | 
| 
 | Права доступа на конфигурационные файлы Zabbix | 
| Переменная | Назначение | Рекомендуемое значение | Где используется | 
|---|---|---|---|
| 
 | Дополнительные настройки  | {} | Только в динамическом инвентаре | 
Подробное описание всех конфигурационных опций доступно в документации TCF в разделах Конфигурация репликаторов данных и HTTP API репликаторов данных.
| Переменная | Назначение | 
|---|---|
| 
 | Список URI маршрутизаторов | 
| 
 | Путь до бинарного файла Gateway | 
| 
 | Путь до конфигурационного файла Gateway | 
| 
 | Адрес ( | 
| 
 | Номер порта, на котором будет работать компонент Gateway | 
| 
 | Порт метрик Gateway | 
| 
 | Тип реплики, в качестве которой Gateway подключается к кластеру | 
| 
 | Уникальный идентификатор (UUID) для набора реплик Gateway, и он обязателен, если тип реплики –  | 
| 
 | Максимальное число ядер, которые может использовать Gateway. По умолчанию Gateway использует все доступные ядра и создает один поток для каждого набора реплик | 
| 
 | Уровень журналирования. Значение по умолчанию:  | 
| 
 | Формат журналирования. Значение по умолчанию:  | 
| 
 | Путь к каталогу с файлами записей журнала ( | 
| 
 | Включение метрик Gateway ( | 
| 
 | Содержит имя systemd-юнита, через который будет запускаться Gateway на сервере | 
| 
 | Имя приложения для идентификации конкретного экземпляра Gateway. Используется для отображения метрик конкретного экземпляра в Grafana. Значение по умолчанию:  | 
| Переменная | Назначение | 
|---|---|
| 
 | Список экземпляров компонента Gateway – опция  | 
| 
 | Время ожидания для подключения к экземплярам Gateway (строка, вида  | 
| 
 | Тип хранилища состояния кластеров – опция  | 
| 
 | Опции  | 
| 
 | Префикс ключей ( | 
| 
 | Время жизни записей в секундах ( | 
| 
 | Список URI маршрутизаторов | 
| 
 | Путь до бинарного файла Destination | 
| 
 | Путь до конфигурационного файла Destination | 
| 
 | Включение метрик Destination ( | 
| 
 | Адрес ( | 
| 
 | Порт метрик Destination | 
| 
 | Размер внутреннего буфера на каждый набор реплик для выполнения служебных операций | 
| 
 | Уровень журналирования. Значение по умолчанию:  | 
| 
 | Формат журналирования. Значение по умолчанию:  | 
| 
 | Путь к каталогу с файлами записей журнала ( | 
| 
 | Задержка в миллисекундах перед началом повторной попытки подключения к роутерам для получения служебной информации и формирования соединения. Значение по умолчанию:  | 
| 
 | Максимальная задержка в миллисекундах перед началом повторной попытки подключения к роутерам для получения служебной информации и формирования соединения | 
| 
 | Количество разрешенных попыток повторного подключения к роутерам. Значение по умолчанию:  | 
| 
 | Содержит имя systemd-юнита, через который будет запускаться Destination на сервере | 
| 
 | Имя приложения для идентификации конкретного экземпляра Destination. Используется для отображения метрик конкретного экземпляра в Grafana. Значение по умолчанию:  | 
| 
 | Время, за которое ожидается получение на Destination операции truncate от каждого шарда исходного кластера. Значение по умолчанию:  | 
| 
 | Размер буфера для репликационных событий, полученных Destination при ожидании получения  | 
| Переменная | Назначение | Рекомендуемое значение | Где используется | 
|---|---|---|---|
| 
 | Наименование протокола для передачи данных в etcd | 
 | 
 | 
| 
 | Путь к ssl-ключу используемому для установки соединения с etcd | {} | 
 | 
| 
 | Путь к ssl-сертификату используемому для установки соединения с etcd | {} | 
 | 
| 
 | Путь к ca-сертификату используемому для установки соединения с etcd | {} | 
 | 
| 
 | Наличие проверки peer-сертификата etcd | 
 | 
 | 
| 
 | Наличие проверки master-сертификата etcd | 
 | 
 | 
| Переменная | Назначение | Рекомендуемое значение | Где используется | 
|---|---|---|---|
| 
 | Наименование протокола для передачи данных в etcd | 
 | 
 | 
| 
 | Путь к SSL-ключу, используемому для установки соединения с etcd | {} | 
 | 
| 
 | Путь к SSL-сертификату, используемому для установки соединения с etcd | {} | 
 | 
| 
 | Путь к CA-сертификату, используемому для установки соединения с etcd | {} | 
 | 
| 
 | Наличие проверки peer-сертификата etcd | 
 | 
 | 
| 
 | Наличие проверки master-сертификата etcd | 
 | 
 | 
| Переменная | Назначение | 
|---|---|
| 
 | Протокол, используемый для передачи данных в etcd | 
| 
 | Наличие проверки серверного сертификата etcd | 
| Переменная | Назначение | 
|---|---|
| 
 | Протокол используемый для передачи данных в etcd | 
| 
 | Наличие проверки серверного сертификата etcd | 
| 
 | Путь к SSL-сертификату, используемому для установки соединения с etcd | 
| 
 | Путь к SSL-ключу, используемому для установки соединения с etcd | 
| 
 | Путь к CA-сертификату, используемому для установки соединения с etcd | 
| Переменная | Назначение | 
|---|---|
| 
 | Путь к SSL-ключу, используемому для установки соединения с etcd | 
| 
 | Путь к SSL-сертификату, используемому для установки соединения с etcd | 
| 
 | Путь к CA-сертификату, используемому для установки соединения с etcd | 
| 
 | Протокол, используемый для передачи данных в etcd | 
| Переменная | Назначение | 
|---|---|
| 
 | Путь к SSL-ключу, используемому для установки соединения с etcd | 
| 
 | Путь к SSL-сертификату, используемому для установки соединения с etcd | 
| 
 | Путь к CA-сертификату, используемому для установки соединения с etcd | 
| 
 | Протокол, используемый для передачи данных в etcd | 
| 
 | Наличие проверки серверного сертификата etcd |