Версия:

Справочники / Справочник по настройке
Справочники / Справочник по настройке

Справочник по настройке

Справочник по настройке

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

Tarantool можно запустить путем ввода одной из следующих команд:

$ **tarantool**

 $ **tarantool** *options*

 $ **tarantool** *lua-initialization-file* **[** *arguments* **]**

Опции командной строки

-h, --help

Вывод аннотированного списка всех доступных опций и выход.

-V, --version

Вывод названия и версии продукта, например:

$ ./tarantool --version
 Tarantool 1.7.0-1216-g73f7154
 Target: Linux-x86_64-Debug
 ...

В данном примере:

“Tarantool” – это название асинхронной сетевой интегрированной среды программирования многократного использования.

Версия из 3 чисел создается по стандартной схеме <мажорная>-<минорная>-<патч-версия>, где <мажорная> версия изменяется редко, <минорная> последовательно увеличивается с каждым новым выпущенным стабильным релизом и указывает на возможные несовместимые изменения, а <патч-версия> означает количество версий с исправленными ошибками с момента выхода стабильного релиза. Еще не вышедшие версии могут также содержать номер коммита и коммит SHA1, чтобы показать, насколько данная сборка отходит от последнего релиза.

“Target” – это платформа, на которой собран Tarantool. Некоторые платформенно-зависимые детали могут следовать за этой строкой.

Примечание

При выставлении номера версии Tarantool’а применяется git describe, и этот номер версии можно в любое время использовать для проверки соответствующего исходного кода в репозитории git.

Унифицированный идентификатор ресурса (URI)

Некоторые конфигурационные параметры и некоторые функции зависимы от URI (унифицированного идентификатора ресурса). Формат URI-строки похож на общий синтаксис URI-схемы. Таким образом, он может содержать (по порядку) имя пользователя для входа в систему, пароль, имя хоста или IP-адрес хоста и номер порта. Только номер порта является обязательным параметром. Обязательно следует указать пароль, если указано имя пользователя за исключением случаев, когда пользователем будет „guest“. Формально URI-синтаксис представляет собой [хост:]порт или [имя-пользователя:пароль@]хост:порт. Если хост не указан, то предполагается хост „0.0.0.0“ или „[::]“, что означает любой IPv4-адрес или IPv6-адрес на локальной машине соответственно. Если не указать имя-пользователя:пароль, предполагается, что пользователем будет „guest“. Некоторые примеры:

Фрагмент URI Пример
порт 3301
хост:порт 127.0.0.1:3301
имя-пользователя:пароль@хост:порт notguest:sesame@mail.ru:3301

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

Метод разбора URI проиллюстрирован в Module uri.

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

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

#!/usr/bin/env tarantool
 box.cfg{
     listen              = os.getenv("LISTEN_URI"),
     memtx_memory        = 100000,
     pid_file            = "tarantool.pid",
     rows_per_wal        = 50
 }
 print('Starting ', arg[1])

и предположим, что переменная окружения LISTEN_URI содержит значение 3301, а также предположим, что в командной строке ~/tarantool/src/tarantool script.lua ARG. Тогда вывод на экране может выглядеть следующим образом:

$ export LISTEN_URI=3301
 $ ~/tarantool/src/tarantool script.lua ARG
 ... main/101/script.lua C> version 1.7.0-1216-g73f7154
 ... main/101/script.lua C> log level 5
 ... main/101/script.lua I> mapping 107374184 bytes for a shared arena...
 ... main/101/script.lua I> recovery start
 ... main/101/script.lua I> recovering from './00000000000000000000.snap'
 ... main/101/script.lua I> primary: bound to 0.0.0.0:3301
 ... main/102/leave_local_hot_standby I> ready to accept requests
 Starting  ARG
 ... main C> entering the event loop

Если необходимо начать интерактивную сессию на том же терминале по окончании инициализации, можно использовать console.start().

Конфигурационные параметры

Конфигурационные параметры выглядят так:

box.cfg{[ключ = значение [, ключ = значение ]]}

Поскольку в box.cfg может быть множество конфигурационных параметров, а некоторые параметры (такие как адреса директорий) являются полупостоянными, лучше всего хранить box.cfg в Lua-файле. Как правило, такой Lua-файл представляет собой файл инициализации, который указан в командной строке Tarantool’а.

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

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

The following sections describe all parameters for basic operation, for storage, for binary logging and snapshots, for replication, for networking, for logging, and for feedback.

Базовые параметры

background

Запуск сервера в виде фоновой задачи. Параметры log и pid_file должны быть не равны нулю, что это сработало.

Тип: логический
По умолчанию: false (ложь)
Динамический: нет
custom_proc_title

