Использование динамического инвентаря
В этом руководстве описано, как создать файл динамического инвентаря с использованием плагина tarantool.enterprise.generator.
В файле динамического инвентаря для плагина задаются параметры кластера Tarantool или продуктов на его основе,
серверов, а также компонентов кластера.
Плагин входит в поставку Ansible Tarantool Enterprise. Чтобы использовать данный плагин вне коллекции АТЕ,
включите его в файле конфигурации Ansible (файл ansible.cfg):
[inventory]enable_plugins = tarantool.enterprise.generator
Файл динамического инвентаря написан в формате YAML и состоит из нескольких основных секций:
plugin: название используемого инвентарного плагина;cluster_name: имя кластера;product: название продукта -- напримерtarantool,TCS,TCF,TQE,cartridge;constants: глобальные переменные и настройки;servers: список серверов и их параметры;components: список компонентов кластера и их параметры;changes: список изменений для кластера.
plugin: плагин, используемый для генерации инвентаря (tarantool.enterprise.generator).cluster_name: имя кластера, которое будет использоваться как родительская группа для всех сгенерированных хостов.product: название продукта. Возможные значения:tarantool,TCS,TCF,TQE,cartridge. Для генерации инвентаря для Tarantool DB укажитеtarantoolв качестве названия продукта.
Секция constants содержит глобальные переменные, применяемые ко всем хостам.
Для Tarantool 3.x здесь указывается переменная tarantool_config_global.
Некоторые переменные можно посмотреть в соответствующем разделе документации.
Секция servers содержит список физических серверов и виртуальных машин, на которых будут распределены компоненты кластера.
Каждый сервер содержит данные поля:
name(опционально): имя сервера. Значение по умолчанию: экранированное полеhost;host: хост сервера;advertise_host(опционально): адрес дляadvertise_uri. Значение по умолчанию:host;port(опционально): порт для подключения к серверу. Значение по умолчанию:22;user: пользователь для подключения к серверу;zone(опционально): зона, к которой относится сервер;port_starts(опционально): стартовые порты для генерации. Значение по умолчанию: "iproto": 3301, "http": 8081.
Секция components описывает компоненты кластера, их конфигурацию, а также количество наборов реплик и экземпляров в них:
name: имя компонента;replicasets: количество наборов реплик;replicas: количество узлов в каждом наборе реплик;config: конфигурация компонента.
Секция changes содержит список изменений, которые будут применены после создания топологии кластера.
Возможные типы изменений:
set_variables: задаёт переменные для экземпляров;remove_instances: удаляет экземпляр из кластера.
changes:- type: set_variables # тип измененияhosts: # Хост или группа хостов- kvee-app-r001-s01- ROUTERSvalues: # Переменные, задаваемые для узловexpelled: trueconfig:http_port: 101010301vinyl_cache: 1vinyl_memory: 2- type: remove_instanceshosts:- kvee-app-r001-s01- kvee-app-r002-s02
В начале инвентаря добавьте строку с подключением плагина динамического инвентаря ATE:
plugin: tarantool.enterprise.generator
Придумайте имя кластера Tarantool, а затем укажите желаемый продукт -- tarantool, TCS, TCF, TQE или cartridge:
cluster_name: my_cluster_nameproduct: tarantool
В секции constants укажите глобальные переменные, которые будут применяться ко всем хостам:
constants:cartridge_app_name: my_app_nametarantool_etcd_host: "{{ tarantool_etcd_host }}"tarantool_config_global:credentials:users:client:password: 'secret'roles: [super]replicator:password: 'secret'roles: [replication]storage:password: 'secret'roles: [sharding]roles_cfg:my-role:variable_1: 10iproto:advertise:peer:login: replicatorsharding:login: storageclient: 'unix/:{{ cartridge_run_dir }}/{% raw %}{{ instance_name }}{% endraw %}.iproto'listen:- uri: unix/:/app/tarantool/kvee/run/{% raw %}{{ instance_name }}{% endraw %}.iproto
В секции servers укажите список серверов и их параметры:
servers:- name: 'vm_1'host: '{{ tarantool_ansible_host }}'user: '{{ super_user }}'- name: 'vm_2'host: '{{ tarantool_ansible_host }}'advertise_host: '127.0.0.1'port: 2201zone: 'DC5'user: '{{ super_user }}'port_starts:iproto: 3401http: 9091
В секции components укажите компоненты кластера, их конфигурацию, количество наборов реплик и узлов в каждом из них:
components:- name: storagereplicasets: 2replicas: 2config:replicaset:memtx:memory: 512000000group:app:module: storagecfg:space_name: super-duper-spacesharding:roles: [storage]memtx:memory: 1000241024roles:- roles.my-role- name: routerreplicasets: 2replicas: 1config:replicaset:group:app:module: routersharding:roles: [router]roles:- roles.another-role
Tarantool 3.x позволяет задавать параметры конфигурации на различных уровнях (scope) — например для всех узлов кластера
или отдельного набора реплик. Вы можете задать конфигурацию для группы и набора реплик в секции config.
TCS имеет обязательные компоненты scheduler (для TCS 0.x) и coordinator, а также компонент storage, который может иметь произвольное имя.
Для установки TCS версии 1.x укажите переменную tcs_v1_support: true и заполните инвентарь в соответствии с
документацией TCS (без компонента scheduler).
В инвентаре TCF есть три обязательные секции:
tcf- переменные для компонентов Gateway и Destination;cluster_1иcluster_2- описание первого и второго кластера;
В этой верcии генератора на основе инвентаря создаётся топология TCF c двумя экземплярами Gateway и двумя экземплярами Destination.
TQE имеет обязательный компонент, который должен содержать строку grpc_server (например grpc_server_consumer, grpc_server_producer).
У компонента, содержащего строку grpc_server, достаточно указать словарь очередей для публикации и подписки - это можно сделать в секции
инвентаря producer/consumer для задания очередей.
Генератор автоматически заполнит секцию advertise_uri для экземпляров хранилища и роутера соответственно.
Если требуется задать свои собственные параметры подключения, их можно указать в поле connections.
Чтобы посмотреть топологию, используйте следующую команду:
ansible-inventory -i path/to/config.yml --graph
Чтобы посмотреть переменные у хостов, вызовите команду ниже:
ansible-inventory -i path/to/config.yml --list