Рейтинг@Mail.ru

Настройка экземпляров Tarantool’а

Замечание

Документация находится в процессе перевода и может отставать от английской версии.

Настройка экземпляров 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;
    }
    
  • Файл экземпляра, содержащий логику и параметры инициализации данного экземпляра. Поместите этот файл или символьную ссылку на него в папку /etc/tarantool/instances.enabled.

    Например, /etc/tarantool/instances.enabled/my_app.lua (здесь мы загружаем модуль my_app.lua и вызываем из него функцию start()):

    #!/usr/bin/env tarantool
    
    box.cfg {
        listen = 3301;
    }
    
    -- load my_app module and call start() function
    -- with some app options controlled by sysadmins
    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 использует, чтобы переопределять конфигурацию экземпляров. Другими словами, он содержит общесистемную конфигурацию по умолчанию.

Большинство параметров схожи с теми, которые используются в box.cfg{}. Ниже даны настройки по умолчанию (устанавливаемые в /etc/default/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
    Директория, где хранятся все файлы экземпляра для данного компьютера. Поместите сюда файлы экземпляра или создайте символьные ссылки на них.

В качестве полноценного примера можно использовать скрипт example.lua, который поставляется вместе с Tarantool и задает все конфигурационные параметры.