Статус orphan (одиночный)
Starting with Tarantool version 1.9, there is a change to the
procedure when an instance joins a replica set.
During box.cfg()
the instance tries to join all nodes listed
in box.cfg.replication.
If the instance does not succeed with connecting to the required number of nodes
(see bootstrap_strategy),
it switches to the orphan status.
While an instance is in orphan status, it is read-only.
Чтобы «подключиться» к мастеру, реплика должна «установить соединение» с узлом мастера, а затем «выполнить синхронизацию».
«Установка соединения» означает контакт с мастером по физической сети и получение подтверждения. Если нет подтверждения соединения через box.replication_connect_timeout секунд (обычно 4 секунды), и повторные попытки подключения не сработали, то соединение не установлено.
«Синхронизация» означает получение обновлений от мастера для создания локальной копии базы данных. Синхронизация завершена, когда реплика получила все обновления или хотя бы получила достаточное количество обновлений, чтобы отставание реплики (см. replication.upstream.lag в box.info()
) было меньше или равно количеству секунд, указанному в box.cfg.replication_sync_lag. Если значение replication_sync_lag
не задано (nil) или указано как «TIMEOUT_INFINITY», то реплика пропускает шаг «синхронизация» и сразу же переходит на «отслеживание».
In order to leave orphan mode, you need to sync with a sufficient number of instances (bootstrap_strategy). To do so, you may either:
- Убрать из списка
box.cfg.replication
недоступные и прочие узлы, с которыми нельзя синхронизироваться. - Вообще задать
""
(пустую строку) в качестве значенияbox.cfg.replication
.
Возможны следующие ситуации.
Ситуация 1: настройка
Здесь впервые происходит вызов box.cfg{}
. Реплика подключается, но набора реплик пока нет.
Set the status to „orphan“.
Try to connect to all nodes from
box.cfg.replication
. The replica tries to connect for the replication_connect_timeout number of seconds and retries each replication_timeout seconds if needed.Abort and throw an error if a replica is not connected to the majority of nodes in
box.cfg.replication
.Экземпляр может быть выбран в качестве лидера „leader“ в наборе реплик. Критерии выбора лидера включают в себя значение vclock (чем больше, тем лучше), а также доступность только для чтения или для чтения и записи (лучше всего для чтения и записи, кроме случаев, когда других вариантов нет). Лидер является мастером, к которому должны подключиться другие экземпляры. Лидер является мастером, который выполняет функции box.once().
Если данный экземпляр выбран лидером набора реплик, выполняется «самонастройка»:
- Установка статуса „running“ (запущен).
- Возврат из
box.cfg{}
.В противном случае, данный экземпляр будет репликой, которая подключается к существующему набору реплик, поэтому:
- Настройка от лидера. См. примеры в разделе Настройка набора реплик.
- Синхронизация со всеми остальными узлами в наборе реплик в фоновом режиме.
Ситуация 2: восстановление
Здесь вызов box.cfg{}
происходит не впервые, а повторно для осуществления восстановления.
- Проведение восстановления из последнего локального снимка и WAL-файлов.
- Try to establish connections to all other nodes for the replication_connect_timeout number of seconds. Once
replication_connect_timeout
is expired or all the connections are established, proceed to the «sync» state with all the established connections.- If connected, sync with all connected nodes, until the difference is not more than replication_sync_lag seconds.
Ситуация 3: обновление конфигурации
Здесь вызов box.cfg{}
происходит не впервые, а повторно, поскольку изменились некоторые параметры репликации или что-то в наборе реплик.
- Try to connect to all nodes from
box.cfg.replication
, within the time period specified in replication_connect_timeout.- Попытка синхронизации со всеми подключенными узлами в течение периода времени, указанного в replication_sync_timeout.
- Если предыдущие шаги не выполнены, статус изменяется на „orphan“ (одиночный). (Попытки синхронизации будут продолжаться в фоновом режиме, и когда/если они будут успешны, статус „orphan“ отключится.)
- Если предыдущие шаги выполнены, статус изменяется на „running“ (мастер) или „follow“ (реплика).
Ситуация 4: повторная настройка
Здесь не происходит вызов box.cfg{}
. В определенный момент в прошлом реплика успешно установила соединение и в настоящий момент ожидает обновления от мастера. Однако мастер не может передать обновления, что может произойти случайно, или же если реплика работает слишком медленно (большое значение lag), а WAL-файлы (.xlog) с обновлениями были удалены. Такая ситуация не является критической – реплика может сбросить ранее полученные данные, а затем запросить содержание последнего файла снимка (.snap) мастера. Поскольку фактически в таком случае повторно проводится процесс настройки, это называется «повторная настройка». Тем не менее, есть отличие от обычной настройки – идентификатор реплики останется прежним. Если он изменится, то мастер посчитает, что в кластер добавляется новая реплика, и сохранит идентификатор экземпляра реплики, которой уже не существует. Полностью автоматизированный процесс повторной настройки появился в версии Tarantool 1.10.2.