Настройка хранилища конфигурации и состояния TCF | Clusters_Federation
Руководство пользователя Настройка хранилища конфигурации и состояния TCF

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

Перед запуском TCF необходимо настроить централизованное хранилище, в котором будут храниться конфигурация кластеров и состояние кластеров активный-пассивный. TCF поддерживает два типа такого хранилища: хранилище на основе Tarantool и внешнее хранилище etcd. В этом разделе описано, как подготовить и настроить оба типа хранилища.

В примерах, приведённых в этом разделе и далее (при настройке кластеров и межкластерных репликаторов данных), используется связка Tarantool DB (TDB) версии 2.2.0+ и TCF.

Перед настройкой и запуском любого из типов хранилища конфигурации у пользователя уже должны быть распакованы архивы с TCF и TDB версии 2.2.0 или выше. Для этого необходимо заранее выполнить шаги из соответствующего раздела руководства по установке вручную.

Распакованные архивы формируют директории, в частности, директорию tcf-<tcf-version> – это корневая папка распакованного дистрибутива TCF, содержащая все необходимые компоненты и конфигурационные шаблоны.

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

Хранилище конфигурации на основе Tarantool – это хранилище, состоящее из экземпляров хранилища Tarantool.

Чтобы настроить хранилище конфигурации:

  1. Перейдите в интерфейс командной строки, создайте директорию config-env для хранилища конфигурации TCF и создайте в ней новое окружение для консольной утилиты tt CLI. Директория config-env должна быть создана в домашней директории на одном уровне с директорией tcf-<tcf-version>.

$ mkdir config-env
$ cd config-env/
$ tt init
  1. Перейдите в директорию instances.enabled, создайте внутри директорию configstorage, а затем перейдите в нее.

$ cd instances.enabled/
$ mkdir configstorage
$ cd configstorage/
  1. В директории 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]
  1. В директории configstorage подготовьте файл instances.yaml, содержащий список узлов (экземпляров хранилища). Для примера конфигурации выше список будет таким:

instance001:
instance002:
instance003:
  1. Запустите настроенные узлы хранилища конфигурации:

tt start configstorage

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

• Starting an instance [configstorage:instance001]...
• Starting an instance [configstorage:instance002]...
• Starting an instance [configstorage:instance003]...
  1. Проверьте состояние запущенных узлов 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.

  1. Определите, какой из экземпляров, запущенных ранее, является 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`
  1. Запустите 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
  1. Проверьте, работает ли 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
  1. Создайте администратора (root) для управления etcd:

etcdctl user add root:topsecret
  1. Создайте роль для доступа к конфигурациям:

etcdctl role add myapp_config_manager
  1. Назначьте разрешения этой роли.

Доступ на чтение и запись ко всем ключам, начинающимся с /myapp/:

etcdctl role grant-permission myapp_config_manager --prefix=true readwrite /myapp/
  1. Создайте пользователя, который будет аутентифицироваться при доступе к etcd, если включена авторизация:

etcdctl user add sampleuser:123456
  1. Назначьте пользователю соответствующую роль:

etcdctl user grant-role sampleuser myapp_config_manager
  1. Включите механизм авторизации в 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.

Found what you were looking for?
Feedback