Updated at 2025-12-16 03:31:03.931210
Инсталлятор 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 |