Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Централизованные хранилища конфигурации

Примеры на GitHub: centralized_config

Tarantool позволяет хранить конфигурацию кластера в одном надежном месте с использованием хранилища на базе Tarantool или etcd:

  • Хранилище конфигурации на базе Tarantool — это набор реплик, который хранит конфигурацию кластера в синхронных спейсах.

  • etcd — распределенное хранилище ключей-значений для любых типов критических данных, используемых распределенными системами. При использовании локальной YAML-конфигурации необходимо следить за тем, чтобы все экземпляры кластера использовали одинаковые конфигурационные файлы:

Local configuration file

При использовании централизованного хранилища конфигурации все экземпляры получают актуальную конфигурацию из одного места:

Centralized configuration storage

В этом разделе описано, как настроить хранилище конфигурации, опубликовать конфигурацию кластера в этом хранилище и использовать ее для всех экземпляров кластера.

Настройка хранилища конфигурации

Хранилище на базе Tarantool

Чтобы набор реплик выполнял роль хранилища конфигурации, используйте встроенную роль config.storage.

Настройка хранилища

Чтобы настроить хранилище на базе Tarantool, выполните следующие шаги:

  1. Определите топологию набора реплик и задайте следующие параметры на уровне набора реплик:

    • Включите роль config.storage в roles.
    • При необходимости задайте конфигурацию роли в roles_cfg.

    В примере ниже параметр status_check_interval задает интервал проверки статуса (в секундах).

groups:  group001:    replicasets:      replicaset001:        roles: [ config.storage ]        roles_cfg:          config.storage:            status_check_interval: 3        instances:          instance001:            iproto:              listen:              - uri: '127.0.0.1:4401'          instance002:            iproto:              listen:              - uri: '127.0.0.1:4402'          instance003:            iproto:              listen:              - uri: '127.0.0.1:4403'
  1. Создайте пользователя и выдайте ему следующие привилегии:

    • Права read и write для спейсов config_storage и config_storage_meta, используемых для хранения данных конфигурации.
    • Право execute для universe, чтобы обеспечить возможность взаимодействия с хранилищем через утилиту tt.
credentials:  users:    sampleuser:      password: '123456'      privileges:      - permissions: [ read, write ]        spaces: [ config_storage, config_storage_meta ]      - permissions: [ execute ]        universe: true
  1. Задайте для параметра replication.failover значение election, чтобы включить автоматическое переключение при отказе:
replication:  failover: election
  1. Включите режим транзакций MVCC для обеспечения линеаризуемости операций чтения:
database:  use_mvcc_engine: true

Итоговая конфигурация хранилища может выглядеть следующим образом:

credentials:  users:    sampleuser:      password: '123456'      privileges:      - permissions: [ read, write ]        spaces: [ config_storage, config_storage_meta ]      - permissions: [ execute ]        universe: true    replicator:      password: 'topsecret'      roles: [ replication ]iproto:  advertise:    peer:      login: replicatorreplication:  failover: electiondatabase:  use_mvcc_engine: truegroups:  group001:    replicasets:      replicaset001:        roles: [ config.storage ]        roles_cfg:          config.storage:            status_check_interval: 3        instances:          instance001:            iproto:              listen:              - uri: '127.0.0.1:4401'          instance002:            iproto:              listen:              - uri: '127.0.0.1:4402'          instance003:            iproto:              listen:              - uri: '127.0.0.1:4403'

Полный пример доступен здесь: tarantool_config_storage.

Запуск хранилища

Чтобы запустить экземпляры настроенного хранилища, используйте команду tt start, например:

$ tt start tarantool_config_storage

Подробнее см. в разделе Запуск и остановка экземпляров.

Хранилище на базе etcd

О том, как настроить хранилище конфигурации на базе etcd, см. в документации etcd.

Приведенный ниже пример скрипта демонстрирует, как с помощью утилиты etcdctl создать пользователя с правами на чтение и запись конфигураций, хранящихся по префиксу /myapp/:

/code_snippets/snippets/centralized_config/etcd_config_storage.sh

Учетные данные этого пользователя необходимо указать при настройке подключения к кластеру etcd.

Публикация конфигурации кластера

Публикация конфигурации с помощью утилиты tt

Утилита tt предоставляет команду tt cluster для управления централизованными конфигурациями кластера. Команда tt cluster publish может использоваться для публикации конфигурации кластера в хранилища как на базе Tarantool, так и на базе etcd.

В примере ниже показано, как может выглядеть tt-окружение и структура приложения с именем myapp:

├── tt.yaml├── source.yaml└── instances.enabled    └── myapp        ├── config.yaml        └── instances.yml
  • tt.yaml — конфигурационный файл tt.
  • source.yaml содержит конфигурацию кластера для публикации.
  • config.yaml содержит локальную конфигурацию для подключения к централизованному хранилищу.
  • instances.yml задает экземпляры для запуска в текущем окружении. Настроенные экземпляры используются tt при запуске кластера. Команда tt cluster publish игнорирует этот конфигурационный файл.

