Tarantool CE/EE Documentation portal logo
Помощь

Справочник по конфигурации (box.cfg)

В этом разделе описаны все параметры конфигурации, которые можно задать в коде с помощью API box.cfg.

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

background

Начиная с версии 1.6.2.

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

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_BACKGROUND

Динамический: нет

coredump

Создание файлов дампа памяти (coredump).

Обычно для получения дампов памяти администратору необходимо выполнить ulimit -c unlimited (или задать соответствующие параметры в файле модуля systemd) перед запуском процесса Tarantool. Если параметр coredump включен, Tarantool самостоятельно устанавливает соответствующее ограничение ресурса, и администратору не нужно выполнять ulimit -c unlimited (см. man 3 setrlimit).

Этот параметр также задает состояние атрибута dumpable, который включен по умолчанию, но может быть сброшен при определенных обстоятельствах (см. man 2 prctl, PR_SET_DUMPABLE).

Тип: boolean

Переменная окружения: TT_COREDUMP

Значение по умолчанию: false

Динамический: нет

custom_proc_title

Начиная с версии 1.6.7.

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

Например, обычно ps -ef отображает процесс сервера Tarantool следующим образом:

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

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

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

Тип: string

Значение по умолчанию: null

Переменная окружения: TT_CUSTOM_PROC_TITLE

Динамический: да

listen

Начиная с версии 1.6.4.

Номер порта для чтения/записи данных или строка URI (универсальный идентификатор ресурса). Значение по умолчанию отсутствует, поэтому параметр должен быть указан, если подключения осуществляются от удаленных клиентов, не использующих "административный порт". Подключения, созданные с помощью listen = {URI}, называются подключениями по «бинарному порту» или «бинарному протоколу».

Типичное значение – 3301.

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

Начиная с версии 2.10.0 можно указать несколько URI, а номер порта всегда хранится как целочисленное значение.

Тип: integer или string

Значение по умолчанию: null

Переменная окружения: TT_LISTEN

Динамический: да

memtx_dir

Начиная с версии 1.7.4.

Каталог, в котором memtx хранит файлы снимков (.snap). Относительный путь в этом параметре интерпретируется относительно work_dir.

По умолчанию файлы снимков и WAL хранятся в одном каталоге. Однако можно задать разные значения для параметров memtx_dir и wal_dir, чтобы хранить их на разных физических дисках для повышения производительности.

Тип: string

Значение по умолчанию: "."

Переменная окружения: TT_MEMTX_DIR

Динамический: нет

pid_file

Начиная с версии 1.4.9.

Идентификатор процесса сохраняется в этом файле. Путь может быть относительным к work_dir. Типичное значение – «tarantool.pid».

Тип: string

Значение по умолчанию: null

Переменная окружения: TT_PID_FILE

Динамический: нет

read_only

Начиная с версии 1.7.1.

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

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_READ_ONLY

Динамический: да

Установка значения read_only == true по-разному влияет на спейсы в зависимости от параметров, заданных при вызове box.schema.space.create, как показано в таблице:

Параметр

Можно

Можно

Реплицируется?

Хранится

(по умолчанию)

нет

нет

да

да

temporary

нет

да

нет

нет

is_local

нет

да

нет

да

#### sql_cache_size {params[anchor=cfg_basic-sql_cache_size]} Начиная с версии 2.3.1.

Максимальный объем памяти в байтах для кэша подготовленных SQL-выражений. (Фактически используемый объем памяти в байтах можно узнать с помощью box.info.sql().cache.size.)

Тип: number

Значение по умолчанию: 5242880

Переменная окружения: TT_SQL_CACHE_SIZE

Динамический: да

vinyl_dir

Начиная с версии 1.7.1.

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

Тип: string

Значение по умолчанию: "."

Переменная окружения: TT_VINYL_DIR

Динамический: нет

vinyl_timeout

Начиная с версии 1.7.5.

В движке хранения vinyl есть планировщик, выполняющий компактизацию. При нехватке доступной памяти планировщик компактизации может не успевать обрабатывать входящие запросы на обновление. В такой ситуации запросы могут завершаться по истечении времени ожидания в vinyl_timeout секунд. Это должно происходить редко, так как обычно vinyl ограничивает скорость вставки при нехватке ресурсов для компактизации. Компактизацию также можно запустить вручную с помощью index_object:compact().

Тип: float

Значение по умолчанию: 60

Переменная окружения: TT_VINYL_TIMEOUT

Динамический: да

username

