Настройка хранилища конфигурации и состояния TCF¶
Перед запуском TCF необходимо настроить централизованное хранилище, в котором будут храниться конфигурация кластеров и состояние кластеров активный-пассивный. TCF поддерживает два типа такого хранилища: хранилище на основе Tarantool и внешнее хранилище etcd. В этом разделе описано, как подготовить и настроить оба типа хранилища.
В примерах, приведённых в этом разделе и далее (при настройке кластеров и межкластерных репликаторов данных), используется связка Tarantool DB (TDB) версии 2.2.0+ и TCF.
Перед настройкой и запуском любого из типов хранилища конфигурации у пользователя уже должны быть распакованы архивы с TCF и TDB версии 2.2.0 или выше. Для этого необходимо заранее выполнить шаги из соответствующего раздела руководства по установке вручную.
Распакованные архивы формируют директории. По умолчанию распаковка дистрибутива TCF выполняется в текущую директорию, там будут содержаться все необходимые компоненты и конфигурационные шаблоны.
Настройка хранилища конфигурации на основе Tarantool¶
Хранилище конфигурации на основе Tarantool – это хранилище, состоящее из экземпляров хранилища Tarantool.
Чтобы настроить хранилище конфигурации:
- Перейдите в интерфейс командной строки, создайте директорию - config-envдля хранилища конфигурации TCF и создайте в ней новое окружение для консольной утилиты tt CLI. Директория- config-envдолжна быть создана в домашней директории на одном уровне с директорией- tarantooldb.
$ mkdir config-env
$ cd config-env/
$ tt init
- Перейдите в директорию - instances.enabled, создайте внутри директорию- configstorage, а затем перейдите в нее.
$ cd instances.enabled/
$ mkdir configstorage
$ cd configstorage/
- В директории - configstorageподготовьте файл- source.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     --       
Примечание
- Префикс кластера – указывается в конфигурации самого кластера. Он определяет, под какими ключами в хранилище будут храниться данные именно этого кластера. - Каждому кластеру требуется свой уникальный префикс, иначе возможна перезапись данных и конфликты при одновременной работе нескольких кластеров. Подробнее про настройку префикса кластера читайте в разделе справочника storage_params. 
- Префикс стенда TCF – используется компонентами TCF (репликаторы и TCM) для хранения информации о состоянии всего стенда. - Один стенд состоит из двух кластеров и репликаторов между ними. - Этот префикс должен быть одинаковым для всех компонентов одного стенда (в worker-конфигурации кластеров, у Destination и т. д.). - Если вы планируете запускать несколько независимых стендов TCF, каждому стенду необходимо задать уникальный префикс. - Подробнее про настройку префикса стенда TCF читайте в разделе справочника destination.storage. 
Настройка хранилища конфигурации etcd¶
TCF позволяет хранить конфигурацию кластера с помощью хранилища etcd.
etcd – это распределенное хранилище ключ-значение для любого типа данных, используемых в распределенных системах.
В этом разделе описано, как настроить и запустить etcd. Подробнее про etcd читайте в официальной документации.
Запуск и первичная настройка¶
Чтобы использовать etcd в качестве хранилища конфигурации, необходимо настроить пользователей,
роли и разрешения с помощью утилиты etcdctl. Подробную информацию можно найти в официальной документации etcd.
В примере ниже создан пользователь, который имеет доступ на чтение и запись к конфигурациям, хранящимся по префиксу кластера /myapp/.
Примечание
- Префикс кластера – указывается в конфигурации самого кластера. Он определяет, под какими ключами в хранилище будут храниться данные именно этого кластера. - Каждому кластеру требуется свой уникальный префикс, иначе возможна перезапись данных и конфликты при одновременной работе нескольких кластеров. Подробнее про настройку префикса кластера читайте в разделе справочника 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
Примечание
После активации авторизации все клиенты, включая 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.