Добавление заданной строки к названию процесса сервера (что показано в столбце COMMAND для команд ps -ef и top -c.

Например, как правило, ps -ef показывает процесс Tarantool-сервера так:

$ ps -ef | grep tarantool
 1000     14939 14188  1 10:53 pts/2    00:00:13 tarantool <running>

Но если указан конфигурационный параметр custom_proc_title='sessions', вывод выглядит так:

$ ps -ef | grep tarantool
 1000     14939 14188  1 10:53 pts/2    00:00:16 tarantool <running>: sessions
Тип: строка
По умолчанию: null
Динамический: да
listen

Номер порта для чтения/записи данных или строка URI (унифицированный идентификатор ресурса). Значение, используемое по умолчанию, отсутствует, поэтому его обязательно указать, если подключение выполняется с удаленных клиентов, которые не используют “порт администрирования”. Подключения, выполняемые с помощью listen = URI, называются соединения по бинарному порту или бинарному протоколу.

Как правило, используется значение 3301.

Примечание

Реплика также привязана на этот порт и принимает соединения, но эти соединения служат только для чтения до тех пор, пока реплика не станет мастером.

Тип: целое число или строка
По умолчанию: null
Динамический: да
memtx_dir

Директория, где memtx хранит файлы снимков (.snap). Может относиться к work_dir. Если не указан, по умолчанию work_dir. См. также wal_dir.

Тип: строка
По умолчанию: «.»
Динамический: нет
pid_file

Хранение идентификатора процесса в данном файле. Может относиться к work_dir. Как правило, используется значение “tarantool.pid”.

Тип: строка
По умолчанию: null
Динамический: нет
read_only

Чтобы ввести экземпляр сервера в режим только для чтения, выполните команду box.cfg{read_only=true...}. После этого не будут выполняться любые запросы по изменению персистентных данных с ошибкой ER_READONLY. Режим только для чтения следует использовать в репликации типа мастер-реплика. Режим только для чтения не влияет на запросы по изменению данных в спейсах, которые считаются временными. Хотя режим только для чтения не позволяет серверу делать записи в WAL-файлы, запись диагностической информации в модуле log все равно осуществляется.

Тип: логический
По умолчанию: false (ложь)
Динамический: да

Setting read_only == true affects spaces differently depending on the options that were used during box.schema.space.create, as summarized by this chart:

Option Can be created? Can be written to? Is replicated? Is persistent?
(default) no no yes yes
temporary (временный) no yes no no
is_local no yes no yes
vinyl_dir

Директория, где хранятся файлы или поддиректории vinyl’а. Может относиться к work_dir. Если не указан, по умолчанию work_dir.

Тип: строка
По умолчанию: «.»
Динамический: нет
vinyl_timeout

The vinyl storage engine has a scheduler which does compaction. When vinyl is low on available memory, the compaction scheduler may be unable to keep up with incoming update requests. In that situation, queries may time out after vinyl_timeout seconds. This should rarely occur, since normally vinyl would throttle inserts when it is running low on compaction bandwidth. Compaction can also be ordered manually with index_object:compact().

Тип: число с плавающей запятой
По умолчанию: 60
Динамический: да
username

Имя пользователя в UNIX, на которое переключается система после запуска.

Тип: строка
По умолчанию: null
Динамический: нет
wal_dir

Директория, где хранятся файлы журнала упреждающей записи (.xlog). Может относиться к work_dir. Иногда в wal_dir и memtx_dir указываются разные значения, чтобы WAL-файлы и файлы снимков хранились на разных дисках. Если не указан, по умолчанию work_dir.

Тип: строка
По умолчанию: «.»
Динамический: нет
work_dir

Директория, где хранятся рабочие файлы базы данных. Экземпляр сервера переключается на work_dir с помощью chdir(2) после запуска. Может относиться к текущей директории.  Если не указан, по умолчанию = текущей директории. Другие параметры директории могут относиться к work_dir, например:

box.cfg{
     work_dir = '/home/user/A',
     wal_dir = 'B',
     memtx_dir = 'C'
 }

поместит xlog-файлы в /home/user/A/B, файлы снимков в /home/user/A/C, а все остальные файлы или поддиректории в /home/user/A.

Тип: строка
По умолчанию: null
Динамический: нет
worker_pool_threads

Максимальное количество потоков, используемых во время исполнения определенных внутренних процессов (сейчас socket.getaddrinfo() и coio_call()).

Тип: целое число
По умолчанию: 4
Динамический: да

Настройка хранения

memtx_memory

Количество памяти, которое Tarantool выделяет для фактического хранения кортежей, в байтах. При достижении предельного значения запросы вставки INSERT или обновления UPDATE выполняться не будут, выдавая ошибку ER_MEMORY_ISSUE. Сервер не выходит за установленный предел памяти memtx_memory при распределении кортежей, но есть дополнительная память, которая используется для хранения индексов и информации о подключении. В зависимости от рабочей конфигурации и загрузки, Tarantool может потреблять на 20% больше предела memtx_memory.

Тип: число с плавающей запятой
По умолчанию: 256 * 1024 * 1024 = 268435456
Dynamic: yes but it cannot be decreased
memtx_max_tuple_size

Размер наибольшего блока выделения памяти в байтах для движка базы данных memtx. Его можно увеличить, если есть необходимость в хранении больших кортежей. См. также vinyl_max_tuple_size.

Тип: целое число
По умолчанию: 1024 * 1024 = 1048576
Динамический: нет
memtx_min_tuple_size

Размер наименьшего блока выделения памяти в байтах. Его можно уменьшить, если кортежи очень малого размера. Значение должно быть от 8 до 1 048 280 включительно.

Тип: целое число
По умолчанию: 16
Динамический: нет
vinyl_bloom_fpr

Доля ложноположительного срабатывания фильтра Блума – подходящая вероятность того, что фильтр Блума выдаст ошибочный результат. Настройка vinyl_bloom_fpr – это значение, которое используется по умолчанию для одного из параметров в таблице Параметры space_object:create_index().

Тип: число с плавающей запятой
По умолчанию = 0.05
Динамический: нет
vinyl_cache

The cache size for the vinyl storage engine, in bytes. The cache can be resized dynamically.

Тип: целое число
По умолчанию = 128 * 1024 * 1024 = 134217728
Динамический: да
vinyl_max_tuple_size

Размер наибольшего блока выделения памяти в байтах для движка базы данных vinyl. Его можно увеличить, если есть необходимость в хранении больших кортежей. См. также memtx_max_tuple_size.

Тип: целое число
По умолчанию: 1024 * 1024 = 1048576
Динамический: нет
vinyl_memory

Максимальное количество байтов оперативной памяти, которые использует vinyl.

Тип: целое число
По умолчанию = 128 * 1024 * 1024 = 134217728
Dynamic: yes but it cannot be decreased
vinyl_page_size

Размер страницы в байтах. Страница представляет собой блок чтения и записи для операций на диске vinyl. Настройка vinyl_page_size – это значение, которое используется по умолчанию для одного из параметров в таблице :ref:`Параметры space_object:create_index() `.

Тип: целое число
По умолчанию = 8 * 1024 = 8192
Динамический: нет
vinyl_range_size

Максимальный размер диапазона для vinyl’а. Настройка vinyl_range_size – это значение, которое используется по умолчанию для одного из параметров в таблице :ref:`Параметры space_object:create_index() `.

Тип: целое число
По умолчанию = 1024 * 1024 * 1024 = 1073741824
Динамический: нет
vinyl_run_count_per_level

Максимальное количество забегов на уровень журнально-структурированного дерева со слиянием в vinyl’е. Настройка vinyl_run_count_per_level – это значение, которое используется по умолчанию для одного из параметров в таблице :ref:`Параметры space_object:create_index() `.

Тип: целое число
По умолчанию = 2
Динамический: нет
vinyl_run_size_ratio

Отношение размеров различных уровней журнально-структурированного дерева со слиянием. Настройка vinyl_run_size_ratio – это значение, которое используется по умолчанию для одного из параметров в таблице :ref:`Параметры space_object:create_index() `.

Тип: число с плавающей запятой
По умолчанию = 3.5
Динамический: нет
vinyl_read_threads

Максимальное количество потоков чтения, которые vinyl может использовать в одновременных операциях, такие как ввод-вывод и компрессия.

Тип: целое число
По умолчанию = 1
Динамический: нет
vinyl_write_threads

Максимальное количество потоков записи, которые vinyl может использовать в одновременных операциях, такие как ввод-вывод и компрессия.

Тип: целое число
По умолчанию = 2
Динамический: нет

Демон создания контрольных точек

Демон создания контрольных точек – это постоянно работающий файбер. Периодически он может создавать файлы снимка (.snap), а затем может удалять старые файлы снимка.

Настройки конфигурации checkpoint_interval и checkpoint_count определяют длительность интервалов и количество снимков, которое должно присутствовать до начала удалений.

Tarantool garbage collector

The checkpoint daemon may activate the Tarantool garbage collector which deletes old files. This garbage collector is distinct from the Lua garbage collector which is for Lua objects, and distinct from a Tarantool garbage collector which specializes in handling shard buckets.

If the checkpoint daemon deletes an old snapshot file, then the Tarantool garbage collector will also delete any write-ahead log (.xlog) files which are older than the snapshot file and which contain information that is present in the snapshot file. It will also delete obsolete vinyl .run files.

The checkpoint daemon and the Tarantool garbage collector will not delete a file if:

  • идет резервное копирование, и файл еще не был скопирован (см. «Резервное копирование»), или
  • идет репликация, и файл еще не был передан на реплику (см. «Архитектуру механизма репликации»),
  • реплика подключается, или
  • реплика отстает. Ход выполнения на каждой реплике отслеживается. Если реплика далеко не актуальна, сервер останавливается, чтобы она могла обновиться. Если администратор делает вывод, что реплика окончательно недоступна, необходимо перезагрузить сервер или же (предпочтительно) удалить реплику из кластера.
checkpoint_interval

Промежуток времени между действиями демона создания контрольных точек в секундах. Если значение параметра checkpoint_interval больше нуля, и выполняется изменение базы данных, то демон создания контрольных точек будет вызывать box.snapshot каждые checkpoint_interval секунд, каждый раз создавая новый файл снимка. Если значение параметра checkpoint_interval равно нулю, то демон создания контрольных точек отключен.

Например:

box.cfg{checkpoint_interval=60}

приведет к созданию нового снимка базы данных демоном создания контрольных точек каждую минуту, если наблюдается активность в базе данных.

Тип: целое число
По умолчанию: 3600 (один час)
Динамический: да
checkpoint_count

Максимальное количество снимков, которые могут находиться в директории memtx_dir до того, как демон создания контрольных точек будет удалять старые снимки. Если значение checkpoint_count равно нулю, то демон создания контрольных точек не удаляет старые снимки. Например:

box.cfg{
     checkpoint_interval = 3600,
     checkpoint_count  = 10
 }

заставит демон создания контрольных точек создавать снимок каждый час до тех пор, пока не будет создано десять снимков. После этого самый старый снимок (а также любые связанные с ним WAL-файлы) перед созданием нового снимка.

Следует помнить, что как упоминалось выше, снимки не удаляются, если выполняется репликация, и файл еще не был передан на реплику. Таким образом, параметр checkpoint_count бесполезен, если какая-то реплика неактивна.

Тип: целое число
По умолчанию: 2
Динамический: да

Записи в бинарный журнал и создание снимков

force_recovery

Если значение force_recovery равно true (правда), Tarantool пытается продолжать работу при обнаружении ошибки во время чтения файла снимка (при запуске экземпляра сервера) или файла журнала упреждающей записи (при запуске экземпляра сервера или применении обновлений к реплике): пропускает нерабочие записи, считывает максимальное количество данных и пересобирает файл.

В остальных случаях Tarantool прерывает восстановление на ошибке чтения.

Тип: логический
По умолчанию: true
Динамический: нет
rows_per_wal

Количество записей журнала, которое хранится в отдельном WAL-файле. При достижении предельного значения Tarantool создает другой WAL-файл под названием <первый-lsn-в-журнале>.xlog. Эту функцию можно использовать для простого резервного копирования на основе rsync.

Тип: целое число
По умолчанию: 500000
Динамический: нет
wal_max_size

The maximum number of bytes in a single write-ahead log file. When a request would cause an .xlog file to become larger than wal_max_size, Tarantool creates another WAL file – the same effect that happens when the rows_per_wal limit is reached.

Тип: целое число
Default: 268435456 (256 * 1024 * 1024)
Динамический: нет
snap_io_rate_limit

Уменьшение загрузки box.snapshot при выполнении операций вставки, обновления и удаления (INSERT/UPDATE/DELETE) путем установки предела скорости записи на диск – количества мегабайт в секунду. Того же эффекта можно достичь, разделив директории wal_dir и memtx_dir и перенося снимки на отдельный диск.

Тип: число с плавающей запятой
По умолчанию: null
Динамический: да
wal_mode

Определение синхронизации работы файбера с журналом упреждающей записи:

  • none: журнал упреждающей записи не поддерживается;
  • write: файберы ожидают записи данных в журнал упреждающей записи (не fsync(2));
  • fsync: файберы ожидают данные, синхронизация fsync(2) следует за каждой операцией записи write(2);
Тип: строка
По умолчанию: «write»
Динамический: да
wal_dir_rescan_delay

Количество секунд между периодическим сканирование директории WAL-файла при проверке изменений в WAL-файле для целей репликации или горячего резервирования.

Тип: число с плавающей запятой
По умолчанию: 2
Динамический: нет

Горячее резервирование

hot_standby

Запуск сервера в режиме горячего резервирования.

Горячее резервирование – это функция, которая обеспечивает простое восстановление после отказа без репликации.

Предполагается, что есть два экземпляра сервера, использующих одну и ту же конфигурацию. Первый из них станет «основным» экземпляром. Тот, который запускается вторым, станет «резервным» экземпляром.

Чтобы создать резервный экземпляр, запустите второй экземпляр Tarantool-сервера на том же компьютере с теми же настройками конфигурации box.cfg – включая одинаковые директории и ненулевые URI – и с дополнительной настройкой конфигурации hot_standby = true. В ближайшее время вы увидите уведомление, которое заканчивается словами I> Entering hot standby mode (вход в режим горячего резервирования). Всё в порядке – это означает, что резервный экземпляр готов взять работу на себя, если основной экземпляр прекратит работу.

Резервный экземпляр начнет инициализацию и попытается заблокировать wal_dir, но не сможет, поскольку директория wal_dir заблокирована основным экземпляром. Поэтому резервный экземпляр входит в цикл, выполняя чтение журнала упреждающей записи, в который записывает данные основной экземпляр (поэтому два экземпляра всегда синхронизированы), и пытаясь произвести блокировку. Если основной экземпляр по какой-либо причине прекращает работу, блокировка снимается. В таком случае резервный экземпляр сможет заблокировать директорию на себя, подключится по адресу для прослушивания и станет основным экземпляром. В ближайшее время вы увидите уведомление, которое заканчивается словами I> ready to accept requests (готов принимать запросы).

Таким образом, если основной экземпляр прекращает работу, время простоя отсутствует.

Функция горячего резервирования не работает:

  • если wal_dir_rescan_delay = большое число (в Mac OS и FreeBSD); на этих платформах цикл запрограммирован на повторение каждые wal_dir_rescan_delay секунд.
  • если wal_mode = „none“; будет работать только при wal_mode = 'write' или wal_mode = 'fsync'.
  • со спейсами, созданными на движке vinyl engine = „vinyl“; работает с движком memtx engine = 'memtx'.
Тип: логический
По умолчанию: false (ложь)
Динамический: нет

Replication

replication

Если replication не содержит пустую строку, экземпляр считается репликой. Реплика попытается подключиться к мастеру, указанному в параметре replication по URI (унифицированному идентификатору ресурса), например:

konstantin:secret_password@tarantool.org:3301

Если в наборе реплик более одного источника репликации, укажите массив URI, например (замените „uri“ и „uri2“ в данном примере на рабочие URI):

box.cfg{ replication = { „uri1“, „uri2“ } }

Если один из URI «свой» – то есть один URI принадлежит экземпляру, где выполняется box.cfg{} – он не принимается во внимание. Таким образом, можно использовать одну и ту же настройку параметра replication на нескольких экземплярах сервера, как показано в этих примерах.

По умолчанию, пользователем считается „guest“.

Реплика в режиме только для чтения не принимает запросы по изменению данных по порту для прослушивания.

Параметр replication является динамическим, то есть для входа в режим мастера необходимо просто присвоить параметру replication пустую строку и выполнить следующее:

box.cfg{ replication = новое-значение }

Тип: строка
По умолчанию: null
Динамический: да
replication_timeout

Реплика отправляет сообщения контрольного сигнала на мастер каждую секунду, и мастер запрограммирован на автоматическое переподключение, если он не получает сообщения контрольного сигнала дольше количества секунд, указанного в replication_timeout.

См. дополнительную информацию в разделе Мониторинг набора реплик.

Тип: целое число
По умолчанию: 1
Динамический: да
replication_connect_timeout

The number of seconds that a replica will wait when trying to connect to a master in a cluster. See orphan status for details.

This parameter is different from replication_timeout, which is only used to automatically reconnect replication when it gets no heartbeats.

Тип: число с плавающей запятой
По умолчанию: 4
Динамический: да
replication_connect_quorum

По умолчанию, реплика попытается подключиться ко всем мастерам или не запустится. (По умолчанию, рекомендуется, чтобы у всех реплик был одинаковый UUID набора реплик).

Однако, если указать replication_connect_quorum = N, где N означает число больше или равное нулю, это будет означать, что реплике нужно подключиться к N количеству мастеров.

This parameter has effect during bootstrap and during configuration update. Setting replication_connect_quorum = 0 makes Tarantool require no immediate reconnect only in case of recovery. See orphan status for details.

Пример:

box.cfg{replication_connect_quorum=2}
Тип: целое число
По умолчанию: null
Динамический: да
replication_skip_conflict

By default, if a replica adds a unique key that another replica has added, replication stops with error = ER_TUPLE_FOUND.

However, by specifying replication_skip_conflict = true, users can state that such errors may be ignored.

Пример:

box.cfg{replication_skip_conflict=true}
Тип: логический
По умолчанию: false (ложь)
Динамический: да
replication_sync_lag

The maximum lag allowed for a replica. When a replica syncs (gets updates from a master), it may not catch up completely. The number of seconds that the replica is behind the master is called the «lag». Syncing is considered to be complete when the replica’s lag is less than or equal to replication_sync_lag.

If a user sets replication_sync_lag to nil or to 365 * 100 * 86400 (TIMEOUT_INFINITY), then lag does not matter – the replica is always considered to be «synced». Also, the lag is ignored (assumed to be infinite) in case the master is running Tarantool older than 1.7.7, which does not send heartbeat messages.

This parameter is ignored during bootstrap. See orphan status for details.

Тип: число с плавающей запятой
Default: 10
Динамический: да
replication_sync_timeout

The number of seconds that a replica will wait when trying to sync with a master in a cluster, or a quorum of masters, after connecting or during configuration update. This could fail indefinitely if replication_sync_lag is smaller than network latency, or if the replica cannot keep pace with master updates. If replication_sync_timeout expires, the replica enters orphan status.

Тип: число с плавающей запятой
Default: 300
Динамический: да
replicaset_uuid

Как описано в разделе «Архитектура механизма репликации», каждый набор реплик идентифицируется по Универсальному уникальному идентификатору (UUID), который называется UUID набора реплик, и каждый экземпляр идентифицируется по UUID экземпляра.

Как правило, достаточно позволить системе сгенерировать и форматировать строки, содержащие UUID, которые будут храниться постоянно.

Однако, некоторые администраторы предпочитают сохранять конфигурацию Tarantool’а в центральном репозитории, например, Apache ZooKeeper. Они могут самостоятельно присвоить значения экземплярам (instance_uuid) и набору реплик (replicaset_uuid) при первом запуске.

Общие правила:

  • Значения должны быть действительно уникальными; они не должны одновременно принадлежать другим экземплярам или наборам реплик в той же инфраструктуре.
  • Значения должны использоваться постоянно, неизменно с первого запуска (первоначальные значения хранятся в файлах снимков и проверяются при каждом перезапуске системы).
  • Значения должны соответствовать требованиям RFC 4122. Нулевой UUID не допускается.

Формат UUID включает в себя шестнадцать октетов, представленных в виде 32 шестнадцатеричных чисел (с основанием 16) в пяти группах, разделенных дефисами в форме 8-4-4-4-12 – 36 символов (32 буквенно-цифровых символа и четыре дефиса).

Пример:

box.cfg{replicaset_uuid='7b853d13-508b-4b8e-82e6-806f088ea6e9'}
Тип: строка
По умолчанию: null
Динамический: нет
instance_uuid

Для целей администрирования репликации можно самостоятельно присвоить универсально уникальные идентификаторы экземпляру (instance_uuid) и набору реплик (replicaset_uuid) вместо использования сгенерированных системой значений.

Для получения подробной информации см. описание параметра replicaset_uuid.

Пример:

box.cfg{instance_uuid='037fec43-18a9-4e12-a684-a42b716fcd02'}
Тип: строка
По умолчанию: null
Динамический: нет

Работа с сетями

io_collect_interval

Экземпляр уходит в режим ожидания на io_collect_interval секунд между итерациями событийного цикла. Это можно использовать для снижения загрузки процессора в системах с большим количество клиентских соединений, но нечастыми запросами (например, каждое соединение передает лишь небольшое количество запросов в секунду).

Тип: число с плавающей запятой
По умолчанию: null
Динамический: да
net_msg_max

To handle messages, Tarantool allocates fibers. To prevent fiber overhead from affecting the whole system, Tarantool restricts the number of fibers to net_msg_max so that some pending requests are blocked.

On powerful systems, increase net_msg_max and the scheduler will immediately start processing pending requests.

On weaker systems, decrease net_msg_max and the overhead may decrease although this may take some time because the scheduler must wait until alrady-running requests finish.

On typical systems, the default value (768) is correct.

Тип: целое число
Default: 768
Динамический: да
readahead

Размер буфера опережающего считывания, связанный с клиентским соединением. Чем больше буфер, тем больше памяти потребляет активное соединение и тем больше запросов можно считать из буфера операционной системы за отдельный системный вызов. Общее правило состоит в том, чтобы убедиться, что буфер может содержать как минимум несколько десятков соединений. Таким образом, если размер стандартного кортежа в запросе значительный, например, несколько килобайтов или даже мегабайтов, следует увеличить размер буфера опережающего считывания. Если не используется пакетная обработка запросов, будет целесообразно оставить значение, используемое по умолчанию.

Тип: целое число
По умолчанию: 16320
Динамический: да

Запись в журнал

log_level

Уровень детализации записей журнала. Есть 7 уровней:

  • 1 – SYSERROR
  • 2 – ERROR
  • 3 – CRITICAL
  • 4 – WARNING
  • 5 – INFO
  • 6 – VERBOSE
  • 7 – DEBUG

Задав значение параметра log_level, можно включить запись в журнал всех событий заданного уровня или ниже. По умолчанию, Tarantool выводит записи в стандартный поток сообщений об ошибках, но это можно изменить с помощью конфигурационного параметра log.

Тип: целое число
По умолчанию: 5
Динамический: да

Внимание: до версии Tarantool’а 1.7.5 было только 6 уровней, из них шестым был уровень DEBUG. Начиная с версии Tarantool’а 1.7.5 VERBOSE становится уровнем 6, а DEBUG – уровнем 7. VERBOSE представляет собой новый уровень для мониторинга повторяющихся событий, которые бы привели к слишком большому количеству записей журнала при использовании уровня INFO.

log

По умолчанию, Tarantool выводит записи в стандартный поток сообщений об ошибках (stderr). Если задан параметр log, Tarantool отправит записи журнала в файл, в конвейер или в системный журнал syslog.

Example setting for sending the log to a file:

box.cfg{log = 'tarantool.log'}
 -- или
 box.cfg{log = 'file: tarantool.log'}

Откроется файл tarantool.log для вывода в директории сервера, используемой по умолчанию. Если в строке log нет префикса или есть префикс «file:», то строка считается путем к файлу.

Example setting for sending the log to a pipe:

box.cfg{log = '| cronolog tarantool.log'}
 -- или
 box.cfg{log = 'pipe: cronolog tarantool.log'}'

Запустится программа cronolog при запуске сервера, которая будет отправлять все сообщения журнала на стандартный вывод (stdin) в cronolog. Если строка log начинается с „|“ или содержит префикс «pipe:», то строка считается Unix-конвейером.

Example setting for sending the log to syslog:

box.cfg{log = 'syslog:identity=tarantool'}
-- or
box.cfg{log = 'syslog:facility=user'}
-- or
box.cfg{log = 'syslog:identity=tarantool,facility=user'}
-- or
box.cfg{log = 'syslog:server=unix:/dev/log'}

If the log string begins with «syslog:», then it is interpreted as a message for the syslogd program which normally is running in the background of any Unix-like platform. The setting can be „syslog:“, „syslog:facility=…“, „syslog:identity=…“, „syslog:server=…“, or a combination.

The syslog:identity setting is an arbitrary string which will be placed at the beginning of all messages. The default value is: tarantool.

The syslog:facility setting is currently ignored but will be used in the future. The value must be one of the syslog keywords, which tell syslogd where the message should go. The possible values are: auth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, syslog, user, uucp, local0, local1, local2, local3, local4, local5, local6, local7. The default value is: user.

The syslog:server setting is the locator for the syslog server. It can be a Unix socket path beginning with «unix:», or an ipv4 port number. The default socket value is: dev/log (on Linux) or /var/run/syslog (on Mac OS). The default port value is: 514, the UDP port.

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

Тип: строка
По умолчанию: null
Динамический: нет
log_nonblock

Если значение log_nonblock равно true (правда), Tarantool не блокирует дескриптор файла журнала, когда он не готов вести запись, а вместо этого сбрасывает сообщение. Если задан высокий уровень log_level,и много сообщений попадают в файл журнала, перевод log_nonblock в true может улучшить производительность ценой потери некоторых сообщений журнала.

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

Тип: логический
По умолчанию: true
Динамический: нет
too_long_threshold

Если обработка запроса занимает дольше времени, чем заданное значение (в секундах), в журнал заносится соответствующее предупреждение. Сработает, только если в log_level задан уровень 4 (WARNING) или выше.

Тип: число с плавающей запятой
По умолчанию: 0.5
Динамический: да
log_format

Данные в журнал записываются в двух форматах:

  • „plain“ (по умолчанию) или
  • „json“ (более детально с JSON-метками).

Вот как будет выглядеть запись в журнале после выполнения box.cfg{log_format='plain'}:

2017-10-16 11:36:01.508 [18081] main/101/interactive I> set 'log_format' configuration option to "plain"

Вот как будет выглядеть запись в журнале после выполнения box.cfg{log_format='json'}:

{"time": "2017-10-16T11:36:17.996-0600",
 "level": "INFO",
 "message": "set 'log_format' configuration option to \"json\"",
 "pid": 18081,|
 "cord_name": "main",
 "fiber_id": 101,
 "fiber_name": "interactive",
 "file": "builtin\/box\/load_cfg.lua",
 "line": 317}

В простом формате (log_format='plain') запись содержит время, идентификатор процесса, имя шнура, идентификатор файбера fiber_id, имя файбера fiber_name, :ref:`уровень записи в журнал <cfg_logging-log_level>`и сообщение.

В JSON-формате (log_format='json') запись содержит все вышеперечисленное с соответствующими метками, а также имя файла и номер строки Tarantool-источника.

Тип: строка
По умолчанию: „plain“
Динамический: да

Пример записи в журнал

Данный пример проиллюстрирует ротацию файлов журнала, то есть что происходит, когда экземпляр сервера производит запись в журнал? а при архивировании используются сигналы.

Запустите две оболочки, терминал №1 и терминал №2.

На терминале №1 запустите интерактивную сессию Tarantool’а, затем укажите, что запись в журнал ведется в файл Log_file, а затем поместите сообщение «Log Line #1» в файл журнала:

box.cfg{log='Log_file'}
 log = require('log')
 log.info('Log Line #1')

На терминале №2 используйте команду mv, чтобы файл журнала назывался Log_file.bak. Результатом будет то, что следующее сообщение журнала пойдет в файл Log_file.bak.

mv Log_file Log_file.bak

На терминале №1 поместите сообщение «Log Line #2» в файл журнала.

log.info('Log Line #2')

На терминале №2 используйте команду ps, чтобы найти ID процесса экземпляра Tarantool’а.

ps -A | grep tarantool

На терминале №2 используйте команду kill -HUP для отправки сигнала SIGHUP на экземпляр Tarantool’а. Результат: Tarantool снова откроет Log_file, и следующее сообщение журнала пойдет в Log_file. (Тот же результат можно получить путем выполнения команды log.rotate() на экземпляре.)

kill -HUP process_id

На терминале №1 поместите сообщение «Log Line #3» в файл журнала.

log.info('Log Line #3')

На терминале №2 используйте команду less для просмотра файлов. Log_file.bak будет содержать следующие строки, но дата и время будут указаны в зависимости от времени выполнения примера:

2015-11-30 15:13:06.373 [27469] main/101/interactive I> Log Line #1`
 2015-11-30 15:14:25.973 [27469] main/101/interactive I> Log Line #2`

а Log_file будет содержать

log file has been reopened
 2015-11-30 15:15:32.629 [27469] main/101/interactive I> Log Line #3

Feedback

By default a Tarantool daemon sends a small packet once per hour, to https://feedback.tarantool.io. The packet contains three values from box.info: box.info.version, box.info.uuid, and box.info.cluster_uuid. By changing the feedback configuration parameters, users can adjust or turn off this feature.

feedback_enabled

Whether to send feedback.

If this is set to true, feedback will be sent as described above. If this is set to false, no feedback will be sent.

Тип: логический
По умолчанию: true
Динамический: да
feedback_host

The address to which the packet is sent. Usually the recipient is Tarantool, but it can be any URL.

Тип: строка
Динамический: да
feedback_interval

The number of seconds between sendings, usually 3600 (1 hour).

Тип: число с плавающей запятой
Default: 3600
Динамический: да

Устаревшие параметры

Данные параметры объявлены устаревшими с версии Tarantool’а 1.7.4:

coredump

Устаревший, не использовать.

Тип: логический
По умолчанию: false (ложь)
Динамический: нет
logger

Устаревший, заменен параметром log. Параметр был лишь переименован, его тип, значения и семантика остались прежними.

logger_nonblock

Устаревший, заменен параметром log_nonblock. Параметр был лишь переименован, его тип, значения и семантика остались прежними.

panic_on_snap_error

Устаревший, заменен параметром force_recovery.

Если при чтении файла снимка произошла ошибка (при запуске экземпляра сервера), прервать выполнение.

Тип: логический
По умолчанию: true
Динамический: нет
panic_on_wal_error

Устаревший, заменен параметром force_recovery.

Тип: логический
По умолчанию: true
Динамический: да
replication_source

Устаревший, заменен параметром replication. Параметр был лишь переименован, его тип, значения и семантика остались прежними.

slab_alloc_arena

Устаревший, заменен параметром memtx_memory.

Количество памяти, которое Tarantool выделяет для фактического хранения кортежей, в гигабайтах. При достижении предельного значения запросы вставки INSERT или обновления UPDATE выполняться не будут, выдавая ошибку ER_MEMORY_ISSUE. Сервер не выходит за установленный предел памяти memtx_memory при распределении кортежей, но есть дополнительная память, которая используется для хранения индексов и информации о подключении. В зависимости от рабочей конфигурации и загрузки, Tarantool может потреблять на 20% больше установленного предела.

Тип: число с плавающей запятой
По умолчанию: 1.0
Динамический: нет
slab_alloc_factor

Устаревший, не использовать.

Множитель для вычисления размеров блоков памяти, в которых хранятся кортежи. Нижнее значение может привести к уменьшению потерь памяти в зависимости от общего объема доступной памяти и распределения размеров элементов.

Тип: число с плавающей запятой
По умолчанию: 1.1
Динамический: нет
slab_alloc_maximal

Устаревший, заменен параметром memtx_max_tuple_size. Параметр был лишь переименован, его тип, значения и семантика остались прежними.

slab_alloc_minimal

Устаревший, заменен параметром memtx_min_tuple_size. Параметр был лишь переименован, его тип, значения и семантика остались прежними.

snap_dir

Устаревший, заменен параметром memtx_dir. Параметр был лишь переименован, его тип, значения и семантика остались прежними.

snapshot_period

Устаревший, заменен параметром checkpoint_interval. Параметр был лишь переименован, его тип, значения и семантика остались прежними.

snapshot_count

Устаревший, заменен параметром checkpoint_count. Параметр был лишь переименован, его тип, значения и семантика остались прежними.