Настройка экземпляров 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 и задает все конфигурационные параметры.