Начиная с версии 1.4.9.

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

Тип: string

Значение по умолчанию: null

Переменная окружения: TT_USERNAME

Динамический: нет

wal_dir

Начиная с версии 1.6.2.

Каталог, в котором хранятся файлы журнала предзаписи (.xlog). Относительный путь в этом параметре интерпретируется относительно work_dir.

По умолчанию файлы WAL и снимки хранятся в одном каталоге. Однако можно задать разные значения для параметров wal_dir и memtx_dir, чтобы хранить их на разных физических дисках для повышения производительности.

Тип: string

Значение по умолчанию: "."

Переменная окружения: TT_WAL_DIR

Динамический: нет

work_dir

Начиная с версии 1.4.9.

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

Тип: string

Значение по умолчанию: null

Переменная окружения: TT_WORK_DIR

Динамический: нет

worker_pool_threads

Начиная с версии 1.7.5.

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

Тип: integer

Значение по умолчанию: 4

Переменная окружения: TT_WORKER_POOL_THREADS

Динамический: да

strip_core

Начиная с версии 2.2.2.

Определяет, должны ли файлы дампа памяти включать память, выделенную для кортежей. (Этот объем может быть большим, если Tarantool работает под высокой нагрузкой.) Значение true означает «не включать». В более ранней версии Tarantool значением по умолчанию для этого параметра было false.

Тип: boolean

Значение по умолчанию: true

Переменная окружения: TT_STRIP_CORE

Динамический: нет

memtx_use_mvcc_engine

Начиная с версии 2.6.1.

Если установлено значение true, включается менеджер транзакций.

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_MEMTX_USE_MVCC_ENGINE

Динамический: нет

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

memtx_memory

Начиная с версии 1.7.4.

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

Тип: float

Значение по умолчанию: 256 * 1024 * 1024 = 268435456 байт

Минимум: 33554432 байт (32 МБ)

Переменная окружения: TT_MEMTX_MEMORY

Динамический: да, но не может быть уменьшено

memtx_max_tuple_size

Начиная с версии 1.7.4.

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

Тип: integer

Значение по умолчанию: 1024 * 1024 = 1048576 байт

Переменная окружения: TT_MEMTX_MAX_TUPLE_SIZE

Динамический: да

memtx_min_tuple_size

Начиная с версии 1.7.4.

Размер наименьшей единицы выделения памяти. Значение можно уменьшить, если большинство кортежей очень маленькие.

Тип: integer

Значение по умолчанию: 16 байт

Возможные значения: от 8 до 1048280 включительно

Переменная окружения: TT_MEMTX_MIN_TUPLE_SIZE

Динамический: нет

memtx_allocator

Начиная с версии 2.10.0.

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

  • system – память выделяется по мере необходимости с проверкой того, что квота не превышена. Аллокатор основан на функции malloc.
  • smallslab-аллокатор. Аллокатор повторно использует блок памяти для выделения объектов одного типа. Учтите, что этот аллокатор подвержен неустранимой фрагментации при определенных нагрузках, поэтому в таких случаях можно переключиться на system.

Тип: string

Значение по умолчанию: 'small'

Переменная окружения: TT_MEMTX_ALLOCATOR

Динамический: нет

memtx_sort_threads

Начиная с версии: 3.0.0.

Количество потоков из пула потоков, используемых для сортировки ключей вторичных индексов при загрузке базы данных memtx. Минимальное значение – 1, максимальное – 256. По умолчанию используются все доступные ядра.

Тип: integer

Значение по умолчанию: box.NULL

Переменная окружения: TT_MEMTX_SORT_THREADS

Динамический: нет

slab_alloc_factor

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

См. также: slab_alloc_granularity

Тип: float

Значение по умолчанию: 1.05

Возможные значения: от 1 до 2 включительно

Переменная окружения: TT_SLAB_ALLOC_FACTOR

Динамический: нет

slab_alloc_granularity

Начиная с версии 2.8.1.

Задает гранулярность (в байтах) выделения памяти в аллокаторе small. Значение memtx.slab_alloc_granularity должно соответствовать следующим условиям:

  • Значение является степенью двойки.
  • Значение больше или равно 4.

Ниже приведены несколько рекомендаций по настройке параметра memtx.slab_alloc_granularity:

  • Если кортежи в спейсе маленькие и имеют примерно одинаковый размер, задайте значение 4 байта для экономии памяти.
  • Если кортежи имеют разные размеры, увеличьте значение параметра, чтобы выделять кортежи из одного mempool (пула памяти).

