Установка через Ansible Tarantool Enterprise | Tdb

Установка через 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.

Found what you were looking for?
Feedback