tarantool> box.info.id
- 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
Начиная с версии 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 останется равным нулю.
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
Динамический: да
Начиная с 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
Динамический: да