Основные задачи | Tcs

Версия:

1.x

Основные задачи

Первичная установка системы

Установка TCS в производственном окружении производится с использованием инсталлятора Ansible Tarantool Enterprise (ATE).

Примечание

В тестовом окружении также возможна установка TCS без использования ATE.

Возможны 2 вида установки системы TCS с использованием ATE:

Пример кластера TCS, развернутого на нескольких серверах:

Пример развернутого кластера TCS

Обновление версии системы

Внимание

Версия 1.0.2 несовместима с версией 1.1.0. Перед установкой версии 1.1.0 требуется очистить базу данных.

Чтобы обновить TCS 1.0.2 до версии 1.1.0, нужно выполнить следующие действия:

  1. Убедиться, что в файле инвентаря TCS соблюдается формула для значений параметров lease_interval > probe_interval + renew_interval. При необходимости изменений – загрузить обновленную конфигурацию в etcd.

  2. Остановить все экземпляры Storage 1.0.2 и полностью очистить среду (в ATE плейбук uninstall.yml).

  3. Развернуть все экземпляры Storage 1.1.0. (в ATE плейбук tcs/install.yml).

  4. С помощью SQL-запросов загрузить схему данных и сами данные.

Откат системы к предыдущей версии

Внимание

Версия 1.0.2 несовместима с версией 1.1.0. Перед установкой версии 1.0.2 требуется очистить базу данных.

Чтобы откатить TCS 1.1.0. обратно к версии 1.0.2, нужно выполнить следующие действия:

  1. Остановить все экземпляры Storage 1.1.0 и полностью очистить среду (в ATE плейбук uninstall.yml).

  2. При откате кластера, работавшего в режиме шардирования, выполнить также команду etcdctl del --prefix "/tarantool/{prefix}/sharding", где {prefix} – это префикс для конфигурации TCS в etcd.

  3. Развернуть все экземпляры Storage 1.0.2 (в ATE плейбук tcs/install.yml).

  4. С помощью SQL-запросов загрузить схему данных и сами данные.

Обновление системы без простоя

Внимание

Данная процедура применима только в режиме проксирования. Номера обех версий TCS должны быть не меньше 1.1.0.

Чтобы обновить TCS без простоя («по плечам»), нужно выполнить следующие действия:

  1. Загрузить обновленную конфигурацию для новой версии TCS в etcd.

  2. Запустить обновление по плечам (в ATE плейбук continuous_update.yml).

Откат системы без простоя

Внимание

Данная процедура применима только в режиме проксирования. Номера обех версий TCS должны быть не меньше 1.1.0.

Чтобы откатить TCS к более младшей версии без простоя («по плечам»), нужно выполнить следующие действия:

  1. Загрузить конфигурацию для старой версии TCS в etcd.

  2. В плейбуке ATE continuous_update.yml указать целевую версию (старую).

  3. Запустить откат системы по плечам (в ATE плейбук continuous_update.yml).

Создание резервной копии

Процедура создания резервной копии находится в проработке.

Восстановление из резервной копии

Процедура восстановления из резервной копии находится в проработке.

Масштабирование системы

Добавление экземпляров Scheduler

Добавление новых экземпляров Scheduler может понадобиться, когда системе не хватает пропускной способности для маршрутизации или мощности для SQL-вычислений.

Важно

Добавление новых экземпляров возможно только в шардированном режиме работы кластера.

Для добавления нового экземпляра Scheduler с помощью инсталлятора Ansible Tarantool Enterprise:

  1. Добавьте экземпляры Scheduler в инвентарь TCS.

  2. Запустите плейбук tcs/install.yml, указав в переменной tarantool_shared_hosts список имен экземпляров, которые нужно установить и запустить. При необходимости задайте параметр limit.

    См. Пример вызова плейбука tcs/install.yml для добавления экземпляра.

  3. (Обязательно!) Перезагрузите конфигурацию кластера в etcd, чтобы восстановить конфигурацию запущенных ранее экземпляров Scheduler и Storage.

Добавление экземпляров Storage

Производится аналогично добавлению экземпляров Scheduler.

Добавление экземпляров Coordinator