См. также: slab_alloc_factor

Тип: number

Значение по умолчанию: 8 байт

Переменная окружения: TT_SLAB_ALLOC_GRANULARITY

Динамический: нет

vinyl_bloom_fpr

Начиная с версии 1.7.4.

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

Тип: float

Значение по умолчанию: 0.05

Переменная окружения: TT_VINYL_BLOOM_FPR

Динамический: нет

vinyl_cache

Начиная с версии 1.7.4. Размер кэша для движка хранения vinyl. Размер кэша можно изменять динамически.

Тип: integer

Значение по умолчанию: 128 * 1024 * 1024 = 134217728 байт

Переменная окружения: TT_VINYL_CACHE

Динамический: да

vinyl_max_tuple_size

Начиная с версии 1.7.5.

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

Тип: integer

Значение по умолчанию: 1024 * 1024 = 1048576 байт

Переменная окружения: TT_VINYL_MAX_TUPLE_SIZE

Динамический: нет

vinyl_memory

Начиная с версии 1.7.4.

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

Тип: integer

Значение по умолчанию: 128 * 1024 * 1024 = 134217728 байт

Переменная окружения: TT_VINYL_MEMORY

Динамический: да, но не может быть уменьшено

vinyl_page_size

Начиная с версии 1.7.4.

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

Тип: integer

Значение по умолчанию: 8 * 1024 = 8192 байт

Переменная окружения: TT_VINYL_PAGE_SIZE

Динамический: нет

vinyl_range_size

Начиная с версии 1.7.4.

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

Если vinyl_range_size не равен nil и не равен 0, то это значение используется по умолчанию для параметра range_size в таблице Параметры space_object:create_index().

Если vinyl_range_size равен nil или 0, а range_size не указан при создании индекса, то Tarantool задает значение позже, исходя из соображений производительности. Чтобы увидеть фактическое значение, используйте index_object:stat().range_size.

В версиях Tarantool до 1.10.2 значением по умолчанию для vinyl_range_size было 1073741824.

Тип: integer

Значение по умолчанию: nil

Переменная окружения: TT_VINYL_RANGE_SIZE

Динамический: нет

vinyl_run_count_per_level

Начиная с версии 1.7.4.

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

Тип: integer

Значение по умолчанию: 2

Переменная окружения: TT_VINYL_RUN_COUNT_PER_LEVEL

Динамический: нет

vinyl_run_size_ratio

Начиная с версии 1.7.4.

Соотношение размеров различных уровней в LSM-дереве. Параметр vinyl_run_size_ratio является значением по умолчанию для одного из параметров в таблице Параметры space_object:create_index().

Тип: float

Значение по умолчанию: 3.5

Переменная окружения: TT_VINYL_RUN_SIZE_RATIO

Динамический: нет

vinyl_read_threads

Начиная с версии 1.7.5.

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

Тип: integer

Значение по умолчанию: 1

Переменная окружения: TT_VINYL_READ_THREADS

Динамический: нет

vinyl_write_threads

Начиная с версии 1.7.5.

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

Тип: integer

Значение по умолчанию: 4

Переменная окружения: TT_VINYL_WRITE_THREADS

Динамический: нет

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

checkpoint_wal_threshold .. cfg_checkpoint_daemon:

Демон контрольных точек

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

Работа демона контрольных точек основана на следующих параметрах конфигурации:

  • checkpoint_interval – новый снимок создается раз в заданный период.

: размер всех WAL-файлов, созданных с момента последнего снимка, превышает заданный предел.

При необходимости демон контрольных точек также активирует сборщик мусора Tarantool, который удаляет старые снимки и WAL-файлы.

Сборщик мусора Tarantool

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

Этот сборщик мусора вызывается в следующих случаях:

  • Когда количество снимков достигает предела, заданного параметром checkpoint_count. После создания нового снимка сборщик мусора Tarantool удаляет самый старый файл снимка и все связанные WAL-файлы.
  • Когда размер всех WAL-файлов, созданных с момента последнего снимка, достигает предела, заданного параметром checkpoint_wal_threshold.

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

Если старый файл снимка удаляется, сборщик мусора Tarantool также удаляет все файлы журнала предзаписи (.xlog), удовлетворяющие следующим условиям:

  • WAL-файлы старше файла снимка.
  • WAL-файлы содержат информацию, присутствующую в файле снимка. Сборщик мусора Tarantool также удаляет устаревшие .run-файлы vinyl.

