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

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

В этом разделе описано, как настроить хранилище конфигурации, опубликовать конфигурацию кластера в этом хранилище и использовать ее для всех экземпляров кластера.
Настройка хранилища конфигурации
Чтобы набор реплик выполнял роль хранилища конфигурации, используйте
встроенную роль config.storage.
Чтобы настроить хранилище на базе Tarantool, выполните следующие шаги:
-
Определите топологию набора реплик и задайте следующие параметры на уровне набора реплик:
В примере ниже параметр
status_check_intervalзадает интервал проверки статуса (в секундах).
groups:group001:replicasets:replicaset001:roles: [ config.storage ]roles_cfg:config.storage:status_check_interval: 3instances: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'
-
Создайте пользователя и выдайте ему следующие привилегии:
- Права
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
- Задайте для параметра replication.failover значение
election, чтобы включить автоматическое переключение при отказе:
replication:failover: election
- Включите режим транзакций MVCC для обеспечения линеаризуемости операций чтения:
database:use_mvcc_engine: true
Итоговая конфигурация хранилища может выглядеть следующим образом:
credentials:users:sampleuser:password: '123456'privileges:- permissions: [ read, write ]spaces: [ config_storage, config_storage_meta ]- permissions: [ execute ]universe: truereplicator: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: 3instances: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.
Приведенный ниже пример скрипта демонстрирует, как с помощью утилиты
etcdctl создать пользователя с правами на чтение и запись
конфигураций, хранящихся по префиксу /myapp/:
/code_snippets/snippets/centralized_config/etcd_config_storage.sh
Учетные данные этого пользователя необходимо указать при настройке подключения к кластеру etcd.
Публикация конфигурации кластера
Утилита 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 предоставляет 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.
Чтобы опубликовать конфигурацию кластера в etcd с помощью утилиты
etcdctl, используйте команду put:
$ etcdctl put /myapp/config/all < source.yaml
Настройка подключения к хранилищу
Чтобы использовать конфигурацию из централизованного хранилища для кластера, необходимо указать параметры подключения в локальном конфигурационном файле.
Параметры подключения к хранилищу на базе Tarantool указываются в разделе config.storage конфигурационного файла. В примере ниже заданы следующие параметры:
config:storage:endpoints:- uri: '127.0.0.1:4401'login: sampleuserpassword: '123456'- uri: '127.0.0.1:4402'login: sampleuserpassword: '123456'- uri: '127.0.0.1:4403'login: sampleuserpassword: '123456'prefix: /myapptimeout: 3reconnect_after: 5
endpoints— список эндпоинтов хранилища конфигурации.prefix— префикс ключа, используемый для поиска конфигурации. Tarantool выполняет поиск ключей по следующему пути:<prefix>/config/*. Обратите внимание, что<prefix>должен начинаться со слеша (/).timeout— интервал (в секундах) для проверки статуса хранилища конфигурации.reconnect_after— время ожидания (в секундах) перед повторным подключением к хранилищу конфигурации.
Полный пример доступен здесь: config_storage.
Параметры подключения к etcd указываются в разделе config.etcd конфигурационного файла. В примере ниже заданы следующие параметры:
config:etcd:endpoints:- http://localhost:2379prefix: /myappusername: sampleuserpassword: '123456'http:request:timeout: 3
config:etcd:endpoints:- http://localhost:2379prefix: /myapp
config:etcd:endpoints:- http://localhost:2379prefix: /myappusername: sampleuserpassword: '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()