Установка через Ansible Tarantool Enterprise¶
Ansible Tarantool Enterprise (ATE) – это набор плейбуков для развертывания и последующего обслуживания продуктов Tarantool Enterprise. Инсталлятор Ansible Tarantool Enterprise – это основной способ установки Tarantool DB.
Ansible Tarantool Enterprise используется для развертывания кластера на промышленном сервере. Инструкция по запуску кластера через ATE приведена в разделе Запуск кластера через Ansible Tarantool Enterprise.
Примечание
В руководстве используется Ansible Tarantool Enterprise версии 1.2.0.
Содержание:
Способы установки¶
Инсталлятор Ansible Tarantool Enterprise поставляется в виде пакета, доступного в личном кабинете на сайте Tarantool.
Для установки с помощью ATE Tarantool DB также поставляется в виде пакета, доступного в личном кабинете на сайте Tarantool. Узнать больше: Публикуемые версии.
Поддерживается два способа установки Tarantool DB с помощью ATE:
В обоих вариантах используется один и тот же установочный пакет Tarantool DB, но пакет инсталлятора ATE нужно выбирать под конкретный вариант установки:
tarantool-enterprise-<VERSION>.tar.gz
– пакет для установки через Ansible;ansible-tarantool-enterprise-<VERSION>.tar.gz
– пакет для установки через Docker.
Здесь:
VERSION
– версия инсталлятора Ansible Tarantool Enterprise.
Конечный результат установки Tarantool DB через ATE одинаков для обоих вариантов.
Требования к инфраструктуре¶
Минимальные системные требования:
4 Core 2.6ГГц +;
4Гб RAM.
Поддерживаемые ОС:
Astra Linux;
РЕД ОС.
Также возможна установка на ALTLinux, Ubuntu, AlmaLinux, CentOS, но полноценная работоспособность не гарантируется. За дополнительной информацией по поддерживаемым ОС можете обратиться в техническую поддержку.
Подробнее о требованиях к инфраструктуре для Tarantool DB можно прочитать в соответствующем разделе.
Настройка операционной системы¶
Настройте межсетевой экран (firewall):
a. Настройте порты для бинарного протокола Tarantool.
Для взаимодействия внутри кластера Tarantool использует как TCP, так и UDP.
Откройте пул портов 3301–3401 для TCP и UDP трафика, для внутреннего трафика на всех серверах, на которых устанавливается Tarantool.
Если внешние приложения обращаются к кластеру по бинарному протоколу, также необходимо открыть пул портов 3301–3401, но достаточно TCP.
Важно
Каждый экземпляр Tarantool должен иметь связь со всеми остальными экземплярами (full-mesh).
Примечание
Порты могут быть открыты только между соответствующими серверами или в конкретных подсетях. Детали настройки межсетевого экрана в вашем окружении уточняйте у команд инфраструктуры и информационной безопасности.
b. Настройте порты для HTTP(s).
HTTP используется для взаимодействия администраторов с веб-интерфейсом модуля Tarantool Cartridge.
Откройте пул портов 8001–8101 для HTTPS-трафика на всех серверах, на которых устанавливается Tarantool.
Встроенный в Tarantool сервер не может принимать SSL-трафик, поэтому необходимо настроить проксирование HTTPS-трафика на HTTP-порты из соответствующего локального пула портов 8081–8181. Для этого можно использовать, например, nginx.
c. В случае, если у вас:
отдельно стоящий сервер;
один из серверов под Tarantool;
агент CI/CD системы;
настройте также:
доступ по 22 порту (ssh) для devops-инженера;
сетевой доступ по 22 порту (ssh) до всех серверов, на которые производится установка, в том числе до серверов под ETCD, nginx и других сервисов.
Настройте DNS:
Все сервера должны находить друг друга по FQDN (доменное имя локальной машины). Удобно использовать доменное имя для обозначения экземпляров Tarantool в кластере.
Разбейте дисковое пространство в соответствии с рекомендациями для оптимальной работы экземпляров Tarantool:
журналы (logs) – 2 GB * количество экземпляров Tarantool, но не менее 15 GB;
журнал упреждающей записи (WAL) – 40–50% от RAM, используемого всеми экземплярами Tarantool;
снимки данных (snapshots) – 100–110% от RAM, используемого всеми экземплярами Tarantool.
Разбейте диски в соответствие с расчетами и подключите директории с помощью команды
mount
.Подробная информация по расчету дисковой емкости приведена в соответствующем разделе.
Скорректируйте параметры ядра:
a. Задайте параметры overcommit по памяти:
sudo cat << EOF >> /etc/sysctl.conf vm.overcommit_memory = 2 vm.overcommit_ratio = 100 EOF
Примечание
В случае виртуализации запрещено использовать overcommit по памяти и swap-раздел.
b. При ошибочном завершении Tarantool должен быть создан coredump-файл, который понадобится нашим специалистам для исследования проблемы. Файлы должны собираться в доступную на запись директорию, иметь в названии
PID
,signal
иtimestamp
. Для корректного сохранения отладочной информации потребуются следующие настройки:sudo cat << EOF >> /etc/sysctl.conf kernel.core_uses_pid = 1 kernel.core_pattern = /app/tarantool/coredump/core-%e-%u-%g-%p-%t EOF
c. Настройте пул портов для исходящих запросов.
Исходящие соединения могут занимать порты, предназначенные для бинарного протокола Tarantool.
sudo cat << EOF >> /etc/sysctl.conf net.ipv4.ip_local_port_range = 32768 61000 EOF
Установите необходимое стороннее ПО:
a. Установите etcd и убедитесь, что для него включена опция API V2, например, в файле конфигурации:
enable-v2: true
b. Установите nginx.
c. Установите остальное необходимое ПО, список которого зависит от варианта установки Tarantool DB:
Установка Tarantool DB с помощью Docker:
Docker Engine версии не ниже 20.10.11.
Установка Tarantool DB с помощью Ansible:
Python 3.10.2 или новее.
Ansible 2.15.5 или новее.
pip модули urllib3==1.26, requests==2.31.0, etcd3==0.12.0.
Установите вспомогательные утилиты:
Примечание
Некоторые утилиты могут быть предустановлены с ядром ОС. Нет необходимости обновлять их на последнюю версию.
Команды для поддерживаемых ОС:
Для Astra Linux:
sudo apt update sudo apt install -y \ logrotate \ # Для ротации логов cronie \ # Утилита crontab gdb \ # Для сбора отладочной информации в случае падения gcore \ # Для создания coredump-файла на лету telnet \ # Для проверки сетевой связности узлов iperf3 \ # iptraf-ng \ # htop # Более красивый top
Для РЕД ОС:
sudo dnf install -y \ logrotate \ cronie \ gdb \ telnet \ iperf3 \ iptraf-ng \ htop
Создайте учетные записи:
Создайте группу
tarantool
и локального пользователяtarantool
для запуска и управления Tarantool:sudo groupadd -g 3301 tarantool sudo useradd -m -u 3301 -g 3301 --system tarantool
Для корректной работы пользователя
tarantool
сsystemctl
в пользовательском окружении выполните команду:sudo loginctl enable-linger tarantool
Аналогично
tarantool
, потребуются учетные записи для работы с инфраструктурными компонентамиetcd
иnginx
. Соответствующие пользователи должны создаваться в процессе установки компонентов. Если этого не произошло, создайте их самостоятельно:sudo groupadd nginx sudo useradd -m -g nginx --system nginx sudo groupadd etcd sudo useradd -m -g etcd --system etcd
Активируйте
systemd
userspace:sudo loginctl enable-linger tarantool
Создайте директории для записи на диск:
sudo mkdir -p /app/tarantool sudo mkdir -p /app/tarantool/coredump sudo mkdir -p /app/logs sudo mkdir -p /app/snap sudo mkdir -p /app/etcd sudo mkdir -p /app/nginx
Задайте права:
sudo chown tarantool:tarantool /app/tarantool sudo chown tarantool:tarantool /app/tarantool/coredump sudo chown tarantool:tarantool /app/logs sudo chown tarantool:tarantool /app/snap sudo chown nginx:nginx /app/nginx sudo chown etcd:etcd /app/etcd
Настройте лимиты для группы
tarantool
:
sudo cat << EOF >> /etc/security/limits.d/tarantool.conf
@tarantool - nproc 64000
@tarantool - nofile 64000
@tarantool - core unlimited
EOF
Настройте оркестратор:
a. Создайте systemd service-файлы (для РЕД ОС).
b. Включите персистентное хранилище journald (для РЕД ОС).
c. Выдайте sudo-права администратору Tarantool.
Для обслуживания серверов с Tarantool удобно выделить некоторую доменную
группу из AD. Этой группе выдайте соответствующие права на переход под
пользователей `tarantool`, `nginx` и `etcd`. Также нужны права на управление
сервисами и просмотр журналов для `nginx` и `etcd`.
Указанный список в формате `sudoers` выглядит примерно так:
```
# пример для Astra Linux:
%GROUP@domain.ru ALL=(tarantool) NOPASSWD: ALL
%GROUP@domain.ru ALL=(nginx) NOPASSWD: ALL
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl start nginx
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl stop nginx
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl status nginx
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl enable nginx
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl disable nginx
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/journalctl -u nginx
%GROUP@domain.ru ALL=(etcd) NOPASSWD: ALL
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl status etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl restart etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl reload etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl start etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl stop etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl enable etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl disable etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl edit etcd
%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/journalctl -u etcd
```
Настройте ротацию журналов:
Для Astra Linux:
Убедитесь, что установлена утилита
crontab
.Добавьте пользователя
tarantool
в группуcrontab
.sudo usermod -a -G crontab tarantool
Для РЕД ОС:
В РЕД ОС права на
crontab
организуются через файлы/etc/cron.allow
и/etc/cron.deny
. Проверьте, что выполняется любое из двух утверждений:пользователь
tarantool
есть в файле/etc/cron.allow
;файла
/etc/cron.allow
нет, а файл/etc/cron.deny
пуст (crontab
доступен всем).
Чек-лист перед установкой¶
Перед запуском сценариев развертывания подготовьте:
инвентарь – описание топологии и настроек Tarantool DB (см. ниже);
пользователя для подключения к серверам по ssh. Может быть
root
. Должен иметь sudo права на логин под локального пользователяtarantool
;приватный ssh-ключ пользователя для подключения к серверам;
пакеты для нужного типа установки (Ansible-коллекция или Docker-контейнер).
Пример инвентаря¶
Пример инвентаря для Tarantool DB:
all:
children:
ROUTERS:
hosts:
tarantooldb-router-01:
tarantooldb-router-02:
STORAGES:
hosts:
tarantooldb-r01-s01:
tarantooldb-r01-s02:
tarantooldb-r02-s01:
tarantooldb-r02-s02:
STORAGES_GROUP_1:
hosts:
tarantooldb-r01-s01:
tarantooldb-r02-s01:
STORAGES_GROUP_2:
hosts:
tarantooldb-r01-s02:
tarantooldb-r02-s02:
replicaset_vag_router_01:
hosts:
tarantooldb-router-01:
vars:
failover_priority:
- tarantooldb-router-01
replicaset_alias: vag-router-01
roles:
- vshard-router
- crud-router
- failover-coordinator
- space-explorer
- migrator
- dictionary.roles.router
replicaset_vag_router_02:
hosts:
tarantooldb-router-02:
vars:
failover_priority:
- tarantooldb-router-02
replicaset_alias: vag-router-02
roles:
- vshard-router
- crud-router
- failover-coordinator
- space-explorer
- migrator
- dictionary.roles.router
replicaset_vag_storage_01:
hosts:
tarantooldb-r01-s01:
tarantooldb-r01-s02:
vars:
failover_priority:
- tarantooldb-r01-s02
- tarantooldb-r01-s01
replicaset_alias: vag-storage-01
roles:
- vshard-storage
- crud-storage
- space-explorer
- expirationd
- dictionary.roles.storage
replicaset_vag_storage_02:
hosts:
tarantooldb-r02-s01:
tarantooldb-r02-s02:
vars:
failover_priority:
- tarantooldb-r02-s02
- tarantooldb-r02-s01
replicaset_alias: vag-storage-02
roles:
- vshard-storage
- crud-storage
- space-explorer
- expirationd
- dictionary.roles.storage
tarantooldb_test_env_1:
hosts:
tarantooldb-r01-s01:
tarantooldb-r02-s01:
tarantooldb-router-01:
vars:
ansible_user: '{{ super_user }}'
tarantooldb_test_env_2:
hosts:
tarantooldb-r01-s02:
tarantooldb-r02-s02:
tarantooldb-router-02:
vars:
ansible_user: '{{ super_user }}'
hosts:
tarantooldb-r01-s01:
config:
advertise_uri: '{{ internal_ip }}:3301'
http_port: 8091
log: /app/logs/tarantooldb/tarantooldb-r01-s01.log
memtx_memory: 536870912 #512MiB
vinyl_cache: 0
vinyl_memory: 0
tarantooldb-r01-s02:
config:
advertise_uri: '{{ internal_ip }}:3301'
http_port: 8091
log: /app/logs/tarantooldb/tarantooldb-r01-s02.log
memtx_memory: 536870912 #512MiB
vinyl_cache: 0
vinyl_memory: 0
tarantooldb-r02-s01:
config:
advertise_uri: '{{ internal_ip }}:3302'
http_port: 8092
log: /app/logs/tarantooldb/tarantooldb-r02-s01.log
memtx_memory: 536870912 #512MiB
vinyl_cache: 0
vinyl_memory: 0
tarantooldb-r02-s02:
config:
advertise_uri: '{{ internal_ip }}:3302'
http_port: 8092
log: /app/logs/tarantooldb/tarantooldb-r02-s02.log
memtx_memory: 536870912 #512MiB
vinyl_cache: 0
vinyl_memory: 0
tarantooldb-router-01:
config:
advertise_uri: '{{ internal_ip }}:3303'
http_port: 8093
log: /app/logs/tarantooldb/tarantooldb-router-01.log
vinyl_cache: 0
vinyl_memory: 0
tarantooldb-router-02:
config:
advertise_uri: '{{ internal_ip }}:3303'
http_port: 8093
log: /app/logs/tarantooldb/tarantooldb-router-02.log
vinyl_cache: 0
vinyl_memory: 0
vars:
ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
-o StrictHostKeyChecking=no
ansible_ssh_retries: 5
cartridge_app_directory: /app/tarantool/tarantooldb
cartridge_app_group: tarantool
cartridge_app_name: tarantooldb
cartridge_app_user: tarantool
cartridge_bootstrap_vshard: true
cartridge_defaults:
log_level: 5
etcd_cluster_prefix: /cluster
cartridge_instances_templates:
- tarantooldb-r[0-9][0-9]-s[0-9][0-9]
- tarantooldb-router-[0-9][0-9]
cartridge_keep_num_latest_dists: 10
cartridge_log_dir_parent: /app/logs/tarantooldb
cartridge_memtx_dir_parent: /app/snap/tarantooldb
cartridge_run_dir: /app/tarantool/tarantooldb/run
cartridge_cluster_cookie: tarantooldb-test
Установка с использованием Ansible¶
Установка Ansible-коллекции инсталлятора¶
Для установки Ansible-коллекции инсталлятора Ansible Tarantool Enterprise требуется архив с инсталлятором ATE,
полученный по почте или скачанный в личном кабинете tarantool.io из раздела ansible.
Архив имеет вид tarantool-enterprise-<VERSION>.tar.gz
, где VERSION
– нужная версия инсталлятора ATE.
Установите Ansible-коллекцию, используя ansible-galaxy
:
ansible-galaxy collection install --force tarantool-enterprise-${VERSION}.tar.gz
Финальная настройка сервера под Tarantool¶
Важно
Сейчас роль не создает пользователей и верхнеуровневые директории в /app
.
Для этого требуется root
доступ, который обычно не предоставляется Ansible.
Пожалуйста, настройте сервера согласно инструкциям техподдержки.
Роль tarantool.enterprise.os_configure
выполняет следующие функции:
определяет, поддерживается ли текущая операционная система;
создает systemd unit-файлы в домашней директории пользователя
tarantool
.
ATE не использует механизм gather_facts
по умолчанию, поэтому многие плейбуки
начинаются с тасков find_os.yml
для определения операционной системы.
Добавьте вызов роли tarantool.enterprise.os_configure
перед использованием других ролей из ATE:
- 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
;передайте параметр
-e tarantool_systemd_userspace_supported_os=[]
через extra vars.
Управление сервисами будет происходить с помощью команд sudo systemctl start/stop/restart
.
Параметры become_* и hosts в плейбуках¶
Есть специальный набор переменных, которые регулируют, каким образом запускаются плейбуки:
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
для создания сложных сценариев с
использованием плейбуков из коллекции.
Предположим, у вас в инвентаре есть группы 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
из коллекции.
Роль tarantool.enterprise.cartridge¶
Роль используется для работы с приложениями на Tarantool Cartridge.
Полностью вшитая open-source роль tarantool.cartridge
.
Документация доступна на GitHub: https://github.com/tarantool/ansible-cartridge?tab=readme-ov-file#documentation .
Особенности использования в составе коллекции:
Необходимо корректно указать путь до директории
custom_steps/
в переменнойcartridge_custom_steps_dir
.Переменная
cartridge_scenario
должна быть объявлена и иметь типList
. Можно использовать переменнуюcartridge_scenario_name
, чтобы указать исполняемую последовательность по умолчанию. В таком случае указыватьcartridge_scenario
нужно только при желании изменить стандартное исполнение.
Установка с использованием Docker¶
Установка Docker-образа инсталлятора¶
Для установки Tarantool DB с помощью Docker-образа требуется архив с инсталлятором Ansible Tarantool Enterprise,
полученный по почте или скачанный в личном кабинете tarantool.io из раздела ansible.
Архив с инсталлятором имеет вид ansible-tarantool-enterprise-<VERSION>.tar.gz
, где VERSION
– нужная версия инсталлятора ATE.
Загрузите образ инсталлятора в Docker:
docker load -i ansible-tarantool-enterprise-${VERSION}.tar.gz
Результат будет выглядеть так:
docker load -i ansible-tarantool-enterprise-1.1.0.tar.gz
8d3ac3489996: Loading layer 5.866MB/5.866MB
f57e81d89e60: Loading layer 2.909MB/2.909MB
9a922de0e682: Loading layer 33.94MB/33.94MB
4e4052a4ca72: Loading layer 4.608kB/4.608kB
d381d1fc27a6: Loading layer 8.777MB/8.777MB
941b2bc3646f: Loading layer 229.6MB/229.6MB
1af66bf9d305: Loading layer 2.048kB/2.048kB
c99d8e39ed3d: Loading layer 18.12MB/18.12MB
789b0308f31e: Loading layer 2.56kB/2.56kB
f6ea54d7a7c0: Loading layer 548.2MB/548.2MB
f87ddf0cc792: Loading layer 116.2kB/116.2kB
aef42c359c22: Loading layer 1.221MB/1.221MB
92f78bbeec79: Loading layer 231.9kB/231.9kB
af4c3ed9156a: Loading layer 11.26kB/11.26kB
3945ec9aefd5: Loading layer 99.84kB/99.84kB
cdf5064a536a: Loading layer 1.821MB/1.821MB
Loaded image: ansible-tarantool-enterprise:1.1.0
Чтобы упростить работу с Docker-образом, можно добавить для него тег latest
:
```bash
docker image tag ansible-tarantool-enterprise:${VERSION} ansible-tarantool-enterprise:latest
```
Инструкция по запуску кластера через ATE приведена в разделе Запуск кластера через Ansible Tarantool Enterprise.
Переменные окружения¶
В документации встречаются следующие переменные окружения:
DEPLOY_TOOL_VERSION_TAG
(string) – версия инсталлятора;LIMIT
(string) – указание Ansible, на каких хостах или группах хостов производить действия.Примечание
Переменная LIMIT – обычный параметр limit для Ansible. Указывать limit можно для любого плейбука. В некоторых случаях - обязательно. Можно использовать специальное значение лимита
all
, чтобы запустить сценарий на всех экземплярах Tarantool.PACKAGE_NAME
(string) – название архива Tarantool DB;PATH_TO_INVENTORY
(string) – полный путь к файлу инвентаря;PATH_TO_PACKAGE
(string) – путь к архиву Tarantool DB;PATH_TO_PRIVATE_KEY
(string) – полный путь к приватному ключу;SUPER_USER_NAME
(string) – имя пользователя для подключения по SSH.
Дополнительные переменные окружения описаны в каждом пункте по мере необходимости.
Примечание
Часть переменных используется внутри контейнера во время запуска плейбука.
Значения переменных передаются в контейнер с помощью опции -e
.