Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Конфигурация в коде

В этом разделе рассматриваются особенности настройки Tarantool в коде с помощью API box.cfg. В этом случае конфигурация хранится в файле инициализации — Lua-скрипте с заданными параметрами конфигурации. Все доступные параметры см. в справочнике по конфигурации.

Файл инициализации

Если команде запуска Tarantool передается файл экземпляра, то Tarantool начинает работу с выполнения Lua-программы из этого файла, который может называться init.lua. Lua-программа может получать дополнительные аргументы из командной строки или использовать функции операционной системы, такие как getenv(). Lua-программа почти всегда начинается с вызова box.cfg(), если используется сервер базы данных или если нужно открыть порты. Например, предположим, что init.lua содержит следующие строки:

#!/usr/bin/env tarantoolbox.cfg{    listen              = os.getenv("LISTEN_URI"),    memtx_memory        = 33554432,    pid_file            = "tarantool.pid",    wal_max_size        = 2500}print('Starting ', arg[1])

А также переменная окружения LISTEN_URI содержит 3301, и командная строка равна tarantool init.lua ARG. Тогда на экране может отобразиться следующее:

$ export LISTEN_URI=3301$ tarantool init.lua ARG... main/101/init.lua C> Tarantool 2.8.3-0-g01023dbc2... main/101/init.lua C> log level 5... main/101/init.lua I> mapping 33554432 bytes for memtx tuple arena...... main/101/init.lua I> recovery start... main/101/init.lua I> recovering from './00000000000000000000.snap'... main/101/init.lua I> set 'listen' configuration option to "3301"... main/102/leave_local_hot_standby I> ready to accept requestsStarting  ARG... main C> entering the event loop

Если после завершения инициализации нужно запустить интерактивный сеанс в том же терминале, передайте параметр командной строки -i.

Переменные окружения

Начиная с версии 2.8.1, задавать параметры конфигурации можно через специальные переменные окружения. Имя переменной должно соответствовать шаблону: TT_<NAME>, где <NAME> — имя соответствующего параметра box.cfg в верхнем регистре.

Например:

  • TT_LISTEN – соответствует параметру box.cfg.listen.

  • TT_MEMTX_DIR – соответствует параметру box.cfg.memtx_dir.

Если значение представляет собой массив, разделяйте элементы запятой без пробела:

export TT_REPLICATION="localhost:3301,localhost:3302"

Если нужно передать дополнительные параметры для URI, используйте разделители ? и &:

export TT_LISTEN="localhost:3301?param1=value1&param2=value2"

Пустая переменная (TT_LISTEN=) действует так же, как и не заданная: это означает, что при вызове box.cfg{} соответствующий параметр конфигурации установлен не будет.

Параметры конфигурации

Параметры конфигурации имеют следующий вид:

{**{box.cfg}**}{[{*{key = value}*} [, {*{key = value ...}*}]]}

Параметры конфигурации можно задать в Lua-файле инициализации, который указывается в командной строке Tarantool.

Большинство параметров конфигурации предназначены для выделения ресурсов, открытия портов и настройки поведения базы данных. Все параметры необязательны. Большинство параметров являются динамическими, то есть их можно изменить во время выполнения, повторно вызвав box.cfg{}. Например, следующая команда задает значение 3301 для порта прослушивания.

tarantool> box.cfg{ listen = 3301 }2023-05-10 13:28:54.667 [31326] main/103/interactive I> tx_binary: stopped2023-05-10 13:28:54.667 [31326] main/103/interactive I> tx_binary: bound to [::]:33012023-05-10 13:28:54.667 [31326] main/103/interactive/box.load_cfg I> set 'listen' configuration option to 3301---...

Чтобы увидеть все параметры, значения которых не равны null, выполните box.cfg (без скобок).

tarantool> box.cfg:   –-- replication_skip_conflict: false:   wal_queue_max_size: 16777216 feedback_host:    <https://feedback.tarantool.io> memtx_dir: . memtx_min_tuple_size:    16 – other parameters –

Чтобы получить значение конкретного параметра, вызовите соответствующую опцию box.cfg. Например, box.cfg.listen возвращает указанный адрес прослушивания.

tarantool> box.cfg.listen---- 3301...

URI для прослушивания

Некоторые параметры конфигурации и некоторые функции зависят от URI (универсального идентификатора ресурса). Строковый формат URI похож на общий синтаксис для схемы URI. Он может содержать (в следующем порядке):

  • имя пользователя для входа
  • пароль
  • имя хоста или IP-адрес хоста
  • номер порта
  • параметры запроса

