Основные задачи¶
Первичная установка системы¶
Возможны 2 вида установки системы TCS с использованием инсталлятора Ansible Tarantool Enterprise:
Установка с помощью Ansible-коллекции.
См. подробнее:
раздел Подготовка серверов в текущем Руководстве администратора
глава Использование Ansible-коллекции в документации по инсталлятору Ansible Tarantool Enterprise
Установка с помощью Docker-образа.
В этом случае установка TCS должна включать следующие шаги:
Подготовка серверов, в том числе установка и настройка кластера
etcd.См. подробнее:
раздел Подготовка серверов в текущем Руководстве администратора
раздел Сценарий первичной настройки в документации по инсталлятору Ansible Tarantool Enterprise
Загрузка конфигурации в
etcd.См. раздел Tarantool 3.0: Отправка конфигурации в etcd в документации по инсталлятору Ansible Tarantool Enterprise.
Установка TCS.
См. следующие разделы в документации по инсталлятору Ansible Tarantool Enterprise:
Установка TCM.
См. раздел Tarantool Cluster Manager: Установка и запуск в документации по инсталлятору Ansible Tarantool Enterprise.
Пример кластера TCS, развернутого на нескольких серверах:

Обновление версии системы¶
Чтобы обновить TCS 0.30.3 до версии 0.30.4, нужно выполнить следующие действия:
Убедиться, что в конфигурации TCS не указан параметр
index_depthсо значением равным0. Нужно заменить0наnull(означает, что размер индекса не ограничен) или вообще удалить из конфигурации.Убедиться, что в файле инвентаря TCS соблюдается формула для значений параметров
lease_interval>probe_interval+renew_interval.При необходимости изменений – загрузить обновленную конфигурацию в
etcd.Остановить все компоненты 0.30.3.
Развернуть все компоненты 0.30.4:
a. Развернуть экземпляры Storage (в ATE плейбук tcs-install.yml).
b. Развернуть экземпляры Scheduler (в ATE плейбук install_scheduler.yml).
Если ваша версия ATE меньше, чем 1.14.0, необходимо дополнительно выполнить следующие шаги:
Вручную добавить секцию
authenticationв конфигурации Scheduler и Storage:
authentication:
etcd_auth_prefix: "/auth"
system_user:
username: tcs
password: tcs
Вручную добавить пользователя в 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,или необходимо дополнительно выполнить следующие шаги:
Вручную добавить пользователя в 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 добавить в инвентарь Scheduler:
tcs_additional_config
authentication:
etcd_auth_prefix: "/auth"
system_user:
username: tcs
password: tcs
Перезапустить экземпляры Scheduler.
Откат системы к предыдущей версии¶
Чтобы откатить TCS 0.30.4 обратно к версии 0.30.3, нужно выполнить следующие действия:
Остановить все компоненты 0.30.4.
Развернуть все компоненты 0.30.3:
a. Развернуть экземпляры Storage (в ATE плейбук tcs-install.yml).
b. Развернуть экземпляры Scheduler (в ATE плейбук install_scheduler.yml).
Обновление системы без простоя¶
Чтобы обновить TCS 0.30.3 до версии 0.30.4 без простоя («по плечам»), нужно выполнить следующие действия:
Загрузить обновленную конфигурацию для версии TCS 0.30.4 в etcd.
Запустить обновление по плечам (в ATE плейбук continuous_update.yml).
Откат системы без простоя¶
Чтобы откатить TCS 0.30.4 обратно к версии 0.30.3 без простоя («по плечам»), нужно выполнить следующие действия:
Загрузить конфигурацию для TCS 0.30.3 в etcd.
В плейбуке ATE
continuous_update.ymlуказать целевую версию (0.30.3).Запустить откат системы по плечам (в ATE плейбук continuous_update.yml).
Создание резервной копии¶
См. документацию по инсталлятору Ansible Tarantool Enterprise, раздел Автоматическое резервирование.
Восстановление из резервной копии¶
См. документацию по инсталлятору Ansible Tarantool Enterprise, раздел Автоматическое восстановление.
Масштабирование системы¶
Добавление экземпляров Scheduler¶
Добавление новых экземпляров Scheduler может понадобиться, когда системе не хватает пропускной способности роутеров или мощности SQL-вычислений.
Для добавления нового экземпляра с помощью инсталлятора Ansible Tarantool Enterprise:
Добавьте экземпляры в инвентарь TCS.
Вызовите метод
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}
Настройка шардирования¶
Примечание
Убедитесь, что используется инсталлятор ATE требуемой версии.
Учитывайте список ограничений по работе шардирования в текущей версии TCS.
Для настройки шардирования в кластере TCS укажите следующие параметры в конфигурации TCS:
Настройте конфигурацию шардов (наборов реплик, состоящих из экземпляров 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
Настройте сервис 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.
Включите поддержку шардирования на всех экземплярах 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 интерфейс.
Укажите ключ шардирования для всех шардируемых таблиц.
Для этого в разделе
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):
Tarantool 3.0: Отправка конфигурации в etcd (сценарий применим ко всем компонентам кластера)
Запуск экземпляр(ов) (сценарий не применим к экземплярам Scheduler)
Остановка экземпляра(ов) (сценарий не применим к экземплярам Scheduler)
Перезагрузка экземпляра(ов) (сценарий не применим к экземплярам Scheduler)
Автоматическое резервирование (сценарий не применим к экземплярам Scheduler)
Автоматическое восстановление (сценарий не применим к экземплярам Scheduler)
Управление кластером с помощью 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 использует следующие параметры:
IP-адрес из параметра
iproto.advertise, если он указан.IP-адрес из параметра
iproto.listen, еслиiproto.advertiseне указан.
Таким образом, для корректной работы кластера TCS на нескольких серверах нужно для каждого узла указывать хотя бы один из этих параметров.
При этом нужно учитывать, что приоритет при определении IP-адреса узла отдается параметру iproto.advertise.
Управление скриптами миграций¶
Некоторые обновления с TCS поставляются в виде скриптов миграции – программных файлов,
написанных на языке Lua (например, exclude_null.lua).
Такие скрипты запускают на мастер-экземпляре Storage путем вызова соответствующего программного метода, например:
apply()– для применения обновления;revert()– для отката обновления (есть не у всех скриптов миграции);прочие методы, специфичные для конкретного скрипта миграции.
Также на вход методу может требоваться передавать аргументы, например apply (arg1, arg2).
Применение обновления¶
Обновить версию TCS до требуемой.
Выполнить команду следующего вида на мастер-экземпляре Storage (а при настроенном шардировании – на мастер-экземпляре Storage каждого набора реплик):
require('migrations.<имя_скрипта>').apply()
Примечание
Имя скрипта миграции указывается без расширения
.lua.
Откат обновления¶
Выполнить команду следующего вида на мастер-экземпляре Storage (а при настроенном шардировании – на мастер-экземпляре Storage каждого набора реплик):
require('migrations.<имя_скрипта>').revert()
Примечание
Имя скрипта миграции указывается без расширения
.lua.Откатить версию 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.
Полная инструкция¶
Зайдите на сервер TCS с экземплярами Storage по SSH.
Переключитесь на пользователя
tarantool:sudo su tarantool
Установите переменную окружения для работы с
SystemDвuserspace:export XDG_RUNTIME_DIR=/run/user/$(id -u)
Объяснение: Это нужно для выполнения команд утилит
SystemD (systemctl, journalctl)вuserspace.Рекомендация: Чтобы не выполнять экспорт каждый раз, можно добавить команду
export XDG_RUNTIME_DIR=/run/user/$(id -u)в файл$HOME/.profile.Посмотрите список сервисов пользователя
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.
Откройте шаблонный сервис для экземпляров Storage:
vim $HOME/.config/systemd/user/tcs@.service
В шаблонном сервисе посмотрите путь до исполняемого файла
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.Выполните команду
systemctl --user edit название_сервиса_storageдля того, чтобы начать редактирование (во временном буфере) файла с перезаписью опций в шаблонном сервисе:systemctl --user edit tcs@i-01
Добавьте перезапись опции
ExecStartиз секции[Service]. В новомExecStartуказан запуск процесса через утилитуnumactlс нужными опциями:[Service] ExecStart= ExecStart=numactl --cpunodebind=0 --membind=0 /app/tarantool/tcs/bin/tcs.%i/tarantool --name %i
ВАЖНО: обязательно нужно указать сначала пустой
ExecStart, чтобы в дальнейшем не возникло ошибки при применении новой конфигурации.Сохраните файл.
Объяснение: Это действие создаст директорию
$HOME/.config/systemd/user/название_сервиса.dи файлoverride.confв этой директории.Рекомендация: Чтобы в качестве редактора использовался
vim(если он уже не используется по умолчанию), можно установить переменную окруженияSYSTEMD_EDITOR=vim.Выполните команду для перезагрузки конфигурации
systemD:
systemctl --user daemon-reload
Перезапустите экземпляр:
systemctl --user restart tcs@i-01
Примечание: Перезапустить экземпляр можно также через ATE.
После перезапуска можно проверить привязку к 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 название_сервиса