Версия:

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

Файл экземпляра

После столь краткого предисловия может возникнуть вопрос: что из себя представляет файл экземпляра, для чего он нужен и как 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

While instance files contain instance configuration, the tarantoolctl configuration file contains the configuration that tarantoolctl uses to override instance configuration. In other words, it contains system-wide configuration defaults. If tarantoolctl fails to find this file with the method described in section Starting/stopping an instance, it uses default settings.

Most of the parameters are similar to those used by box.cfg{}. Here are the default settings (possibly installed in /etc/default/tarantool or /etc/sysconfig/tarantool as part of Tarantool distribution – see OS-specific default paths in Notes for operating systems):

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
    Директория, где хранятся все файлы экземпляра для данного компьютера. Поместите сюда файлы экземпляра или создайте символьные ссылки на них.

    Директория с экземплярами, которая используется по умолчанию, зависит от параметра WITH_SYSVINIT сборки Tarantool’а: когда его значение «ON», то /etc/tarantool/instances.enabled, в противном случае («OFF» или значение не установлено), то /etc/tarantool/instances.available. Последний случай характерен для сборок Tarantool’а для дистрибутивов Linux с systemd.

    Для проверки параметров сборки выполните команду tarantool --version.

As a full-featured example, you can take example.lua script that ships with Tarantool and defines all configuration options.