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

tarantool> box.info.id

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 останется равным нулю.

undefined

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

Теперь можно использовать реплику.

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

``` tarantoolsessiontarantool> for i = 1,10 do    > box.space.loc:insert{i}```

end

: –

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

: компонент его vclock увеличивается:

``` tarantoolsession```

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-51a46def7661

2019-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> subscribed

: 2019-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: memtx before_replace: 'function: 0x01109f9dc8' on_replace: 'function: 0x01109f9d90' ck_constraint: [] field_count: 0 temporary: false index: [] is_local: false enabled: false name: test id: 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

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