Только номер порта является обязательным в любом случае. Пароль обязателен, если указано имя пользователя, если только имя пользователя не 'guest'.

Формально синтаксис URI выглядит как [host:]port или [username:password@]host:port. Если хост опущен, подразумевается "0.0.0.0" или "[::]", что означает любой IPv4-адрес или любой IPv6-адрес на локальной машине соответственно. Если username:password опущено, подразумевается пользователь "guest". Несколько примеров:

Фрагмент URI

Пример

port

3301

host:port

127.0.0.1:3301

username:password@host:port

notguest:sesame@mail.ru:3301

В коде значение URI можно передать в виде числа (если указан только порт) или строки:

box.cfg { listen = 3301 }box.cfg { listen = "127.0.0.1:3301" }

В определенных случаях вместо URI может использоваться доменный сокет Unix, например, unix/:/tmp/unix_domain_socket.sock или просто /tmp/unix_domain_socket.sock.

Модуль uri предоставляет функции, которые преобразуют строки URI в их компоненты или собирают компоненты в строки URI.

Указание нескольких URI

Начиная с версии 2.10.0, на экземпляре Tarantool можно открыть несколько слушающих сокетов iproto и, как следствие, указать несколько URI в параметрах конфигурации, таких как box.cfg.listen и box.cfg.replication.

Значения URI можно задать несколькими способами:

  • В виде строки со значениями URI, разделенными запятыми.

    box.cfg { listen = "127.0.0.1:3301, /unix.sock, 3302" }
  • В виде таблицы, содержащей URI в строковом формате.

    box.cfg { listen = {"127.0.0.1:3301", "/unix.sock", "3302"} }
  • В виде массива таблиц с полем uri.

    box.cfg { listen = {        {uri = "127.0.0.1:3301"},        {uri = "/unix.sock"},        {uri = 3302}    }}
  • Комбинированным способом — массив, содержащий URI как в строковом, так и в табличном форматах.
box.cfg { listen = {        "127.0.0.1:3301",        { uri = "/unix.sock" },        { uri = 3302 }    }}

Кроме того, начиная с версии 2.10.0, для URI можно указывать дополнительные параметры. Это можно сделать несколькими способами:

  • Используя разделитель ? при указании URI в строковом формате.

    box.cfg { listen = "127.0.0.1:3301?p1=value1&p2=value2, /unix.sock?p3=value3" }
  • Используя таблицу params: URI передается в таблице с дополнительными параметрами в таблице "params". Параметры в таблице "params" перезаписывают параметры из строки URI ("value2" перезаписывает "value1" для p1 в примере ниже).

    box.cfg { listen = {        "127.0.0.1:3301?p1=value1",        params = {p1 = "value2", p2 = "value3"}    }}
  • Используя таблицу default_params для задания значений параметров по умолчанию.

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

    box.cfg { listen = {        "127.0.0.1:3301?p1=value1",        { uri = "/unix.sock", params = { p2 = "value2" } },        default_params = { p3 = "value3" }    }}

Рекомендуемый способ указания URI с дополнительными параметрами:

box.cfg { listen = {        {uri = "127.0.0.1:3301", params = {p1 = "value1"}},        {uri = "/unix.sock", params = {p2 = "value2"}},        {uri = 3302, params = {p3 = "value3"}}    }}

В случае с одним URI также работает следующий синтаксис:

box.cfg { listen = {        uri = "127.0.0.1:3301",        params = { p1 = "value1", p2 = "value2" }    }}

Шифрование трафика

Начиная с версии 2.10.0 в Tarantool Enterprise Edition встроена поддержка SSL для шифрования обмена данными между клиентом и сервером по бинарным соединениям, то есть между экземплярами Tarantool в кластере или при подключении к экземпляру через коннекторы с использованием LINK_NOT_DEFINED(../../../reference/reference_lua/net_box).

Tarantool использует библиотеку OpenSSL, которая входит в комплект поставки. Обратите внимание, что SSL-соединения используют только TLSv1.2.

Конфигурация

Для настройки шифрования трафика необходимо задать специальные параметры URI для конкретного соединения. Параметры можно задать для следующих опций box.cfg и метода net.box:

