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

Версия:

0.x

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

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

Возможны 2 вида установки системы TCS с использованием инсталлятора Ansible Tarantool Enterprise:

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

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

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

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

  1. Убедиться, что в конфигурации TCS не указан параметр index_depth со значением равным 0. Нужно заменить 0 на null (означает, что размер индекса не ограничен) или вообще удалить из конфигурации.

  2. Убедиться, что в файле инвентаря TCS соблюдается формула для значений параметров lease_interval > probe_interval + renew_interval.

  3. При необходимости изменений – загрузить обновленную конфигурацию в etcd.

  4. Остановить все компоненты 0.30.3.

  5. Развернуть все компоненты 0.30.4:

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

    b. Развернуть экземпляры Scheduler (в ATE плейбук install_scheduler.yml).

Если ваша версия ATE меньше, чем 1.14.0, необходимо дополнительно выполнить следующие шаги:

  1. Вручную добавить секцию authentication в конфигурации Scheduler и Storage:

authentication:
    etcd_auth_prefix: "/auth"
    system_user:
       username: tcs
       password: tcs
  1. Вручную добавить пользователя в etcd (в данном случае пользователь с именем «tcs»):

USER_NAME="tcs"
PASSWORD="tcs"
PASSWORD_HASH=`echo -n ${PASSWORD} | sha256sum | awk '{print $1}'`
etcdctl put "/auth/${USER_NAME}" "{\"password_hash\": \"${PASSWORD_HASH}\"}"

Если ваша версия ATE больше или равна 1.14.0,или необходимо дополнительно выполнить следующие шаги:

  1. Вручную добавить пользователя в etcd (в данном случае пользователь с именем «tcs»):

USER_NAME="tcs"
PASSWORD="tcs"
PASSWORD_HASH=`echo -n ${PASSWORD} | sha256sum | awk '{print $1}'`
etcdctl put "/auth/${USER_NAME}" "{\"password_hash\": \"${PASSWORD_HASH}\"}"
  1. Перед запуском ATE добавить в инвентарь Scheduler:

        tcs_additional_config
          authentication:
            etcd_auth_prefix: "/auth"
            system_user:
              username: tcs
              password: tcs
  1. Перезапустить экземпляры Scheduler.

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

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

  1. Остановить все компоненты 0.30.4.

  2. Развернуть все компоненты 0.30.3:

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

    b. Развернуть экземпляры Scheduler (в ATE плейбук install_scheduler.yml).

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

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

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

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

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

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

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

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

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

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

См. документацию по инсталлятору Ansible Tarantool Enterprise, раздел Автоматическое резервирование.

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

См. документацию по инсталлятору Ansible Tarantool Enterprise, раздел Автоматическое восстановление.

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

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

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

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

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

  2. Вызовите метод install_scheduler, чтобы установить и запустить новые экземпляры. При необходимости задайте параметр limit:

       docker run --network host -it --rm \
           -v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
           -v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
           -e SUPER_USER_NAME=${SUPER_USER_NAME} \
           ansible-tarantool-enterprise:latest \
           ansible-playbook -i /ansible/inventories/hosts.yml \
           --extra-vars '{
               "ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
               "super_user":"'${SUPER_USER_NAME}'",
               "tarantool_shared_become_user":"tarantool",
           }' \
           playbooks/tcs/install_scheduler.yml --limit ${LIMIT}
    

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

Примечание

Для настройки шардирования в кластере TCS укажите следующие параметры в конфигурации TCS:

  1. Настройте конфигурацию шардов (наборов реплик, состоящих из экземпляров Storage, между которыми будут распределяться данные).

    Для этого нужно указать следующие параметры:

    • блок параметров для как минимум 2 шардов (раздел groups:aggregators:replicasets, параметры leader и instances);

      • можно использовать 1 шард, если вставка будет происходить через экземпляр Scheduler, используя его ADBC/JDBC интерфейс, в таком случае необходимо указать блок параметров только для этого шарда;

    • общее имя группы для всех шардов (параметр tarantool_group_name в конфигурации каждого экземпляра Storage, который входит в состав шардов).

    Например:

all:
  groups:
    aggregators:
      replicasets:
        tcs_storages_r01:
          leader: tcs-r01-s01
          instances:
             tcs-r01-s01:
             tcs-r01-s02:
        tcs_storages_r02:
          leader: tcs-r02-s01
          instances:
             tcs-r02-s01:
             tcs-r02-s02:

  children:
    aggregators:
      tcs_storages_r01:
        hosts:
          tcs-r01-s01:
          tcs-r01-s02:
        vars:
          replicaset_alias: tcs_storages_r01
          tarantool_group_name: aggregators

      tcs_storages_r02:
        hosts:
          tcs-r02-s01:
          tcs-r02-s02:
        vars:
          replicaset_alias: tcs_storages_r02
          tarantool_group_name: aggregators
  1. Настройте сервис Arrow Flight SQL на всех экземплярах Storage, которые участвуют в шардировании.

    Для этого нужно указать следующие параметры (раздел roles_cfg:tcs:aggregator):

    • параметры соединения в разделе arrow_flight_sql: listen, credentials, session_timeout_secs;

    • параметр arrow_flight_sql_api в разделе features.

    Например:

roles_cfg:
  tcs:
    aggregator:
      features:
        - arrow_flight_sql_api
      arrow_flight_sql:
        listen: 0.0.0.0:50051
        credentials:
          login: tcs
          password: tcs
        session_timeout_secs: 28800

Важно

Если порт listen, указанный при настройке Arrow Flight SQL для экземпляра Storage, был занят любым другим сервисом на момент настройки, то операции с данными, направленные на этот порт, не отработают для этого экземпляра Storage. Для того чтобы убедиться, что порт доступен и подключен, необходимо после настройки проверить журнал экземпляра Storage на наличие ошибки Arrow Flight SQL failed to serve on {addr}: {e} где addr – это порт, на котором пытался подняться интерфейс Arrow Flight SQL, а e – произошедшая ошибка. Отсутствие этой ошибки укажет на то, что соединение Arrow Flight доступно для экземпляра Storage.

  1. Включите поддержку шардирования на всех экземплярах Scheduler, которые есть в кластере TCS.

    Для этого в конфигурации каждого экземпляра Scheduler нужно указать параметр sharding_api в списке features.

    Например:

all:
  groups:
    tcs_scheduler:
      hosts:
        tcs-scheduler-01:
          http_listen: '0.0.0.0:7778'
          with_metrics: true
          config_storage: etcd
          group: aggregators
          etcd:
            prefix: /tcs
            endpoints:
              - 'http://0.0.0.0:2379'
          features:
            - sharding_api

Важно

Параметр sharding_api для экземпляра Scheduler стоит указывать только:

  • Eсли в конфигурации TCS заданы хотя бы 2 шарда;

  • Eсли в конфигурации TCS задан 1 шард, но вставка будет происходить через экземпляр Scheduler, используя его ADBC/JDBC интерфейс.

  1. Укажите ключ шардирования для всех шардируемых таблиц.

    Для этого в разделе groups:aggregators:roles_cfg:app/aggregator_role:tcs:tables нужно для каждой шардируемой таблицы задать раздел sharding с параметрами:

    • method – метод построения ключа (в текущей версии поддерживается только значение hash);

    • column_name – имя колонки для построения ключа шардирования.

    Например:

groups:
  aggregators:
    roles_cfg:
      app/aggregator_role:
        tcs:
          tables:
            tcs.public.attributes:
              sharding:
                method: hash
                column_name: Attribute1
            tcs.public.clients:
              ttl: 9999999
              timestamp: time
              sharding:
                method: hash
                column_name: id

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Внимание

Раздел находится в разработке.

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

Просмотр текущей версии системы

Для просмотра текущей версии TCS отправьте запрос GET на HTTP-адрес /version.

Пример:

GET http://127.0.0.1:7777/version HTTP/1.1