Сборщик мусора Tarantool не удаляет файл в следующих случаях:

  • Реплика отстала.

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

checkpoint_interval

Начиная с версии 1.7.4.

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

Пример

box.cfg{ checkpoint_interval = 7200 }

В этом примере демон контрольных точек создает новый снимок базы данных каждые два часа при наличии активности.

Тип: integer

Значение по умолчанию: 3600 (один час)

Переменная окружения: TT_CHECKPOINT_INTERVAL

Динамический: да

checkpoint_count

Начиная с версии 1.7.4.

Максимальное количество снимков, хранящихся в каталоге memtx_dir. Если количество снимков после создания нового превышает это значение, сборщик мусора Tarantool удаляет старые снимки. Если параметр установлен в ноль, сборщик мусора не удаляет старые снимки.

Пример

box.cfg{    checkpoint_interval = 7200,    checkpoint_count  = 3}

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

Тип: integer

Значение по умолчанию: 2

Переменная окружения: TT_CHECKPOINT_COUNT

Динамический: да

checkpoint_wal_threshold

Начиная с версии 2.1.2.

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

Этот параметр позволяет администраторам решить проблему, которая может возникнуть при расчете объема дискового пространства, выделяемого для раздела, содержащего WAL-файлы.

Тип: integer

Значение по умолчанию: 10\^18 (большое число, поэтому по умолчанию ограничение фактически отсутствует) Переменная окружения: TT_CHECKPOINT_WAL_THRESHOLD

Динамический: да

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

force_recovery

Начиная с версии 1.7.4.

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

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

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_FORCE_RECOVERY

Динамический: нет

wal_max_size

Начиная с версии 1.7.4.

Максимальное количество байт в одном файле журнала упреждающей записи. Если запрос приведет к тому, что размер файла .xlog превысит wal_max_size, Tarantool создает новый WAL-файл.

Тип: integer

Значение по умолчанию: 268435456 (256 * 1024 * 1024) байт

Переменная окружения: TT_WAL_MAX_SIZE

Динамический: нет

snap_io_rate_limit

Начиная с версии 1.4.9.

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

Тип: float

Значение по умолчанию: null

Переменная окружения: TT_SNAP_IO_RATE_LIMIT

Динамический: да

wal_mode

Начиная с версии 1.6.2.

Задает режим синхронизации фибер-WAL-диск:

  • none: журнал упреждающей записи не ведется. Узел с параметром wal_mode, установленным в значение none, не может быть мастером репликации.
  • write: фиберы ожидают записи своих данных в журнал упреждающей записи (без fsync(2)).
  • fsync: фиберы ожидают записи своих данных, fsync(2) выполняется после каждого write(2).

Тип: string

Значение по умолчанию: "write"

Переменная окружения: TT_WAL_MODE

Динамический: нет

wal_dir_rescan_delay

Начиная с версии 1.6.2.

Интервал времени в секундах между периодическими сканированиями каталога файлов журнала упреждающей записи для проверки изменений в этих файлах в целях репликации или горячего резерва.

Тип: float

Значение по умолчанию: 2

Переменная окружения: TT_WAL_DIR_RESCAN_DELAY

Динамический: нет

wal_queue_max_size

Начиная с версии 2.8.1.

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

Тип: number

Значение по умолчанию: 16777216 байт

Переменная окружения: TT_WAL_QUEUE_MAX_SIZE

Динамический: да

wal_cleanup_delay

Начиная с версии 2.6.3.

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

Тип: number

Значение по умолчанию: 14400 секунд

Переменная окружения: TT_WAL_CLEANUP_DELAY

Динамический: да

wal_ext

Начиная с версии 2.11.0.

(Только в Enterprise Edition) Доступна возможность добавления вспомогательной информации к каждой записи журнала упреждающей записи. Например, можно включить сохранение старого и нового кортежа для каждой выполняемой операции CRUD. Эта информация может быть полезна для реализации утилиты CDC (Change Data Capture), преобразующей поток репликации данных.

Включить сохранение старых и новых кортежей можно следующим образом:

  • Установите параметры old и new в значение true для сохранения старых и новых кортежей в журнале упреждающей записи для всех спейсов.

    box.cfg {    wal_ext = { old = true, new = true }}
  • Для настройки этих параметров для отдельных спейсов используйте параметр spaces.

    box.cfg {    wal_ext = {        old = true, new = true,        spaces = {            space1 = { old = false },            space2 = { new = false }        }    }}

    Конфигурация для отдельных спейсов имеет приоритет над глобальной конфигурацией, поэтому для space1 в журнал добавляются только новые кортежи, а для space2 – только старые.