Ниже приведен список параметров. В следующем разделе можно посмотреть подробности и примеры настройки на стороне сервера и клиента.

  • transport — включает SSL-шифрование для соединения, если установлено значение ssl. Значение по умолчанию — plain, при котором шифрование отключено. Если параметр не задан, шифрование также отключено. Другие параметры, связанные с шифрованием, можно использовать только при transport = 'ssl'.

    Пример:

local connection = require('net.box').connect({    uri = 'admin:topsecret@127.0.0.1:3301',    params = { transport = 'ssl',               ssl_cert_file = 'certs/instance001/server001.crt',               ssl_key_file = 'certs/instance001/server001.key',               ssl_password = 'qwerty' }})
  • ssl_key_file — путь к файлу закрытого SSL-ключа. Обязателен для сервера. Для клиента обязателен, если для сервера задан параметр ssl_ca_file; в противном случае — необязателен. Если закрытый ключ зашифрован, укажите пароль для него в параметре ssl_password или ssl_password_file.

  • ssl_cert_file — путь к файлу SSL-сертификата. Обязателен для сервера. Для клиента обязателен, если для сервера задан параметр ssl_ca_file; в противном случае — необязателен.

  • ssl_ca_file — путь к файлу доверенных центров сертификации (CA). Необязателен. Если параметр не задан, подлинность узла не проверяется.

    Параметр ssl_ca_file может использоваться как на стороне сервера, так и на стороне клиента:

  • Если параметр задан на стороне сервера, сервер проверяет клиента.

  • Если параметр задан на стороне клиента, клиент проверяет сервер.

  • Если файлы CA заданы с обеих сторон, сервер и клиент проверяют друг друга.

  • ssl_ciphers — разделенный двоеточием (:) список наборов шифров SSL, которые могут использоваться для соединения. Подробнее см. в разделе configuration_code_iproto-encryption-ciphers.

    Необязателен. Обратите внимание, что список не проверяется на корректность: если набор шифров неизвестен, Tarantool просто игнорирует его, не устанавливает соединение и записывает в лог сообщение о том, что не найден общий набор шифров.

  • ssl_password — пароль для зашифрованного закрытого SSL-ключа. Необязателен. Также пароль можно указать в ssl_password_file.

  • ssl_password_file — текстовый файл с одним или несколькими паролями для зашифрованных закрытых SSL-ключей (по одному на каждой строке). Необязателен. Также пароль можно указать в ssl_password.

Параметры ssl_password и ssl_password_file применяются в следующем порядке:

  1. Если задан параметр ssl_password, Tarantool пытается расшифровать закрытый ключ с его помощью.

  2. Если ssl_password неверный или не задан, Tarantool поочередно пытается использовать все пароли из ssl_password_file в порядке их следования в файле.

  3. Если ssl_password и все пароли из ssl_password_file неверные или ни один из них не задан, Tarantool считает закрытый ключ незашифрованным.

Пример конфигурации:

box.cfg{ listen = {    uri = 'localhost:3301',    params = {        transport = 'ssl',        ssl_key_file = '/path_to_key_file',        ssl_cert_file = '/path_to_cert_file',        ssl_ciphers = 'HIGH:!aNULL',        ssl_password = 'topsecret'    }}}

Поддерживаемые шифры

Tarantool Enterprise поддерживает следующие наборы шифров:

  • ECDHE-ECDSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES256-GCM-SHA384
  • DHE-RSA-AES256-GCM-SHA384
  • ECDHE-ECDSA-CHACHA20-POLY1305
  • ECDHE-RSA-CHACHA20-POLY1305
  • DHE-RSA-CHACHA20-POLY1305
  • ECDHE-ECDSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES128-GCM-SHA256
  • DHE-RSA-AES128-GCM-SHA256
  • ECDHE-ECDSA-AES256-SHA384
  • ECDHE-RSA-AES256-SHA384
  • DHE-RSA-AES256-SHA256
  • ECDHE-ECDSA-AES128-SHA256
  • ECDHE-RSA-AES128-SHA256
  • DHE-RSA-AES128-SHA256
  • ECDHE-ECDSA-AES256-SHA
  • ECDHE-RSA-AES256-SHA
  • DHE-RSA-AES256-SHA
  • ECDHE-ECDSA-AES128-SHA
  • ECDHE-RSA-AES128-SHA
  • DHE-RSA-AES128-SHA
  • AES256-GCM-SHA384
  • AES128-GCM-SHA256
  • AES256-SHA256
  • AES128-SHA256
  • AES256-SHA
  • AES128-SHA
  • GOST2012-GOST8912-GOST8912
  • GOST2001-GOST89-GOST89

