Настройка хранилища конфигурации и состояния TCF¶
Перед запуском TCF необходимо настроить централизованное хранилище, в котором будут храниться конфигурация кластеров и состояние кластеров активный-пассивный. TCF поддерживает два типа такого хранилища: хранилище на основе Tarantool и внешнее хранилище etcd. В этом разделе описано, как подготовить и настроить оба типа хранилища.
В примерах, приведённых в этом разделе и далее (при настройке кластеров и межкластерных репликаторов данных), используется связка Tarantool DB (TDB) версии 2.2.0+ и TCF.
Перед настройкой и запуском любого из типов хранилища конфигурации у пользователя уже должны быть распакованы архивы с TCF и TDB версии 2.2.0 или выше. Для этого необходимо заранее выполнить шаги из соответствующего раздела руководства по установке вручную.
Распакованные архивы формируют директории, в частности, директорию tcf-<tcf-version>
– это корневая папка распакованного дистрибутива TCF, содержащая все необходимые компоненты и конфигурационные шаблоны.
Настройка хранилища конфигурации на основе Tarantool¶
Хранилище конфигурации на основе Tarantool – это хранилище, состоящее из экземпляров хранилища Tarantool.
Чтобы настроить хранилище конфигурации:
Перейдите в интерфейс командной строки, создайте директорию
config-env
для хранилища конфигурации TCF и создайте в ней новое окружение для консольной утилиты tt CLI. Директорияconfig-env
должна быть создана в домашней директории на одном уровне с директориейtcf-<tcf-version>
.
$ mkdir config-env
$ cd config-env/
$ tt init
Перейдите в директорию
instances.enabled
, создайте внутри директориюconfigstorage
, а затем перейдите в нее.
$ cd instances.enabled/
$ mkdir configstorage
$ cd configstorage/
В директории
configstorage
подготовьте файлconfig.yaml
с конфигурацией хранилища конфигурации на основе Tarantool. Пример конфигурации для набора реплик с 3 экземплярами хранилища, экземпляры в этой конфигурации принимают входящие запросы на порты 3301–3303:
replication:
failover: election
timeout: 10
synchro_timeout: 10
iproto:
advertise:
peer:
login: replicator
credentials:
users:
replicator:
password: topsecret
roles: [replication]
dbadmin:
password: secret
roles: [super]
tcm_config_storage:
password: tcm_config_storage_password
privileges:
- permissions: [execute]
universe: true
- permissions: [read, write]
spaces: [config_storage, config_storage_meta]
tarantool_config_storage:
password: tarantool_config_storage_password
privileges:
- permissions: [execute]
universe: true
- permissions: [read, write]
spaces: [config_storage, config_storage_meta]
database:
use_mvcc_engine: true
groups:
storages:
replicasets:
replicaset001:
roles: [config.storage]
instances:
instance001:
iproto:
listen:
- uri: 127.0.0.1:3301
advertise:
client: 127.0.0.1:3301
instance002:
iproto:
listen:
- uri: 127.0.0.1:3302
advertise:
client: 127.0.0.1:3302
instance003:
iproto:
listen:
- uri: 127.0.0.1:3303
advertise:
client: 127.0.0.1:3303
В файле конфигурации в секции credentials.users
заданы следующие пользователи:
replicator
– пользователь для соединения узлов хранилища конфигурации друг с другом;dbadmin
– администратор TCF;tcm_config_storage
– пользователь для подключения TCM к узлам хранилища конфигурации;tarantool_config_storage
– пользователь для подключения экземпляров кластера TCF к узлам хранилища конфигурации.
Для работы набора реплик replicaset001
в качестве хранилища конфигурации в конфигурационном файле задана следующая роль:
roles: [config.storage]
В директории
configstorage
подготовьте файлinstances.yaml
, содержащий список узлов (экземпляров хранилища). Для примера конфигурации выше список будет таким:
instance001:
instance002:
instance003:
Запустите настроенные узлы хранилища конфигурации:
tt start configstorage
Вывод работы команды должен выглядеть следующим образом:
• Starting an instance [configstorage:instance001]...
• Starting an instance [configstorage:instance002]...
• Starting an instance [configstorage:instance003]...
Проверьте состояние запущенных узлов c помощью tt:
tt status configstorage
Вывод работы команды может выглядеть следующим образом:
INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM
configstorage:instance001 RUNNING 269163 RO ready running --
configstorage:instance002 RUNNING 269164 RO ready running --
configstorage:instance003 RUNNING 269165 RW ready running --
Указанные параметры для каждого узла должны иметь следующие значения:
параметр
STATUS
должен иметь значениеRUNNING
;параметр
CONFIG
должен иметь значениеready
;параметры
BOX
должен иметь значениеrunning
;параметр
MODE
одного из узлов должен иметь значениеRW
.
Определите, какой из экземпляров, запущенных ранее, является master-узлом. Это можно определить, выполнив команду tt status. В примере экземпляр
instance003
работает в режимеRW
– чтения и записи (см. параметр узловMODE
). Это означает, чтоinstance003
является master-узлом.
tt status configstorage
INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM
configstorage:instance001 RUNNING 269163 RO ready running --
configstorage:instance002 RUNNING 269164 RO ready running --
configstorage:instance003 RUNNING 269165 RW ready running --
Note
Префикс кластера – указывается в конфигурации самого кластера. Он определяет, под какими ключами в хранилище будут храниться данные именно этого кластера.
Каждому кластеру требуется свой уникальный префикс, иначе возможна перезапись данных и конфликты при одновременной работе нескольких кластеров. Подробнее про настройку префикса кластера читайте в разделе справочника storage_params.
Префикс стенда TCF – используется компонентами TCF (репликаторы и TCM) для хранения информации о состоянии всего стенда.
Один стенд состоит из двух кластеров и репликаторов между ними.
Этот префикс должен быть одинаковым для всех компонентов одного стенда (в worker-конфигурации кластеров, у Destination и т. д.).
Если вы планируете запускать несколько независимых стендов TCF, каждому стенду необходимо задать уникальный префикс.
Подробнее про настройку префикса стенда TCF читайте в разделе справочника destination.storage.
Настройка хранилища конфигурации etcd¶
TCF позволяет хранить конфигурацию кластера с помощью хранилища etcd.
etcd – это распределенное хранилище ключ-значение для любого типа данных, используемых в распределенных системах.
В этом разделе описано, как настроить и запустить etcd. Подробнее про etcd читайте в официальной документации.
Запуск и первичная настройка¶
Чтобы использовать etcd в качестве хранилища конфигурации, необходимо настроить пользователей,
роли и разрешения с помощью утилиты etcdctl
. Подробную информацию можно найти в официальной документации etcd.
В примере ниже создан пользователь, который имеет доступ на чтение и запись к конфигурациям, хранящимся по префиксу кластера /myapp/
.
Note
Префикс кластера – указывается в конфигурации самого кластера. Он определяет, под какими ключами в хранилище будут храниться данные именно этого кластера.
Каждому кластеру требуется свой уникальный префикс, иначе возможна перезапись данных и конфликты при одновременной работе нескольких кластеров. Подробнее про настройку префикса кластера читайте в разделе справочника storage_params.
Префикс стенда TCF – используется компонентами TCF (репликаторы и TCM) для хранения информации о состоянии всего стенда.
Один стенд состоит из двух кластеров и репликаторов между ними.
Этот префикс должен быть одинаковым для всех компонентов одного стенда (в worker-конфигурации кластеров, у Destination и т. д.).
Если вы планируете запускать несколько независимых стендов TCF, каждому стенду необходимо задать уникальный префикс.
Подробнее про настройку префикса стенда TCF читайте в разделе справочника destination.storage.
Если etcd запущен не на локальной машине или использует нестандартный адрес/порт, укажите адрес и порт в командах через флаг --endpoints
, например:
etcdctl --endpoints=http://192.168.1.100:2379 user add root:topsecret`
Запустите etcd.
Команда для запуска etcd локально:
etcd
Команда для запуска etcd с указанием конфигурации:
etcd --name my-etcd \
--data-dir /tmp/etcd-data \
--listen-client-urls http://localhost:2379 \
--advertise-client-urls http://localhost:2379
Проверьте, работает ли etcd:
etcdctl endpoint health
Пример успешного ответа:
http://localhost:2379 is healthy: successfully committed proposal: took = 1.234ms
Пример неудачного ответа (если etcd не запущен или недоступен):
http://localhost:2379 is unhealthy: failed to commit proposal: context deadline exceeded
или
failed to check the health of endpoint http://localhost:2379 (context deadline exceeded)
Error: unhealthy cluster
Создайте администратора (root) для управления etcd:
etcdctl user add root:topsecret
Создайте роль для доступа к конфигурациям:
etcdctl role add myapp_config_manager
Назначьте разрешения этой роли.
Доступ на чтение и запись ко всем ключам, начинающимся с /myapp/
:
etcdctl role grant-permission myapp_config_manager --prefix=true readwrite /myapp/
Создайте пользователя, который будет аутентифицироваться при доступе к etcd, если включена авторизация:
etcdctl user add sampleuser:123456
Назначьте пользователю соответствующую роль:
etcdctl user grant-role sampleuser myapp_config_manager
Включите механизм авторизации в etcd:
etcdctl auth enable
Note
После активации авторизации все клиенты, включая etcdctl
, обязаны указывать имя пользователя и пароль при доступе к кластеру.
Настройка подключения¶
Подключение к etcd настраивается в секции config.etcd
конфигурации кластеров.
Пример конфигурации:
config:
etcd:
endpoints:
- http://localhost:2379
prefix: /myapp
username: sampleuser
password: '123456'
http:
request:
timeout: 3
Здесь:
endpoints
– список адресов etcd-серверов, к которым подключается приложение;prefix
– префикс ключа, который используется для поиска в конфигурации кластера в хранилище. Tarantool ищет ключи по следующему пути:<prefix>/config/*
. Обратите внимание, что<prefix>
должен начинаться со слэша (/
);username
иpassword
– имя пользователя и пароль для подключения к etcd, если включена авторизация (auth enable
);http.request.timeout
– время ожидания выполнения HTTP-запроса к etcd-серверу в секундах.
Другие доступные параметры для настройки etcd-хранилища см. в разделе справочника storage_params.