Установка через Ansible Tarantool Enterprise¶
Ansible Tarantool Enterprise (ATE) – это набор плейбуков для развертывания и последующего обслуживания продуктов Tarantool Enterprise. Инсталлятор Ansible Tarantool Enterprise – это основной способ установки Tarantool DB.
Ansible Tarantool Enterprise используется для развертывания кластера на промышленном сервере. Инструкция по запуску кластера через ATE приведена в разделе Запуск кластера через Ansible Tarantool Enterprise.
Note
Подробная документация по инсталлятору ATE доступна зарегистрированным пользователям личного кабинета tarantool.io. Узнать больше: Об инсталляторе.
Содержание:
Способы установки¶
Инсталлятор 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 одинаков для обоих вариантов.
Настройка среды¶
Минимальные системные требования под инсталлятор Ansible Tarantool Enterprise:
- 4 Core 2.6ГГц +; 
- 4 Гб RAM. 
Подробные требования к серверу под ATE описаны в документации по инсталлятору ATE.
Смотрите также: Требования к инфраструктуре для Tarantool DB.
Подготовка к использованию¶
Перед запуском сценариев развертывания подготовьте:
- инвентарь – описание топологии и настроек Tarantool DB (см. ниже); 
- пользователя для подключения к серверам по ssh. Может быть - root. Должен иметь sudo права на логин под локального пользователя- tarantool;
- приватный ssh-ключ пользователя для подключения к серверам; 
- пакеты для нужного типа установки (Ansible-коллекция или Docker-контейнер). 
Пример инвентаря для Tarantool DB
all:
  children:
    ROUTERS:
      hosts:
        router-1:
        router-2:
        router-3:
        router-4:
        router-5:
        router-6:
    STORAGES:
      hosts:
        storage-1-1:
        storage-1-2:
        storage-2-1:
        storage-2-2:
    STORAGES_GROUP_1:
      hosts:
        storage-1-1:
        storage-1-2:
    STORAGES_GROUP_2:
      hosts:
        storage-2-1:
        storage-2-2:
    replicaset_router_01:
      hosts:
        router-1:
      vars:
        failover_priority:
        - router-1
        replicaset_alias: router-1
        roles:
        - vshard-router
        - crud-router
        - failover-coordinator
        - space-explorer
        - migrator
        - dictionary.roles.router
    replicaset_router_02:
      hosts:
        router-2:
      vars:
        failover_priority:
        - router-2
        replicaset_alias: router-2
        roles:
        - vshard-router
        - crud-router
        - failover-coordinator
        - space-explorer
        - migrator
        - dictionary.roles.router
    replicaset_router_03:
      hosts:
        router-3:
      vars:
        failover_priority:
        - router-3
        replicaset_alias: router-3
        roles:
        - vshard-router
        - crud-router
        - failover-coordinator
        - space-explorer
        - migrator
        - dictionary.roles.router
    replicaset_router_04:
      hosts:
        router-4:
      vars:
        failover_priority:
        - router-4
        replicaset_alias: router-4
        roles:
        - vshard-router
        - crud-router
        - failover-coordinator
        - space-explorer
        - migrator
        - dictionary.roles.router
    replicaset_router_05:
      hosts:
        router-5:
      vars:
        failover_priority:
        - router-5
        replicaset_alias: router-5
        roles:
        - vshard-router
        - crud-router
        - failover-coordinator
        - space-explorer
        - migrator
        - dictionary.roles.router
    replicaset_router_06:
      hosts:
        router-6:
      vars:
        failover_priority:
        - router-6
        replicaset_alias: router-6
        roles:
        - vshard-router
        - crud-router
        - failover-coordinator
        - space-explorer
        - migrator
        - dictionary.roles.router
    shard_1:
      hosts:
        storage-1-1:
        storage-1-2:
      vars:
        failover_priority:
        - storage-1-1
        - storage-1-2
        replicaset_alias: shard-1
        roles:
        - vshard-storage
        - crud-storage
        - space-explorer
        - expirationd
        - dictionary.roles.storage
    shard_2:
      hosts:
        storage-2-1:
        storage-2-2:
      vars:
        failover_priority:
        - storage-2-1
        - storage-2-2
        replicaset_alias: shard-2
        roles:
        - vshard-storage
        - crud-storage
        - space-explorer
        - expirationd
        - dictionary.roles.storage
    tarantooldb_test_env_1:
      hosts:
        storage-1-1:
        router-1:
        router-2:
        router-3:
      vars:
        ansible_user: '{{ super_user }}'
        ansible_host: '{{ internal_ip }}'
    tarantooldb_test_env_2:
      hosts:
        storage-2-1:
        router-4:
        router-5:
        router-6:
      vars:
        ansible_user: '{{ super_user }}'
        ansible_host: '{{ internal_ip }}'
    tarantooldb_test_env_3:
      hosts:
        storage-1-2:
        storage-2-2:
      vars:
        ansible_user: '{{ super_user }}'
        ansible_host: '{{ internal_ip }}'
  hosts:
    storage-1-1:
      config:
        advertise_uri: '{{ internal_ip }}:3301'
        http_port: 8091
        log: /app/logs/tarantooldb/storage-1-1.log
        memtx_memory: 536870912 #512MiB
        vinyl_cache: 0
        vinyl_memory: 0
    storage-1-2:
      config:
        advertise_uri: '{{ internal_ip }}:3302'
        http_port: 8092
        log: /app/logs/tarantooldb/storage-1-2.log
        memtx_memory: 536870912 #512MiB
        vinyl_cache: 0
        vinyl_memory: 0
    storage-2-1:
      config:
        advertise_uri: '{{ internal_ip }}:3303'
        http_port: 8093
        log: /app/logs/tarantooldb/storage-2-1.log
        memtx_memory: 536870912 #512MiB
        vinyl_cache: 0
        vinyl_memory: 0
    storage-2-2:
      config:
        advertise_uri: '{{ internal_ip }}:3304'
        http_port: 8094
        log: /app/logs/tarantooldb/storage-2-2.log
        memtx_memory: 536870912 #512MiB
        vinyl_cache: 0
        vinyl_memory: 0
    router-1:
      config:
        advertise_uri: '{{ internal_ip }}:3305'
        http_port: 8095
        log: /app/logs/tarantooldb/router-1.log
        vinyl_cache: 0
        vinyl_memory: 0
    router-2:
      config:
        advertise_uri: '{{ internal_ip }}:3306'
        http_port: 8096
        log: /app/logs/tarantooldb/router-2.log
        vinyl_cache: 0
        vinyl_memory: 0
    router-3:
      config:
        advertise_uri: '{{ internal_ip }}:3307'
        http_port: 8097
        log: /app/logs/tarantooldb/router-3.log
        vinyl_cache: 0
        vinyl_memory: 0
    router-4:
      config:
        advertise_uri: '{{ internal_ip }}:3308'
        http_port: 8098
        log: /app/logs/tarantooldb/router-4.log
        vinyl_cache: 0
        vinyl_memory: 0
    router-5:
      config:
        advertise_uri: '{{ internal_ip }}:3309'
        http_port: 8099
        log: /app/logs/tarantooldb/router-5.log
        vinyl_cache: 0
        vinyl_memory: 0
    router-6:
      config:
        advertise_uri: '{{ internal_ip }}:3310'
        http_port: 8100
        log: /app/logs/tarantooldb/router-6.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
      enable_synchro_mode: true
    etcd_cluster_prefix: /cluster
    cartridge_instances_templates:
    - storage-[0-9]-[0-9]
    - router-[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
    rhel8: true
    cartridge_cluster_cookie: tarantooldb-test
Перед началом работы укажите в файле инвентаря значения этих переменных:
- {{ super_user }}– имя пользователя для подключения по SSH. Указывается в параметре- ansible_user. Совпадает с переменной окружения- SUPER_USER_NAME(см. Переменные окружения);
- {{ internal_ip }}– внутренний IP-адрес. Указывается в параметрах- ansible_hostи- advertise_uri.
Расчет дисковой емкости¶
Разбить дисковое пространство необходимо согласно рекомендациям для оптимальной работы экземпляров Tarantool:
- журналы (logs) – 2 GB * количество экземпляров Tarantool, но не менее 15 GB; 
- журнал упреждающей записи (WAL) – 40–50% от RAM, используемого всеми экземплярами Tarantool; 
- снимки данных (snapshots) – 100–110% от RAM, используемого всеми экземплярами Tarantool. 
Разбейте диски согласно расчетам и подключите директории с помощью команды mount. Дополнительная информация по расчету дисковой емкости приведена в соответствующем разделе.
Предварительная настройка сервера под Tarantool¶
См. документацию по инсталлятору Ansible Tarantool Enterprise, раздел Предварительная настройка сервера под Tarantool.
Установка с использованием 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¶
Important
Сейчас роль не создает пользователей и верхнеуровневые директории в /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
Note
Если использовать 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.
Особенности использования в составе коллекции:
- Необходимо корректно указать путь до директории - 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-образом, можно добавить для него тег latest:
docker image tag ansible-tarantool-enterprise:${VERSION} ansible-tarantool-enterprise:latest
Инструкция по запуску кластера через ATE приведена в разделе Запуск кластера через Ansible Tarantool Enterprise.
Переменные окружения¶
В документации встречаются следующие переменные окружения:
- DEPLOY_TOOL_VERSION_TAG(string) – версия инсталлятора;
- LIMIT(string) – указание Ansible, на каких хостах или группах хостов производить действия.- Note - Переменная LIMIT – стандартный параметр limit для Ansible. Указывать - limitможно для любого плейбука. В некоторых случаях – обязательно. Чтобы запустить сценарий на всех экземплярах Tarantool, используйте специальное значение лимита- all.
- 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.
Дополнительные переменные окружения описаны в каждом пункте по мере необходимости.
Note
Часть переменных используется внутри контейнера во время запуска плейбука.
Значения переменных передаются в контейнер с помощью опции -e.