Записи с дополнительными полями реплицируются следующим образом:

  • Если реплика не поддерживает расширенный формат, настроенный на мастере, вспомогательные поля пропускаются.
  • Если конфигурации WAL-записей на реплике и мастере различаются, конфигурация мастера игнорируется.

Тип: map

Значение по умолчанию: nil

Переменная окружения: TT_WAL_EXT

Динамический: да

secure_erasing

Начиная с версии 3.0.0.

(Только в Enterprise Edition) Если установлено значение true, Tarantool перезаписывает файл данных несколько раз перед удалением, чтобы сделать восстановление удаленного файла невозможным. Параметр применяется как к файлам .xlog и .snap, так и к файлам данных Vinyl.

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_SECURE_ERASING

Динамический: да

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

hot_standby

Начиная с версии 1.7.4.

Определяет, следует ли запускать сервер в режиме hot standby (горячего резервирования).

Hot standby – это функция, обеспечивающая простую форму переключения при сбое без репликации.

Предполагается, что будут запущены два экземпляра сервера с одинаковой конфигурацией. Экземпляр, запущенный первым, станет "основным" (primary). Экземпляр, запущенный вторым, станет "резервным" (standby).

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

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

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

Функция hot standby не действует:

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

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_HOT_STANDBY

Динамический: нет

Репликация

replication

Начиная с версии 1.7.4.

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

{konstantin}:{secret_password}@{tarantool.org}:{3301}

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

box.cfg{ replication = { {*{'uri1'}*}, {*{'uri2'}*} } }

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

Имя пользователя по умолчанию – 'guest'.

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

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

box.cfg{ replication = {*{new-value}*} }

Тип: string

По умолчанию: null

Переменная окружения: TT_REPLICATION

Динамический: yes

replication_anon

Начиная с версии 2.3.1.

Реплика Tarantool может быть анонимной. Этот тип реплики доступен только для чтения (но запись во временные (temporary) и локальные (replica-local) спейсы все еще возможна), и он не присутствует в спейсе _cluster.

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

Чтобы сделать реплику анонимной, передайте параметр replication_anon=true в box.cfg и задайте для параметра read_only значение true.

Рассмотрим процесс начальной загрузки анонимной реплики. Предположим, у нас есть настроенный мастер с

box.cfg{listen=3301}

и созданным локальным спейсом под названием "loc":

box.schema.space.create('loc', {is_local=true})box.space.loc:create_index("pk")

Теперь, чтобы настроить анонимную реплику, нужно вызвать box.cfg, как обычно.

box.cfg{replication_anon=true, read_only=true, replication=3301}

Как упоминалось выше, параметр replication_anon может быть установлен в значение true только вместе с read_only. Экземпляр получит снимок мастера и начнет отслеживать его изменения. Он не получит идентификатора, поэтому значение его id останется равным нулю.

tarantool> box.info.id---- 0...tarantool> box.info.replication---- 1:    id: 1    uuid: 3c84f8d9-e34d-4651-969c-3d0ed214c60f    lsn: 4    upstream:    status: follow    idle: 0.6912029999985    peer:    lag: 0.00014615058898926...

Теперь можно использовать реплику. Например, можно выполнять вставки в локальное пространство:

tarantool> for i = 1,10 do    > box.space.loc:insert{i}    > end---...

Обратите внимание, что пока экземпляр является анонимным, нулевой компонент его vclock увеличивается:

tarantool> box.info.vclock---- {0: 10, 1: 4}...

Теперь переведем анонимную реплику в статус обычной:

tarantool> box.cfg{replication_anon=false}2019-12-13 20:34:37.423 [71329] main I> assigned id 2 to replica 6a9c2ed2-b9e1-4c57-a0e8-51a46def76612019-12-13 20:34:37.424 [71329] main/102/interactive I> set 'replication_anon' configuration option to false---...tarantool> 2019-12-13 20:34:37.424 [71329] main/117/applier/ I> subscribed2019-12-13 20:34:37.424 [71329] main/117/applier/ I> remote vclock {1: 5} local vclock {0: 10, 1: 5}2019-12-13 20:34:37.425 [71329] main/118/applierw/ C> leaving orphan mode

Реплика только что получила идентификатор 2. Теперь ее можно перевести в режим чтения и записи.

