Настройка экземпляров Tarantool
Для каждого экземпляра Tarantool понадобится два файла:
[Необязательный] Файл приложения, содержащий логику данного экземпляра. Поместите его в папку
/usr/share/tarantool/.Например,
/usr/share/tarantool/my_app.lua(здесь мы реализуем его как Lua-модуль, который запускает базу данных и экспортирует функциюstart()для API -вызовов):local function start() box.schema.space.create("somedata") box.space.somedata:create_index("primary") <...> end return { start = start; }
Файл экземпляра, содержащий логику и параметры инициализации данного экземпляра. Поместите этот файл или символьную ссылку на него в директорию экземпляра (см. параметр instance_dir в конфигурационном файле
tarantoolctl).Например,
/etc/tarantool/instances.enabled/my_app.lua(здесь мы загружаем модульmy_app.luaи вызываем из него функциюstart()):#!/usr/bin/env tarantool box.cfg { listen = 3301; } -- загрузить модуль my_app и вызвать функцию start() -- некоторые опции приложения под контролем сисадминов local m = require('my_app').start({...})
После столь краткого предисловия может возникнуть вопрос: что из себя представляет файл экземпляра, для чего он нужен и как tarantoolctl использует его? Если Tarantool – это сервер приложений, так почему бы не запускать хранящееся в /usr/share/tarantool приложение напрямую?
Типичное приложение для Tarantool – это не скрипт, а демон, запущенный в фоновом режиме и обрабатывающий запросы, которые, как правило, посылаются через TCP/IP-сокет. Необходимо запускать этот демон со стартом операционной системы и управлять им с помощью стандартных средств операционной системы для управления сервисами – таких как systemd или init.d. С этой целью и были созданы файлы экземпляра.
Файлов экземпляра может быть больше одного. Например, одно и то же приложение в /usr/share/tarantool может быть запущено на нескольких экземплярах Tarantool, у каждого из которых есть свой файл экземпляра. Или в /usr/share/tarantool может быть несколько приложений, и на каждое из них будет опять же приходиться свой файл экземпляра.
Обычно файл экземпляра создает системный администратор, а файл приложения предоставляет разработчик в Lua-модуле или rpm/deb-пакете.
По своему устройству файл экземпляра ничем не отличается от Lua-приложения. Однако с его помощью должна настраиваться база данных, поэтому в нем должен содержаться вызов box.cfg{}, потому что это единственный способ превратить Tarantool-скрипт в фоновый процесс, а tarantoolctl – это инструмент для управления фоновыми процессами. За исключением этого вызова, файл экземпляра может содержать произвольный код на Lua и, теоретически, даже всю бизнес-логику приложения. Однако мы не рекомендуем хранить весь код в файле экземпляра, потому что это приводит как к замусориванию самого файла, так и к ненужному копированию кода при необходимости запустить несколько экземпляров приложения.
Конфигурационный файл tarantoolctl
Файлы экземпляра содержат конфигурацию экземпляра, тогда как конфигурационный файл tarantoolctl содержит конфигурацию, которую tarantoolctl использует, чтобы переопределять конфигурацию экземпляров. Другими словами, он содержит общесистемную конфигурацию по умолчанию. Если tarantoolctl не сможет обнаружить этот файл, используя метод, описанный в разделе Запуск/остановка экземпляра, будут использованы настройки по умолчанию.
Большинство параметров схожи с теми, которые используются в box.cfg{}. Ниже даны настройки по умолчанию (могут быть установлены в /etc/default/tarantool или /etc/sysconfig/tarantool как часть дистрибутива Tarantool – см. пути по умолчанию для разных ОС в Замечаниях по поводу некоторых операционных систем):
default_cfg = {
pid_file = "/var/run/tarantool",
wal_dir = "/var/lib/tarantool",
memtx_dir = "/var/lib/tarantool",
vinyl_dir = "/var/lib/tarantool",
log = "/var/log/tarantool",
username = "tarantool",
}
instance_dir = "/etc/tarantool/instances.enabled"
где:
pid_fileДиректория, где хранятся pid-файл и socket-файл;tarantoolctlдобавляет “/имя_экземпляра” к имени директории.wal_dirДиректория, где хранятся .xlog-файлы;tarantoolctlдобавляет “/имя_экземпляра” к имени директории.memtx_dirДиректория, где хранятся .snap-файлы;tarantoolctlдобавляет “/имя_экземпляра” к имени директории.vinyl_dirДиректория, где хранятся vinyl-файлы;tarantoolctlдобавляет “/имя_экземпляра” к имени директории.logДиректория, где хранятся файлы журнала с сообщениями от Tarantool-приложения;tarantoolctlдобавляет “/имя_экземпляра” к имени директории.usernameПользователь, запускающий экземпляр Tarantool. Это пользователь операционной системы, а не Tarantool-клиента. Став демоном, Tarantool сменит своего пользователя на указанного.
instance_dirДиректория, где хранятся все файлы экземпляра для данного компьютера. Поместите сюда файлы экземпляра или создайте символьные ссылки на них.Директория с экземплярами, которая используется по умолчанию, зависит от параметра сборки Tarantool
WITH_SYSVINIT: когда его значение «ON», то/etc/tarantool/instances.enabled, в противном случае («OFF» или значение не установлено)/etc/tarantool/instances.available. Последний случай характерен для сборок Tarantool для дистрибутивов Linux сsystemd.Для проверки параметров сборки выполните команду
tarantool --version.
В качестве полноценного примера можно использовать скрипт example.lua, который поставляется вместе с Tarantool и задает все конфигурационные параметры.