В статической сборке Tarantool Enterprise встроен движок для поддержки криптографических алгоритмов ГОСТ. Если эти алгоритмы используются для шифрования трафика, укажите соответствующий набор шифров в параметре ssl_ciphers, например:

box.cfg{ listen = {    uri = 'localhost:3301',    params = {        transport = 'ssl',        ssl_key_file = '/path_to_key_file',        ssl_cert_file = '/path_to_cert_file',        ssl_ciphers = 'GOST2012-GOST8912-GOST8912'    }}}

Подробнее о шифрах SSL и их синтаксисе см. в документации OpenSSL.

Использование переменных окружения

Параметры URI для шифрования трафика также можно задать через переменные окружения, например:

export TT_LISTEN="localhost:3301?transport=ssl&ssl_cert_file=/path_to_cert_file&ssl_key_file=/path_to_key_file"

Детали конфигурации сервера и клиента

При настройке шифрования трафика необходимо указать нужные параметры как на стороне сервера, так и на стороне клиента. Ниже приведены сведения об используемых опциях и параметрах, а также примеры конфигурации.

На стороне сервера

  • Настраивается с помощью опции box.cfg.listen.
  • Обязательные параметры URI: transport, ssl_key_file и ssl_cert_file.
  • Необязательные параметры URI: ssl_ca_file, ssl_ciphers, ssl_password и ssl_password_file.

На стороне клиента

  • Настраивается с помощью опции box.cfg.replication (см. подробности) или net_box_object.connect().

Параметры:

  • Если на стороне сервера заданы только параметры transport, ssl_key_file и ssl_cert_file, на стороне клиента в качестве обязательного параметра необходимо указать только transport = ssl. Все остальные параметры URI являются необязательными.

  • Если на стороне сервера также задан параметр ssl_ca_file, на стороне клиента в качестве обязательных параметров необходимо указать transport, ssl_key_file и ssl_cert_file. Остальные параметры – ssl_ca_file, ssl_ciphers, ssl_password и ssl_password_file – являются необязательными.

Примеры конфигурации

Предположим, существует набор реплик master-replica с двумя экземплярами Tarantool:

  • 127.0.0.1:3301 – мастер (сервер)

  • 127.0.0.1:3302 – реплика (клиент).

Ниже приведены примеры конфигурации, связанной с шифрованием соединения, для двух случаев: когда файл доверенных центров сертификации (CA) не задан на стороне сервера и когда он задан. В этих примерах указаны только обязательные параметры URI.

  1. Без CA

    • 127.0.0.1:3301 – мастер (сервер)
box.cfg{    listen = {        uri = '127.0.0.1:3301',        params = {            transport = 'ssl',            ssl_key_file = '/path_to_key_file',            ssl_cert_file = '/path_to_cert_file'        }    }}
  • 127.0.0.1:3302 – реплика (клиент)
box.cfg{    listen = {        uri = '127.0.0.1:3302',        params = {transport = 'ssl'}    },    replication = {        uri = 'username:password@127.0.0.1:3301',        params = {transport = 'ssl'}    },    read_only = true}
  1. С CA

    • 127.0.0.1:3301 – мастер (сервер)
box.cfg{    listen = {        uri = '127.0.0.1:3301',        params = {            transport = 'ssl',            ssl_key_file = '/path_to_key_file',            ssl_cert_file = '/path_to_cert_file',            ssl_ca_file = '/path_to_ca_file'        }    }}
  • 127.0.0.1:3302 – реплика (клиент)
box.cfg{    listen = {        uri = '127.0.0.1:3302',        params = {            transport = 'ssl',            ssl_key_file = '/path_to_key_file',            ssl_cert_file = '/path_to_cert_file'        }    },    replication = {        uri = 'username:password@127.0.0.1:3301',        params = {            transport = 'ssl',            ssl_key_file = '/path_to_key_file',            ssl_cert_file = '/path_to_cert_file'        }    },    read_only = true}

Запуск экземпляра Tarantool

Ниже приведен синтаксис команды для запуска экземпляра Tarantool, настроенного в скрипте инициализации на Lua:

$ tarantool LUA_INITIALIZATION_FILE [OPTION ...]

Команда tarantool также предоставляет набор опций, которые могут быть полезны при разработке.

Следующая команда запускает экземпляр Tarantool, настроенный в файле init.lua:

$ tarantool init.lua