Справочник по конфигурации (box.cfg)
В этом разделе описаны все параметры конфигурации, которые можно задать
в коде с помощью API box.cfg.
- background
- coredump
- custom_proc_title
- listen
- memtx_dir
- pid_file
- read_only
- sql_cache_size
- vinyl_dir
- vinyl_timeout
- username
- wal_dir
- work_dir
- worker_pool_threads
- strip_core
- memtx_use_mvcc_engine .. cfg_basic-background:
Начиная с версии 1.6.2.
Запуск сервера в качестве фоновой задачи. Для работы этого параметра значения параметров log и pid_file должны быть заданы.
Тип: boolean
Значение по умолчанию: false
Переменная окружения: TT_BACKGROUND
Динамический: нет
Создание файлов дампа памяти (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
Динамический: нет
Начиная с версии 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
Динамический: да
Начиная с версии 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
Динамический: да
Начиная с версии 1.7.4.
Каталог, в котором memtx хранит файлы снимков (.snap). Относительный
путь в этом параметре интерпретируется относительно
work_dir.
По умолчанию файлы снимков и WAL хранятся в одном каталоге. Однако можно
задать разные значения для параметров memtx_dir и
wal_dir, чтобы хранить их на разных физических
дисках для повышения производительности.
Тип: string
Значение по умолчанию: "."
Переменная окружения: TT_MEMTX_DIR
Динамический: нет
Начиная с версии 1.4.9.
Идентификатор процесса сохраняется в этом файле. Путь может быть
относительным к work_dir. Типичное значение –
«tarantool.pid».
Тип: string
Значение по умолчанию: null
Переменная окружения: TT_PID_FILE
Динамический: нет
Начиная с версии 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-выражений. (Фактически используемый объем памяти в байтах можно узнать с помощью box.info.sql().cache.size.)
Тип: number
Значение по умолчанию: 5242880
Переменная окружения: TT_SQL_CACHE_SIZE
Динамический: да
Начиная с версии 1.7.1.
Каталог, в котором будут храниться файлы или подкаталоги vinyl. Путь
может быть относительным к work_dir. Если не
указан, используется значение work_dir.
Тип: string
Значение по умолчанию: "."
Переменная окружения: TT_VINYL_DIR
Динамический: нет
Начиная с версии 1.7.5.
В движке хранения vinyl есть планировщик, выполняющий компактизацию. При
нехватке доступной памяти планировщик компактизации может не успевать
обрабатывать входящие запросы на обновление. В такой ситуации запросы
могут завершаться по истечении времени ожидания в vinyl_timeout секунд. Это должно
происходить редко, так как обычно vinyl ограничивает скорость вставки
при нехватке ресурсов для компактизации. Компактизацию также можно
запустить вручную с помощью
index_object:compact().
Тип: float
Значение по умолчанию: 60
Переменная окружения: TT_VINYL_TIMEOUT
Динамический: да
Начиная с версии 1.4.9.
Имя пользователя UNIX, на которое переключается процесс после запуска.
Тип: string
Значение по умолчанию: null
Переменная окружения: TT_USERNAME
Динамический: нет
Начиная с версии 1.6.2.
Каталог, в котором хранятся файлы журнала предзаписи (.xlog).
Относительный путь в этом параметре интерпретируется относительно
work_dir.
По умолчанию файлы WAL и снимки хранятся в одном каталоге. Однако можно
задать разные значения для параметров wal_dir и
memtx_dir, чтобы хранить их на разных физических
дисках для повышения производительности.
Тип: string
Значение по умолчанию: "."
Переменная окружения: TT_WAL_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
Динамический: нет
Начиная с версии 1.7.5.
Максимальное количество потоков, используемых при выполнении определенных внутренних процессов (в настоящее время socket.getaddrinfo() и coio_call()).
Тип: integer
Значение по умолчанию: 4
Переменная окружения: TT_WORKER_POOL_THREADS
Динамический: да
Начиная с версии 2.2.2.
Определяет, должны ли файлы дампа памяти включать память, выделенную для
кортежей. (Этот объем может быть большим, если Tarantool работает под
высокой нагрузкой.) Значение true означает «не включать». В более
ранней версии Tarantool значением по умолчанию для этого параметра было
false.
Тип: boolean
Значение по умолчанию: true
Переменная окружения: TT_STRIP_CORE
Динамический: нет
Начиная с версии 2.6.1.
Если установлено значение true, включается
менеджер транзакций.
Тип: boolean
Значение по умолчанию: false
Переменная окружения: TT_MEMTX_USE_MVCC_ENGINE
Динамический: нет
- memtx_memory
- memtx_max_tuple_size
- memtx_min_tuple_size
- memtx_allocator
- memtx_sort_threads
- slab_alloc_factor
- slab_alloc_granularity
- vinyl_bloom_fpr
- vinyl_cache
- vinyl_max_tuple_size
- vinyl_memory
- vinyl_page_size
- vinyl_range_size
- vinyl_run_count_per_level
- vinyl_run_size_ratio
- vinyl_read_threads
- vinyl_write_threads .. cfg_storage-memtx_memory:
Начиная с версии 1.7.4.
Объем памяти, выделяемый Tarantool для хранения кортежей. При достижении
лимита запросы INSERT или UPDATE
начинают завершаться с ошибкой ER_MEMORY_ISSUE. Сервер не выходит за пределы memtx_memory при
выделении памяти для кортежей, однако дополнительная память используется
для хранения индексов и информации о соединениях.
Тип: float
Значение по умолчанию: 256 * 1024 * 1024 = 268435456 байт
Минимум: 33554432 байт (32 МБ)
Переменная окружения: TT_MEMTX_MEMORY
Динамический: да, но не может быть уменьшено
Начиная с версии 1.7.4.
Размер наибольшей единицы выделения памяти для движка хранения memtx. Значение можно увеличить, если требуется хранить большие кортежи.
Тип: integer
Значение по умолчанию: 1024 * 1024 = 1048576 байт
Переменная окружения: TT_MEMTX_MAX_TUPLE_SIZE
Динамический: да
Начиная с версии 1.7.4.
Размер наименьшей единицы выделения памяти. Значение можно уменьшить, если большинство кортежей очень маленькие.
Тип: integer
Значение по умолчанию: 16 байт
Возможные значения: от 8 до 1048280 включительно
Переменная окружения: TT_MEMTX_MIN_TUPLE_SIZE
Динамический: нет
Начиная с версии 2.10.0.
Задает аллокатор, управляющий памятью для кортежей memtx. Возможные
значения:
system– память выделяется по мере необходимости с проверкой того, что квота не превышена. Аллокатор основан на функцииmalloc.small– slab-аллокатор. Аллокатор повторно использует блок памяти для выделения объектов одного типа. Учтите, что этот аллокатор подвержен неустранимой фрагментации при определенных нагрузках, поэтому в таких случаях можно переключиться наsystem.
Тип: string
Значение по умолчанию: 'small'
Переменная окружения: TT_MEMTX_ALLOCATOR
Динамический: нет
Начиная с версии: 3.0.0.
Количество потоков из пула потоков,
используемых для сортировки ключей вторичных индексов при загрузке базы
данных memtx. Минимальное значение – 1, максимальное – 256. По
умолчанию используются все доступные ядра.
Тип: integer
Значение по умолчанию: box.NULL
Переменная окружения: TT_MEMTX_SORT_THREADS
Динамический: нет
Множитель для вычисления размеров блоков памяти, в которых хранятся кортежи. Меньшее значение может привести к уменьшению неиспользуемой памяти в зависимости от общего объема доступной памяти и распределения размеров элементов.
См. также: slab_alloc_granularity
Тип: float
Значение по умолчанию: 1.05
Возможные значения: от 1 до 2 включительно
Переменная окружения: TT_SLAB_ALLOC_FACTOR
Динамический: нет
Начиная с версии 2.8.1.
Задает гранулярность (в байтах) выделения памяти в
аллокаторе small. Значение
memtx.slab_alloc_granularity должно соответствовать следующим
условиям:
- Значение является степенью двойки.
- Значение больше или равно 4.
Ниже приведены несколько рекомендаций по настройке параметра
memtx.slab_alloc_granularity:
- Если кортежи в спейсе маленькие и имеют примерно одинаковый размер, задайте значение 4 байта для экономии памяти.
- Если кортежи имеют разные размеры, увеличьте значение параметра, чтобы
выделять кортежи из одного
mempool(пула памяти).
См. также: slab_alloc_factor
Тип: number
Значение по умолчанию: 8 байт
Переменная окружения: TT_SLAB_ALLOC_GRANULARITY
Динамический: нет
Начиная с версии 1.7.4.
Уровень ложных срабатываний фильтра Блума – допустимая вероятность
того, что фильтр Блума
выдаст неверный результат. Параметр vinyl_bloom_fpr является значением
по умолчанию для одного из параметров в таблице
Параметры space_object:create_index().
Тип: float
Значение по умолчанию: 0.05
Переменная окружения: TT_VINYL_BLOOM_FPR
Динамический: нет
Начиная с версии 1.7.4. Размер кэша для движка хранения vinyl. Размер кэша можно изменять динамически.
Тип: integer
Значение по умолчанию: 128 * 1024 * 1024 = 134217728 байт
Переменная окружения: TT_VINYL_CACHE
Динамический: да
Начиная с версии 1.7.5.
Размер наибольшей единицы выделения памяти для движка хранения vinyl. Значение можно увеличить, если требуется хранить большие кортежи. См. также: memtx_max_tuple_size.
Тип: integer
Значение по умолчанию: 1024 * 1024 = 1048576 байт
Переменная окружения: TT_VINYL_MAX_TUPLE_SIZE
Динамический: нет
Начиная с версии 1.7.4.
Максимальный объем оперативной памяти в байтах, используемый vinyl.
Тип: integer
Значение по умолчанию: 128 * 1024 * 1024 = 134217728 байт
Переменная окружения: TT_VINYL_MEMORY
Динамический: да, но не может быть уменьшено
Начиная с версии 1.7.4.
Размер страницы. Страница – это единица чтения/записи для дисковых
операций vinyl. Параметр vinyl_page_size является значением по
умолчанию для одного из параметров в таблице
Параметры space_object:create_index().
Тип: integer
Значение по умолчанию: 8 * 1024 = 8192 байт
Переменная окружения: TT_VINYL_PAGE_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
Динамический: нет
Начиная с версии 1.7.4.
Максимальное количество прогонов на уровень в LSM-дереве vinyl. При
превышении этого числа создается новый уровень. Параметр
vinyl_run_count_per_level является значением по умолчанию для одного
из параметров в таблице
Параметры space_object:create_index().
Тип: integer
Значение по умолчанию: 2
Переменная окружения: TT_VINYL_RUN_COUNT_PER_LEVEL
Динамический: нет
Начиная с версии 1.7.4.
Соотношение размеров различных уровней в LSM-дереве. Параметр
vinyl_run_size_ratio является значением по умолчанию для одного из
параметров в таблице
Параметры space_object:create_index().
Тип: float
Значение по умолчанию: 3.5
Переменная окружения: TT_VINYL_RUN_SIZE_RATIO
Динамический: нет
Начиная с версии 1.7.5.
Максимальное количество потоков чтения, которые vinyl может использовать для некоторых параллельных операций, таких как ввод-вывод и сжатие.
Тип: integer
Значение по умолчанию: 1
Переменная окружения: TT_VINYL_READ_THREADS
Динамический: нет
Начиная с версии 1.7.5.
Максимальное количество потоков записи, которые vinyl может использовать для некоторых параллельных операций, таких как ввод-вывод и сжатие.
Тип: integer
Значение по умолчанию: 4
Переменная окружения: TT_VINYL_WRITE_THREADS
Динамический: нет
checkpoint_wal_threshold .. cfg_checkpoint_daemon:
Демон контрольных точек
Демон контрольных точек (демон снимков) – это постоянно работающий
файбер. Демон контрольных точек составляет расписание
периодического создания снимков на основе параметров конфигурации и
скорости роста размера файлов. Если он включен, демон создает новые
файлы снимков (.snap) в
соответствии с этим расписанием.
Работа демона контрольных точек основана на следующих параметрах конфигурации:
- checkpoint_interval – новый снимок создается раз в заданный период.
- checkpoint_wal_threshold – новый снимок создается, как только
: размер всех WAL-файлов, созданных с момента последнего снимка, превышает заданный предел.
При необходимости демон контрольных точек также активирует сборщик мусора Tarantool, который удаляет старые снимки и WAL-файлы.
Сборщик мусора Tarantool
Сборщик мусора Tarantool может быть активирован демоном контрольных точек. Сборщик мусора отслеживает снимки, которые должны быть переданы реплике или нужны другим потребителям. Когда файлы больше не нужны, сборщик мусора Tarantool удаляет их.
Этот сборщик мусора вызывается в следующих случаях:
- Когда количество снимков достигает предела, заданного параметром checkpoint_count. После создания нового снимка сборщик мусора Tarantool удаляет самый старый файл снимка и все связанные WAL-файлы.
- Когда размер всех WAL-файлов, созданных с момента последнего снимка, достигает предела, заданного параметром checkpoint_wal_threshold.
: При превышении этого размера демон контрольных точек делает снимок, после чего сборщик мусора удаляет старые WAL-файлы.
Если старый файл снимка удаляется, сборщик мусора Tarantool также удаляет все файлы журнала предзаписи (.xlog), удовлетворяющие следующим условиям:
- WAL-файлы старше файла снимка.
- WAL-файлы содержат информацию, присутствующую в файле снимка. Сборщик
мусора Tarantool также удаляет устаревшие
.run-файлы vinyl.
Сборщик мусора Tarantool не удаляет файл в следующих случаях:
- Выполняется резервное копирование, и файл еще не был скопирован (см. Горячее резервное копирование).
- Выполняется репликация, и файл еще не был передан реплике (см. Архитектура репликации),
- Реплика находится в процессе подключения.
- Реплика отстала.
: Прогресс каждой реплики отслеживается; если позиция реплики сильно отстает от актуальной, сервер приостанавливает удаление, чтобы дать ей возможность догнать. Если администратор приходит к выводу, что реплика окончательно вышла из строя, правильное действие – перезапустить сервер или (предпочтительно) удалить реплику из кластера.
Начиная с версии 1.7.4.
Интервал в секундах между действиями
демона контрольных точек. Если для параметра
задано значение больше нуля и есть активность, вызывающая изменения в
базе данных, демон контрольных точек вызывает
box.snapshot() каждые checkpoint_interval секунд, создавая каждый раз
новый файл снимка. Если параметр установлен в ноль, демон контрольных
точек отключен.
Пример
box.cfg{ checkpoint_interval = 7200 }
В этом примере демон контрольных точек создает новый снимок базы данных каждые два часа при наличии активности.
Тип: integer
Значение по умолчанию: 3600 (один час)
Переменная окружения: TT_CHECKPOINT_INTERVAL
Динамический: да
Начиная с версии 1.7.4.
Максимальное количество снимков, хранящихся в каталоге memtx_dir. Если количество снимков после создания нового превышает это значение, сборщик мусора Tarantool удаляет старые снимки. Если параметр установлен в ноль, сборщик мусора не удаляет старые снимки.
Пример
box.cfg{checkpoint_interval = 7200,checkpoint_count = 3}
В этом примере демон контрольных точек создает новый снимок каждые два часа, пока не будет создано три снимка. После создания нового снимка (четвертого) самый старый снимок и все связанные файлы журнала предзаписи удаляются.
Тип: integer
Значение по умолчанию: 2
Переменная окружения: TT_CHECKPOINT_COUNT
Динамический: да
Начиная с версии 2.1.2.
Пороговое значение общего размера в байтах для всех WAL-файлов, созданных с момента последней контрольной точки. При превышении заданного порога поток WAL уведомляет демона контрольных точек о необходимости создать новую контрольную точку и удалить старые WAL-файлы.
Этот параметр позволяет администраторам решить проблему, которая может возникнуть при расчете объема дискового пространства, выделяемого для раздела, содержащего WAL-файлы.
Тип: integer
Значение по умолчанию: 10\^18 (большое число, поэтому по умолчанию
ограничение фактически отсутствует)
Переменная окружения: TT_CHECKPOINT_WAL_THRESHOLD
Динамический: да
- force_recovery
- wal_max_size
- snap_io_rate_limit
- wal_mode
- wal_dir_rescan_delay
- wal_queue_max_size
- wal_cleanup_delay
- wal_ext
- secure_erasing .. cfg_binary_logging_snapshots-force_recovery:
Начиная с версии 1.7.4.
Если параметр force_recovery равен true, Tarantool пытается продолжить
работу при возникновении ошибки чтения
файла снимка (при запуске экземпляра сервера)
или файла журнала упреждающей записи (при запуске
экземпляра сервера или при применении обновления на реплике): пропускает
некорректные записи, считывает максимально возможный объем данных и
завершает процесс с предупреждением. Предотвратить повторное появление
ошибки можно, записав данные в базу и выполнив
box.snapshot().
В противном случае Tarantool прерывает восстановление при возникновении ошибки чтения.
Тип: boolean
Значение по умолчанию: false
Переменная окружения: TT_FORCE_RECOVERY
Динамический: нет
Начиная с версии 1.7.4.
Максимальное количество байт в одном файле журнала упреждающей записи.
Если запрос приведет к тому, что размер файла .xlog превысит
wal_max_size, Tarantool создает новый WAL-файл.
Тип: integer
Значение по умолчанию: 268435456 (256 * 1024 * 1024) байт
Переменная окружения: TT_WAL_MAX_SIZE
Динамический: нет
Начиная с версии 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
Динамический: да
Начиная с версии 1.6.2.
Задает режим синхронизации фибер-WAL-диск:
none: журнал упреждающей записи не ведется. Узел с параметромwal_mode, установленным в значениеnone, не может быть мастером репликации.write: фиберы ожидают записи своих данных в журнал упреждающей записи (безfsync(2)).fsync: фиберы ожидают записи своих данных,fsync(2)выполняется после каждогоwrite(2).
Тип: string
Значение по умолчанию: "write"
Переменная окружения: TT_WAL_MODE
Динамический: нет
Начиная с версии 1.6.2.
Интервал времени в секундах между периодическими сканированиями каталога файлов журнала упреждающей записи для проверки изменений в этих файлах в целях репликации или горячего резерва.
Тип: float
Значение по умолчанию: 2
Переменная окружения: TT_WAL_DIR_RESCAN_DELAY
Динамический: нет
Начиная с версии 2.8.1.
Размер очереди (в байтах), используемой репликой для отправки новых транзакций в журнал упреждающей записи (WAL). С помощью этого параметра можно ограничить скорость, с которой реплика отправляет транзакции в WAL. Ограничение размера очереди может быть полезно, когда реплика пытается синхронизироваться с мастером и считывает новые транзакции быстрее, чем записывает их в WAL.
Тип: number
Значение по умолчанию: 16777216 байт
Переменная окружения: TT_WAL_QUEUE_MAX_SIZE
Динамический: да
Начиная с версии 2.6.3.
Задержка в секундах, используемая для предотвращения немедленного
удаления файлов журнала упреждающей записи
сборщиком мусора Tarantool
после перезапуска узла. Эта задержка исключает возможные ошибочные
ситуации, когда мастер удаляет WAL-файлы, необходимые
репликам, после перезапуска. В результате реплики
синхронизируются с мастером быстрее после его перезапуска и не нуждаются
в повторной загрузке всех данных. После запуска и работы всех узлов в
наборе реплик плановая сборка мусора возобновляется, даже если время
wal_cleanup_delay еще не истекло.
Тип: number
Значение по умолчанию: 14400 секунд
Переменная окружения: TT_WAL_CLEANUP_DELAY
Динамический: да
Начиная с версии 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
Динамический: да
Начиная с версии 3.0.0.
(Только в Enterprise Edition) Если установлено значение true,
Tarantool перезаписывает файл данных несколько раз перед удалением,
чтобы сделать восстановление удаленного файла невозможным. Параметр
применяется как к файлам .xlog и .snap, так и к файлам данных Vinyl.
Тип: boolean
Значение по умолчанию: false
Переменная окружения: TT_SECURE_ERASING
Динамический: да
Начиная с версии 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
- replication_anon
- bootstrap_leader
- bootstrap_strategy
- replication_connect_timeout
- replication_connect_quorum
- replication_skip_conflict
- replication_sync_lag
- replication_sync_timeout
- replication_timeout
- replicaset_uuid
- instance_uuid
- replication_synchro_quorum
- replication_synchro_timeout
- replication_threads
- election_mode
- election_timeout
- election_fencing_mode
- instance_name
- replicaset_name
- cluster_name .. cfg_replication-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
Начиная с версии 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: 1uuid: 3c84f8d9-e34d-4651-969c-3d0ed214c60flsn: 4upstream:status: followidle: 0.6912029999985peer: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
Динамический: да
Начиная с 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
Динамический: да
Начиная с 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
Динамический: да
Начиная с версии 1.9.0.
Количество секунд, в течение которых реплика ожидает подключения к мастеру в кластере. Подробнее см. orphan status.
Этот параметр отличается от replication_timeout, который используется мастером для отключения реплики при отсутствии подтверждений получения сообщений heartbeat.
Тип: float
Значение по умолчанию: 30
Переменная окружения: TT_REPLICATION_CONNECT_TIMEOUT
Динамический: да
Устарело с 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
Динамический: да
Начиная с версии 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
Динамический: да