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

Синхронная репликация

Общие сведения

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

Эту проблему решает синхронная репликация. Каждая синхронная транзакция проходит коммит лишь после репликации на некотором количестве реплик, и только тогда клиенту приходит ответ о завершении транзакции.

Чтобы включить синхронную репликацию, используйте параметр space_opts.is_sync при создании или изменении спейса.

Синхронные и асинхронные транзакции

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

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

Если для одной из синхронных транзакций истечет время ожидания, эта транзакция будет откачена, а вместе с ней и все последующие транзакции в очереди на репликацию. Похожим образом откатываются и асинхронные транзакции при ошибке записи в WAL. Действует правило отката: транзакции откатываются в порядке, обратном порядку вызова метода box.commit() для каждой из них, независимо от того, синхронные транзакции или асинхронные.

Асинхронная транзакция, заблокированная синхронной, не становится сама синхронной, а просто ожидает коммита синхронной транзакции. Как только это произойдет, асинхронная транзакция сразу пройдет коммит, не ожидая репликации.

Ограничения и известные проблемы

До версии 2.5.2 способа настроить синхронную репликацию для существующих спейсов не было. Однако, начиная с версии 2.5.2, ее можно включить, вызвав метод space_object:alter({is_sync .

Синхронные транзакции работают исключительно в топологии "мастер-реплика". В кластере может быть несколько реплик, в том числе анонимных, однако синхронные транзакции должен совершать только один узел.

Начиная с версии Tarantool 2.10.0, анонимные реплики не участвуют в кворуме.

Выборы лидера

В Tarantool, начиная с версии 2.6.1, есть встроенный механизм управления автоматическими выборами лидера (automated leader election) в наборе реплик. Подробности см. в соответствующей главе.