{ "version": "0.23.0-37-g4dde2fcd", "target": "release", "compiler": "rustc 1.81.0 (eeb90cda1 2024-09-04) (gentoo)" }

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

См. раздел Изменение модели в Руководстве пользователя.

Настройка подключения с шифрованием

TCS поддерживает подключение с шифрованием, где все входящие внешние запросы к сервисам осуществляются по HTTPS.

Примечание

Для внутрикластерных запросов (между экземплярами TCS и etcd) подключение с шифрованием не поддерживается.

Настройка подключения по HTTPS производится в конфигурационных файлах для экземпляров Aggregator и Scheduler. Набор параметров у них одинаков:

  • transport — протокол приема входящих сообщений:

    • plain (по умолчанию) – входящие сообщения будут приниматься по HTTP.

    • tls – входящие сообщения будут приниматься по HTTPS. Если указано это значение, то обязательно должны быть указаны tls_cert_file и tls_key_file.

  • tls_cert_file — путь к TLS-сертификату в формате PEM.

  • tls_ca_file — путь к TLS-сертификату удостоверяющего центра в формате PEM (опционально, если не используется самоподписанный сертификат).

  • tls_key_file — путь к приватному ключу от сертификата.

  • tls_ciphers — список шифров для версий TLS до 1.2. Шифры разделяются символом :.

  • tls_ciphersuites — список шифров для TLS 1.3. Шифры разделяются символом :.

Если иные настройки не указаны, то по умолчанию используются рекомендации по настройке TLS на сервере Mozilla Intermediate v5.

Для экземпляров Scheduler эти параметры указываются в самом начале конфигурационного файла, для экземпляров Aggregator – в разделе aggregator каждого экземпляра в instances.yml. См. примеры конфигурации ниже.

Экземпляры Scheduler умеют связываться с экземплярами Aggregator только по HTTP, поэтому, когда в топологии есть такая связь, в конфигурации экземпляров Aggregator должно быть указано transport: plain.

И Aggregator, и Scheduler поддерживают работу с шифрами ГОСТ TLS. Для настройки работы с шифрами ГОСТ требуются следующие настройки:

  • для экземпляров Aggregator – только указать шифры в tls_ciphers или tls_ciphersuites.

  • для экземпляров Scheduler – установить в систему криптографический модуль и подключить его в OpenSSL. Это нужно сделать как на сервере, так и у всех клиентов.

Примеры: конфигурация Aggregator (один экземпляр)

Минимальная конфигурация с самоподписанным сертификатом

tarantool_column_store.s1-1:
  advertise_uri: localhost:3301
  http_port: 8081
  memtx_memory: 2147483648 # 2gb
  log: ''
  aggregator:
    transport: tls
    tls_cert_file: certs/cert.pem
    tls_key_file: certs/key.pem

    features:
      - grpc_api

Конфигурация с сертификатом, выданным CA

tarantool_column_store.s1-1:
  advertise_uri: localhost:3301
  http_port: 8081
  memtx_memory: 2147483648 # 2gb
  log: ''
  aggregator:
    transport: tls
    tls_cert_file: certs/cert.pem
    tls_ca_file: certs/ca.pem
    tls_key_file: certs/key.pem

    features:
      - grpc_api

Конфигурация с шифрами ГОСТ

tarantool_column_store.s1-1:
  advertise_uri: localhost:3301
  http_port: 8081
  memtx_memory: 2147483648 # 2gb
  log: ''
  aggregator:
    transport: tls
    tls_cert_file: certs/cert.pem
    tls_key_file: certs/key.pem
    tls_ciphers: 'GOST2012-MAGMA-MAGMAOMAC:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:LEGACY-GOST2012-GOST8912-GOST8912:IANA-GOST2012-GOST8912-GOST8912:GOST2001-GOST89-GOST89'
    tls_ciphersuites: ''

    features:
      - grpc_api

Примеры: конфигурация Scheduler

Минимальная конфигурация с самоподписанным сертификатом