Производится аналогично добавлению экземпляров Scheduler, но без обязательной перезагрузки конфигурации в etcd.

Настройка шардирования

См. Настройка кластера в режиме шардирования.

Управление кластером

Управление кластером с помощью ATE

Инсталлятор Ansible Tarantool Enterprise предоставляет следующие сценарии по управлению кластером (см. соответствующие разделы в документации по инсталлятору Ansible Tarantool Enterprise):

Управление кластером с помощью TCM

Tarantool Cluster Manager – это административная панель для настройки и отслеживания кластеров, а также управления ими. Основные задачи, доступные через веб-интерфейс TCM:

  • Создание/остановка кластера и изменение его конфигурации:

    • Переключение лидера в наборах реплик;

    • Изменение некоторых других настроек кластера, с простоем и в runtime;

    • Исключение экземпляра из кластера.

  • Управление пользователями и ролями в кластере:

    • Управление пользователями Tarantool;

    • Изменение паролей пользователей Tarantool Enterprise.

  • Контролируемое аварийное переключение узлов кластера;

  • Восстановление и пересоздание экземпляров;

  • Проверка работоспособности кластера;

  • Просмотр журналов аудита.

См. документацию по Tarantool Cluster Manager.

Удаление системы

  1. Запустите плейбук uninstall.yml, указав следующие параметры:

    • tags и значение tarantool

    • limit и список имен всех экземпляров кластера

    См. Пример вызова плейбука uninstall.yml для удаления кластера.

  2. При удалении кластера, работавшего в режиме шардирования, выполните также команду etcdctl del --prefix "/tarantool/{prefix}/sharding", где {prefix} – это префикс для конфигурации TCS в etcd.

См. подробнее раздел Удаление кластера Tarantool в документации по инсталлятору Ansible Tarantool Enterprise.

Изменение схемы данных

Схема данных задается с помощью команд SQL DDL.

Привязка экземпляра Tarantool к NUMA-зоне

Чтобы привязать экземпляры Tarantool к узлам NUMA, нужно отредактировать конфигурационные файлы сервисов SystemD.

Полная инструкция

  1. Зайдите на сервер TCS с экземплярами Storage по SSH.

  2. Переключитесь на пользователя tarantool:

    sudo su tarantool
    
  3. Установите переменную окружения для работы с SystemD в userspace:

    export XDG_RUNTIME_DIR=/run/user/$(id -u)
    

    Объяснение: Это нужно для выполнения команд утилит SystemD (systemctl, journalctl) в userspace.

    Рекомендация: Чтобы не выполнять экспорт каждый раз, можно добавить команду export XDG_RUNTIME_DIR=/run/user/$(id -u) в файл $HOME/.profile.

  4. Посмотрите список сервисов пользователя tarantool:

    systemctl --user list-units --type=service
    

    Пример вывода:

    tarantool@tcs-testing-1:~$ systemctl --user list-units --type=service
      UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
      tarantool-cluster-manager.service  loaded active running Tarantool Cluster Manager
      tcs-scheduler@scheduler-01.service loaded active running Tarantool Column Store scheduler API service
    ● tcs@i-01.service                   loaded failed failed  Tarantool application tcs@i-01 #сервис инстанса стораджа
    

    В примере выше:

    • tcs@i-01.service – полное название сервиса для экземпляра с именем i-01;

    • tcs – название приложения Tarantool.

    В директории $HOME/.config/systemd/user находятся:

    • Шаблонный сервис для всех экзепляров tcs@.service;

    • Символическая ссылка на шаблонный сервис tcs@i-01.service.

  5. Откройте шаблонный сервис для экземпляров Storage:

    vim $HOME/.config/systemd/user/tcs@.service
    
  6. В шаблонном сервисе посмотрите путь до исполняемого файла tarantool:

    [Service]
    Type=simple
    ExecStart="/app/tarantool/tcs/bin/tcs.%i/tarantool --name %i" # запоминаем этот путь
    Restart=on-failure RestartSec=2
    

    Объяснение:

    При автоматическом развертывании TCS исполняемые файлы размещаются в разных местах в зависимости от:

    • указанных в настройках путей для размещения файлов;

    • названия приложения (app_name);

    • других параметров конфигурации.

    Вместо того чтобы пытаться угадать правильный путь к исполняемому файлу Tarantool при настройке службы (в параметре ExecStart), лучше сразу посмотреть точное расположение файла в конфигурационном файле службы vim ~/.config/systemd/user/tcs@.service.

  7. Выполните команду systemctl --user edit название_сервиса_storage для того, чтобы начать редактирование (во временном буфере) файла с перезаписью опций в шаблонном сервисе:

    systemctl --user edit tcs@i-01
    
  8. Добавьте перезапись опции ExecStart из секции [Service]. В новом ExecStart указан запуск процесса через утилиту numactl с нужными опциями:

    [Service]
    ExecStart=
    ExecStart=numactl --cpunodebind=0 --membind=0 /app/tarantool/tcs/bin/tcs.%i/tarantool --name %i
    

    ВАЖНО: обязательно нужно указать сначала пустой ExecStart, чтобы в дальнейшем не возникло ошибки при применении новой конфигурации.

  9. Сохраните файл.

    Объяснение: Это действие создаст директорию $HOME/.config/systemd/user/название_сервиса.d и файл override.conf в этой директории.

    Рекомендация: Чтобы в качестве редактора использовался vim (если он уже не используется по умолчанию), можно установить переменную окружения SYSTEMD_EDITOR=vim.

  10. Выполните команду для перезагрузки конфигурации systemD:

systemctl --user daemon-reload
  1. Перезапустите экземпляр:

systemctl --user restart tcs@i-01

Примечание: Перезапустить экземпляр можно также через ATE.

  1. После перезапуска можно проверить привязку к NUMA-зоне, найдя ее в файле /proc/${PID}/numa_maps.

Краткая инструкция

# Зайти под пользователем tarantool:
sudo su tarantool
# Установить переменную для работы с SystemD в userspace:
export XDG_RUNTIME_DIR=/run/user/$(id -u)
# Посмотреть, какие есть сервисы:
systemctl --user list-units --type=service
# Запустить редактирование интересующего сервиса:
systemctl --user edit название_интересующего_сервиса
# Добавить в файл:
[Service]
ExecStart=
ExecStart=numactl --cpunodebind=0 --membind=0 /app/tarantool/tcs/bin/tcs.%i/tarantool --name %i
# Перезагрузить конфигурацию systemD:
systemctl --user daemon-reload
# Перезапустить экземпляр
systemctl --user restart название_сервиса

Настройка IP-адресов узлов в кластере TCS

Для определения IP-адреса узла в кластере TCS используются следующие параметры:

  • протокол Tarantool iproto:

    • (Обязательно) iproto.listen.uri – для входящих запросов (общего назначения).

    • iproto.advertise.client – для взаимодействия с клиентами.

    Пример:

    iproto:
      listen:
        - uri: 0.0.0.0:3331
      advertise:
        client: 127.0.0.0:3331
    
  • протокол HTTP:

    • (Обязательно) http.listen – для входящих запросов (общего назначения).

    • http.advertise.client – для взаимодействия с клиентами.

    • http.advertise.sharding.uri – для взаимодействия между экземплярами Scheduler и Storage.

    Пример:

    roles_cfg:
      tcs_roles/storage:
        http:
          listen: 0.0.0.0:7777
          advertise:
            client:
              127.0.0.1:7777
            sharding:
              uri: 127.0.0.1:7777
    
  • протокол Apache Arrow Flight:

    Пример:

    roles_cfg:
      tcs_roles/storage:
        arrow_flight_sql:
          listen: 0.0.0.0:50051
          advertise:
            client: 127.0.0.1:50051
            sharding:
              uri: 127.0.0.1:50051
    

Эти настройки нужны в любом режиме работы кластера.

Проверка топологии и номера ревизии конфигурации

С помощью следующего SQL-запроса к экземпляру Scheduler можно получить информацию о топологии и номерах ревизии конфигурации на всех экземплярах Storage в кластере TCS:

SELECT * FROM tcs_routing_map()