tarantool> box.cfg{read_only=false}2019-12-13 20:35:46.392 [71329] main/102/interactive I> set 'read_only' configuration option to false---...tarantool> box.schema.space.create('test')---- engine: memtxbefore_replace: 'function: 0x01109f9dc8'on_replace: 'function: 0x01109f9d90'ck_constraint: field_count: 0temporary: falseindex: is_local: falseenabled: falsename: testid: 513- created...tarantool> box.info.vclock---- {0: 10, 1: 5, 2: 2}...

Теперь реплика отслеживает свои изменения во 2-м компоненте vclock, как и ожидалось. С этого момента она также может стать мастером репликации.

Примечания:

  • Репликация с анонимного экземпляра невозможна.
  • Чтобы повысить анонимный экземпляр до обычного, сначала запустите его как анонимный, и только затем выполните box.cfg{replication_anon=false}
  • Для успешного снятия анонимности экземпляр должен реплицироваться с некоторого экземпляра в режиме чтения-записи, иначе его нельзя добавить в таблицу _cluster.

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_REPLICATION_ANON

Динамический: да

bootstrap_leader

Начиная с 3.0.0.

Лидер начальной загрузки для набора реплик. Можно передать URI, UUID или имя лидера начальной загрузки.

Чтобы указать лидера начальной загрузки вручную, необходимо задать для параметра bootstrap_strategy значение config, например:

box.cfg{    bootstrap_strategy = 'config',    bootstrap_leader = '127.0.0.1:3301',    replication = {'127.0.0.1:3301'},}

Тип: string

Значение по умолчанию: null

Переменная окружения: TT_BOOTSTRAP_LEADER

Динамический: да

bootstrap_strategy

Начиная с 2.11.0.

Задает стратегию начальной загрузки набора реплик. Доступны следующие стратегии:

  • auto: узел не загружается, если половина или более других узлов в наборе реплик не подключены. Например, если параметр replication содержит 2 или 3 узла, требуется 2 подключенных экземпляра. В случае 4 или 5 узлов требуется минимум 3 подключенных экземпляра. Кроме того, лидер начальной загрузки не может загрузиться, если каждый подключенный узел не выбрал его лидером начальной загрузки.
  • config: использовать указанный узел для начальной загрузки набора реплик. Чтобы указать лидера начальной загрузки, используйте параметр bootstrap_leader.
  • supervised: лидер начальной загрузки не выбирается автоматически, а должен быть назначен с помощью box.ctl.make_bootstrap_leader() на нужном узле.
  • legacy (устарело с 2.11.0): узел требует подключения указанного в replication_connect_quorum количества других узлов. Этот параметр добавлен для совместимости с текущими версиями Cartridge и может быть удален в будущем.

Тип: string

Значение по умолчанию: auto

Переменная окружения: TT_BOOTSTRAP_STRATEGY

Динамический: да

replication_connect_timeout

Начиная с версии 1.9.0.

Количество секунд, в течение которых реплика ожидает подключения к мастеру в кластере. Подробнее см. orphan status.

Этот параметр отличается от replication_timeout, который используется мастером для отключения реплики при отсутствии подтверждений получения сообщений heartbeat.

Тип: float

Значение по умолчанию: 30

Переменная окружения: TT_REPLICATION_CONNECT_TIMEOUT

Динамический: да

replication_connect_quorum

Устарело с 2.11.0.

Этот параметр действует, если для bootstrap_strategy задано значение legacy.

Задает количество узлов, которые должны быть запущены и работать для запуска набора реплик. Параметр действует во время начальной загрузки или обновления конфигурации. Установка параметра replication_connect_quorum в значение 0 приводит к тому, что Tarantool не требует немедленного переподключения только в случае восстановления. Подробнее см. Orphan status.

Пример:

box.cfg { replication_connect_quorum = 2 }

Тип: integer

Значение по умолчанию: null

Переменная окружения: TT_REPLICATION_CONNECT_QUORUM

Динамический: да

replication_skip_conflict

Начиная с версии 1.10.1.

По умолчанию, если реплика добавляет уникальный ключ, который уже добавила другая реплика, репликация останавливается с ошибкой ER_TUPLE_FOUND.

Однако, задав replication_skip_conflict = true, можно указать, что такие ошибки могут быть проигнорированы. Вместо сохранения поврежденной транзакции в xlog, она будет записана туда как NOP (No operation).

Пример:

box.cfg{replication_skip_conflict=true}

Тип: boolean

Значение по умолчанию: false

Переменная окружения: TT_REPLICATION_SKIP_CONFLICT

Динамический: да