Рейтинг@Mail.ru

Запуск/остановка экземпляра

Замечание

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

Запуск/остановка экземпляра

Lua-приложение выполняется Tarantool’ом, тогда как файл экземпляра выполняется Tarantool-скриптом tarantoolctl.

Вот что делает tarantoolctl при вводе следующей команды:

$ tarantoolctl start <имя_экземпляра>
  1. Считывает и разбирает аргументы командной строки. В нашем случае последний аргумент содержит имя экземпляра.

  2. Считывает и разбирает собственный конфигурационный файл. Этот файл содержит параметры tarantoolctl по умолчанию – такие как путь до директории, в которой располагаются экземпляры.

    Конфигурационный файл с параметрами tarantoolctl по умолчанию устанавливается в /etc/default/tarantool. Этот файл используется, когда tarantoolctl вызывается с root-правами. Если вызов производит локальный пользователь, tarantoolctl сперва ищет свой файл с параметрами по умолчанию в текущей директории ($PWD/.tarantoolctl), затем в домашней директории текущего пользователя ($HOME/.config/tarantool/tarantool). Если файл не найден, tarantoolctl принимает встроенные параметры по умолчанию.

  3. Ищет файл экземпляра в директории, где располагаются экземпляры, - например, в /etc/tarantool/instances.enabled. tarantoolctl строит путь до файла экземпляра следующим образом: «путь до директории с экземплярами» + «имя экземпляра» + «.lua».

  4. Переопределяет функцию box.cfg{}, чтобы предобработать ее параметры и сделать так, чтобы пути к экземплярам указывали на пути, прописанные в конфигурационном файле tarantoolctl. Например, если в конфигурационном файле указано, что рабочей директорией экземпляра является /var/tarantool, то новая реализация box.cfg{} сделает так, чтобы параметр work_dir в box.cfg{} имел значение /var/tarantool/<имя_экземпляра>, независимо от того, какой путь указан в самом файле экземпляра.

  5. Создает так называемый «файл для управления экземпляром». Это Unix-сокет с прикрепленной к нему Lua-консолью. В дальнейшем tarantoolctl использует этот файл для получения состояния экземпляра, отправки команд и т.д.

  6. Наконец, использует Lua-команду dofile для выполнения файла экземпляра.

При запуске экземпляра с помощью инструментария systemd указанным ниже способом (имя экземпляра - my_app):

$ systemctl start tarantool@my_app
$ ps axuf|grep exampl[e]
taranto+  5350  1.3  0.3 1448872 7736 ?        Ssl  20:05   0:28 tarantool my_app.lua <running>

…на самом деле вызывается tarantoolctl - так же, как и в случае tarantoolctl start my_app.

Для проверки файла экземпляра на наличие синтаксических ошибок перед запуском экземпляра my_app используйте команду:

$ tarantoolctl check my_app

Для включения автоматической загрузки экземпляра my_app при запуске всей системы используйте команду:

$ systemctl enable tarantool@my_app

Для остановки работающего экземпляра my_app используйте команду:

$ tarantoolctl stop my_app
$ # - ИЛИ -
$ systemctl stop tarantool@my_app

Для перезапуска (т.е. остановки и запуска) работающего экземпляра my_app используйте команду:

$ tarantoolctl restart my_app
$ # - ИЛИ -
$ systemctl restart tarantool@my_app

Локальный запуск Tarantool

Иногда бывает необходимо запустить Tarantool локально - например, для тестирования. Давайте настроим локальный экземпляр, запустим его и будем мониторить с помощью tarantoolctl.

Сперва создадим директорию-песочницу по следующему пути:

$ mkdir ~/tarantool_test

…и поместим конфигурационный файл с параметрами tarantoolctl по умолчанию в $HOME/.config/tarantool/tarantool. Содержимое файла будет таким:

default_cfg = {
    pid_file  = "/home/user/tarantool_test/my_app.pid",
    wal_dir   = "/home/user/tarantool_test",
    snap_dir  = "/home/user/tarantool_test",
    vinyl_dir = "/home/user/tarantool_test",
    log       = "/home/user/tarantool_test/log",
}
instance_dir = "/home/user/tarantool_test"

Примечание

  • Указывайте полный путь к домашней директории пользователя вместо «~/».
  • Опустите параметр username. Обычно, когда запуск производит локальный пользователь, у tarantoolctl нет разрешения на смену текущего пользователя. Экземпляр будет работать с пользователем „admin“.

Далее создадим файл экземпляра ~/tarantool_test/my_app.lua. Содержимое файла будет таким:

box.cfg{listen = 3301}
box.schema.user.passwd('Gx5!')
box.schema.user.grant('guest','read,write,execute','universe')
fiber = require('fiber')
box.schema.space.create('tester')
box.space.tester:create_index('primary',{})
i = 0
while 0 == 0 do
    fiber.sleep(5)
    i = i + 1
    print('insert ' .. i)
    box.space.tester:insert{i, 'my_app tuple'}
end

Проверим наш файл экземпляра, сперва запустив его без tarantoolctl:

$ cd ~/tarantool_test
$ tarantool my_app.lua
2017-04-06 10:42:15.762 [54085] main/101/my_app.lua C> version 1.7.3-489-gd86e36d5b
2017-04-06 10:42:15.763 [54085] main/101/my_app.lua C> log level 5
2017-04-06 10:42:15.764 [54085] main/101/my_app.lua I> mapping 268435456 bytes for tuple arena...
2017-04-06 10:42:15.774 [54085] iproto/101/main I> binary: bound to [::]:3301
2017-04-06 10:42:15.774 [54085] main/101/my_app.lua I> initializing an empty data directory
2017-04-06 10:42:15.789 [54085] snapshot/101/main I> saving snapshot `./00000000000000000000.snap.inprogress'
2017-04-06 10:42:15.790 [54085] snapshot/101/main I> done
2017-04-06 10:42:15.791 [54085] main/101/my_app.lua I> vinyl checkpoint done
2017-04-06 10:42:15.791 [54085] main/101/my_app.lua I> ready to accept requests
insert 1
insert 2
insert 3
<...>

Запустим экземпляр Tarantool’а с помощью tarantoolctl:

$ tarantoolctl start my_app

В консоли должны появиться сообщения о том, что экземпляр запущен. Затем выполним следующую команду:

$ ls -l ~/tarantool_test/my_app

В консоли должны появиться .snap-файл и .xlog-файл. Затем выполним следующую команду:

$ less ~/tarantool_test/log/my_app.log

В консоли должно отобразиться содержимое файла журнала для приложения my_app, в том числе сообщения об ошибках, если они были. Затем выполним серию команд:

$ tarantoolctl enter my_app
tarantool> box.cfg{}
tarantool> console = require('console')
tarantool> console.connect('localhost:3301')
tarantool> box.space.tester:select({0}, {iterator = 'GE'})

В консоли должны появиться несколько кортежей, которые создало приложение my_app.

Теперь остановим приложение my_app. Корректный способ остановки - это использовать``tarantoolctl``:

$ tarantoolctl stop my_app

Последний шаг - удаление тестовых данных.

$ rm -R tarantool_test