Для каждого экземпляра Storage в кластере возвращается:

  • имя набора реплик (поле shard_name);

  • имя экземпляра (поле instance_name);

  • активен ли данный экземпляр (поле is_enabled);

  • режим чтения/записи экземпляра (поле mode);

  • номер последней примененной ревизии конфигурации (поле meta_revision).

Информация об экземплярах Scheduler и Coordinator не предоставляется.

SQL-запрос можно делать к любому экземпляру Scheduler в кластере.

Пример ответа:

{
    "shard_name": "storages-replicaset1",
    "instance_name": "storage2",
    "is_enabled": true,
    "mode": "RO",
    "meta_revision": 0
},
{
    "shard_name": "storages-replicaset1",
    "instance_name": "storage1",
    "is_enabled": true,
    "mode": "RW",
    "meta_revision": 0
}

Установка системы в тестовой среде

Установка TCS в тестовой среде может производиться как с использованием инсталлятора Ansible Tarantool Enterprise (аналогично установке в производственной среде, так и вручную. Ниже приведены инструкции по ручной установке.

В пакет поставки TCS включены следующие файлы конфигурации:

  • Файл конфигурации config.yml описывает конфигурацию для кластера TCS (набор реплик из 2 экземпляров).

  • Файл конфигурации instances.yml указывает, какие именно экземпляры должны быть запущены на текущем хосте.

Возможны 2 вида установки кластера TCS:

Также кластер TCS можно разворачивать как на одном сервере (по умолчанию), так и на нескольких серверах.

Установка кластера с локальным файлом конфигурации

  1. Распаковать архив с поставкой версии TCS 1.0 и перейти в распакованную директорию.

  2. Убедиться, что в файле instances.yml указаны те экземпляры, которые нужно развернуть на текущем сервере.

  3. Запустить команду ./tt start, чтобы развернуть кластер.

  4. Запустить команду ./tt status для проверки того, что кластер поднят.

Пример результата успешной установки:

/tt start
• Starting an instance [tarantool_column_store: instance1]...
• Starting an instance [tarantool_column_store: instance2]...

/tt status
INSTANCE                           STATUS   PID     MODE  CONFIG  BOX      UPSTREAM
tarantool_column_store: instance1  RUNNING  319481  RW    ready   running  --
tarantool column store: instance2  RUNNING  319482  RO    ready   running  --

Установка кластера с файлом конфигурации в etcd

  1. Распаковать архив с поставкой версии TCS 1.0 и перейти в распакованную директорию.

  2. В файле config.yml прописать, откуда в etcd брать конфигурацию.

    Например:

    config:
      etcd:
        prefix: /tcs
        endpoints:
        - http://localhost:2379
        http:
          request:
            timeout: 1
    
  3. Загрузить файл конфигурации в etcd.

    Например:

    mv config.yml remote.yml
    ./tt cluster publish http://localhost:2379/tcs remote.yml
    
  4. Убедиться, что в файле instances.yml указаны те экземпляры, которые нужно развернуть на текущем сервере.

  5. Запустить команду ./tt start, чтобы развернуть кластер.

  6. Запустить команду ./tt status для проверки того, что кластер поднят.

Установка кластера на нескольких серверах

На каждом сервере нужно выполнить установку нужного типа (с локальным файлом конфигурации или хранящимся в etcd). При этом:

  • Файлы конфигурации TCS на серверах должны совпадать и содержать настройки для всех экземпляров TCS на всех серверах.

  • В файле instances.yml для каждого сервера нужно указать те экземпляры TCS, которые нужно развернуть на данном сервере.

Например:

  • instances.yml на сервере А:

    instance1:
    instance2:
    
  • instances.yml на сервере B:

    instance3:
    instance4:
    

Остановка кластера в тестовой среде

  1. Выполните команду ./tt stop -y для остановки кластера.

  2. (Необязательно) Выполните команду ./tt clean для зачистки журналов и данных.

Обновление системы в тестовой среде

  1. Остановить старый кластер, чтобы он не помешал поднять новую версию, если экземпляры старой и новой версии привязаны к одинаковым портам на одном сервере. Журналы и данные можно не очищать.

  2. Установить новую версию системы, не забыв обновить файл конфигурации.

Нашли ответ на свой вопрос?
Обратная связь