listen: 0.0.0.0:7777
transport: tls
tls_cert_file: certs/cert.pem
tls_key_file: certs/key.pem

nodes:
  - admin_iproto_endpoint: master:3301
    admin_http_endpoint: master:8081
    api_http_endpoint: master:7777

Конфигурация с сертификатом, выданным CA

listen: 0.0.0.0:7777
transport: tls
tls_cert_file: certs/cert.pem
tls_ca_file: certs/ca.pem
tls_key_file: certs/key.pem

nodes:
  - admin_iproto_endpoint: master:3301
    admin_http_endpoint: master:8081
    api_http_endpoint: master:7777

Конфигурация с шифрами ГОСТ

listen: 0.0.0.0:7777
transport: tls
tls_cert_file: certs/cert.pem
tls_key_file: certs/key.pem
tls_ciphers: 'GOST2012-MAGMA-MAGMAOMAC:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:LEGACY-GOST2012-GOST8912-GOST8912:IANA-GOST2012-GOST8912-GOST8912:GOST2001-GOST89-GOST89'
tls_ciphersuites: ''

nodes:
  - admin_iproto_endpoint: master:3301
    admin_http_endpoint: master:8081
    api_http_endpoint: master:7777

Поддержка драйверов JDBC/ADBC

По умолчанию поддержка драйверов JDBC/ADBC в TCS отключена. Ее можно включить отдельно для экземпляров Storage и Scheduler.

Настройка поддержки драйверов JDBC/ADBC для экземпляра Storage

Для того чтобы включить поддержку драйверов JDBC/ADBC для экземпляров Storage, в конфигурации TCS нужно указать следущие параметры для каждого экземпляра:

  • Параметр arrow_flight_sql_api в разделе features (groups/aggregators/replicasets/replicaset<N>/instances/instance<N>/roles_cfg/tcs/aggregator/features). По умолчанию: не задан.

  • Параметры соединения в разделе arrow_flight_sql (groups/aggregators/replicasets/replicaset<N>/instances/instance<N>/roles_cfg/tcs/aggregator/arrow_flight_sql):

    • listen – номер порта. По умолчанию: 50051.

    • (обязательно) credentials – логин и пароль (параметры login и password).

    • session_timeout_secs – максимальная длительность сессии (в секундах). По умолчанию: 28800 (8 часов).

Примечание

Если экземпляры запущены на одном хосте, то для них нужно явно указать разные номера портов в параметре listen.

Пример:

groups:
  aggregators:
    replicasets:
      replicaset1:
        replication:
          failover: manual
        leader: instance1
        instances:
          instance1:
            roles_cfg:
              tcs:
                aggregator:
                  http_listen: 0.0.0.0:7776
                  http_listen_streaming: 0.0.0.0:8776
                  features:
                    - arrow_flight_sql_api
                  arrow_flight_sql:
                    listen: 0.0.0.0:50052
                    credentials:
                      login: tcs
                      password: tcs
                    session_timeout_secs: 28800
          instance2:
            roles_cfg:
              tcs:
                aggregator:
                  http_listen: 0.0.0.0:7777
                  http_listen_streaming: 0.0.0.0:8777
                  features:
                    - arrow_flight_sql_api
                  arrow_flight_sql:
                    listen: 0.0.0.0:50053
                    credentials:
                      login: tcs
                      password: tcs
                    session_timeout_secs: 28800

Для обоих экземпляров Storage в replicaset1 указаны:

  • параметр arrow_flight_sql_api;

  • разные номера портов в listen, поскольку экземпляры запущены на одном хосте.

Настройка поддержки драйверов JDBC/ADBC для экземпляра Scheduler

Поддержка драйверов JDBC/ADBC для экземпляров Scheduler доступна только в режиме шардированной работы, даже если в конфигурации кластера задан только 1 шард.

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

features:
  - sharding_api

Подробнее о переводе Scheduler в шардированный режим работы см. в разделе Настройка шардирования.

В настройках экземпляра Scheduler нужно включить поддержку arrow_flight_sql_api:

arrow_flight_sql:
  listen: 0.0.0.0:50051
  session_timeout_s: 3840
with_metrics: true
config_storage: etcd
etcd:
  prefix: /tcs
  endpoints:
    - http://localhost:2379
group: aggregators
replicaset: replicaset1
features:
  - experimental_api
  - sharding_api
authentication:
  etcd_auth_prefix: "/auth"
  system_user:
    username: tcs
    password: tcs

Параметр session_timeout_s необязателен. Он указывает время жизни сессии в секундах, создаваемой для подключения. По умолчанию значение параметра равно 3840, что равняется 8 часам. Если в рамках сессии подразумевается выполнение какого-то особо длительного процесса, который может потребовать больше 8 часов, к примеру, заливка данных ETL, то в таком случае имеет смысл переопределить значение параметра session_timeout_s в большую сторону.

Блок параметров authentication содержит аутентификационные данные учетной записи пользователя tcs. Эти данные необходимы для выполнения подключения по протоколу Arrow Flight SQL. Для подключения по протоколу HTTP API эти данные указывать не обязательно.

После включения этих настроек можно подключаться к таким экземплярам Scheduler с помощью коннекторов ADBC или JDBC и выполнять запросы SELECT и INSERT.

Запросы INSERT будут шардированы. Это значит, что если в запросе указан ключ шардирования, то строки будут распределяться по шардам в соответствии с тем, на какой шард указывает ключ шардирования каждой конкретной строки. Если ключ шардирования не указан, то все вставляемые строки будут отправляться на один шард — на первый в топологии.

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

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

  1. IP-адрес из параметра iproto.advertise, если он указан.

  2. IP-адрес из параметра iproto.listen, если iproto.advertise не указан.

Таким образом, для корректной работы кластера TCS на нескольких серверах нужно для каждого узла указывать хотя бы один из этих параметров. При этом нужно учитывать, что приоритет при определении IP-адреса узла отдается параметру iproto.advertise.

Управление скриптами миграций

Некоторые обновления с TCS поставляются в виде скриптов миграции – программных файлов, написанных на языке Lua (например, exclude_null.lua).

Такие скрипты запускают на мастер-экземпляре Storage путем вызова соответствующего программного метода, например:

  • apply() – для применения обновления;

  • revert() – для отката обновления (есть не у всех скриптов миграции);

  • прочие методы, специфичные для конкретного скрипта миграции.

Также на вход методу может требоваться передавать аргументы, например apply (arg1, arg2).

Применение обновления

  1. Обновить версию TCS до требуемой.

  2. Выполнить команду следующего вида на мастер-экземпляре Storage (а при настроенном шардировании – на мастер-экземпляре Storage каждого набора реплик):

    require('migrations.<имя_скрипта>').apply()
    

    Примечание

    Имя скрипта миграции указывается без расширения .lua.

Откат обновления

  1. Выполнить команду следующего вида на мастер-экземпляре Storage (а при настроенном шардировании – на мастер-экземпляре Storage каждого набора реплик):

    require('migrations.<имя_скрипта>').revert()
    

    Примечание

    Имя скрипта миграции указывается без расширения .lua.

  2. Откатить версию TCS при необходимости.

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

По GET-запросу на HTTP-адрес /status, Scheduler возвращает:

  • состояние топологии (поле topology);

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

Например:

curl --request GET \
     --url http://localhost:7778/status

topology:
- replicaset: replicaset1
  nodes:
  - name: instance2
    admin_iproto_endpoint: 127.0.0.1:3332
    api_http_endpoint: 127.0.0.1:7776
    arrow_flight_sql_endpoint:
      listen: 127.0.0.1:50052
  - name: instance1
    admin_iproto_endpoint: 127.0.0.1:3331
    api_http_endpoint: 127.0.0.1:7777
    arrow_flight_sql_endpoint:
      listen: 127.0.0.1:50051
  master: instance1
revision: 5039

Привязка экземпляра 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 название_сервиса
Нашли ответ на свой вопрос?
Обратная связь