Чтобы опубликовать конфигурацию кластера (source.yaml) в централизованном хранилище, выполните tt cluster publish следующим образом:

$ tt cluster publish "http://sampleuser:123456@localhost:2379/myapp" source.yaml

Выполнение этой команды публикует конфигурацию кластера по пути /myapp/config/all.

Публикация конфигурации с помощью модуля config

Модуль config предоставляет API для взаимодействия с хранилищем конфигурации на базе Tarantool. В примере ниже показано, как прочитать конфигурацию, хранящуюся в файле source.yaml, с помощью API модуля fio и поместить ее по пути /myapp/config/all:

local fio = require('fio')local cluster_config_handle = fio.open('../../source.yaml')local cluster_config = cluster_config_handle:read()local response = config.storage.put('/myapp/config/all', cluster_config)cluster_config_handle:close()

Подробнее см. в разделе config.storage API.

Публикация конфигурации с помощью etcdctl

Чтобы опубликовать конфигурацию кластера в etcd с помощью утилиты etcdctl, используйте команду put:

$ etcdctl put /myapp/config/all < source.yaml

Настройка подключения к хранилищу

Чтобы использовать конфигурацию из централизованного хранилища для кластера, необходимо указать параметры подключения в локальном конфигурационном файле.

Настройка подключения к хранилищу Tarantool

Параметры подключения к хранилищу на базе Tarantool указываются в разделе config.storage конфигурационного файла. В примере ниже заданы следующие параметры:

config:  storage:    endpoints:      - uri: '127.0.0.1:4401'        login: sampleuser        password: '123456'      - uri: '127.0.0.1:4402'        login: sampleuser        password: '123456'      - uri: '127.0.0.1:4403'        login: sampleuser        password: '123456'    prefix: /myapp    timeout: 3    reconnect_after: 5
  • endpoints — список эндпоинтов хранилища конфигурации.
  • prefix — префикс ключа, используемый для поиска конфигурации. Tarantool выполняет поиск ключей по следующему пути: <prefix>/config/*. Обратите внимание, что <prefix> должен начинаться со слеша (/).
  • timeout — интервал (в секундах) для проверки статуса хранилища конфигурации.
  • reconnect_after — время ожидания (в секундах) перед повторным подключением к хранилищу конфигурации.

Полный пример доступен здесь: config_storage.

Настройка подключения к хранилищу etcd

Параметры подключения к etcd указываются в разделе config.etcd конфигурационного файла. В примере ниже заданы следующие параметры:

config:  etcd:    endpoints:    - http://localhost:2379    prefix: /myapp    username: sampleuser    password: '123456'    http:      request:        timeout: 3
config:  etcd:    endpoints:    - http://localhost:2379    prefix: /myapp
config:  etcd:    endpoints:    - http://localhost:2379    prefix: /myapp    username: sampleuser    password: '123456'
  • endpoints — список конечных точек etcd.
  • prefix — префикс ключа, используемый для поиска конфигурации. Tarantool выполняет поиск ключей по следующему пути: <prefix>/config/*. Обратите внимание, что <prefix> должен начинаться с косой черты (/).
  • username и password — учетные данные для аутентификации.
  • http.request.timeout — тайм-аут запроса к серверу etcd.

Полный пример доступен здесь: config_etcd.

Запуск кластера

Для запуска экземпляров Tarantool рекомендуется использовать утилиту tt. Подробнее об этом см. в разделе Запуск и остановка экземпляров.

Также для запуска экземпляра Tarantool можно использовать команду tarantool. В этом случае можно обойтись без создания локальной конфигурации и указать параметры подключения с помощью следующих переменных окружения:

  • Хранилище на базе Tarantool: TT_CONFIG_STORAGE_ENDPOINTS и TT_CONFIG_STORAGE_PREFIX.
  • Хранилище на базе etcd: TT_CONFIG_ETCD_ENDPOINTS и TT_CONFIG_ETCD_PREFIX.

В примере ниже показано, как задать параметры подключения к etcd и запустить экземпляры кластера с помощью команды tarantool:

$ export TT_CONFIG_ETCD_ENDPOINTS=http://localhost:2379$ export TT_CONFIG_ETCD_PREFIX=/myapp$ tarantool --name instance001$ tarantool --name instance002$ tarantool --name instance003

Перезагрузка конфигурации

По умолчанию Tarantool отслеживает изменения ключей с указанным префиксом и автоматически перезагружает измененную конфигурацию кластера. При необходимости можно задать для параметра config.reload значение manual, чтобы отключить автоматическую перезагрузку конфигурации:

config:  reload: 'manual'  etcd:    # ...

В этом случае перезагрузить конфигурацию можно в административной консоли или в коде приложения с помощью функции reload(), предоставляемой модулем config:

require('config'):reload()