Переключение
При отказе сервера, это может быть из-за проблемы с доступностью сети или чего-то более серьезного, например, отказа системы. В конфигурации с несколькими серверами, где таблицы имеют несколько реплик, распределённых по нескольким физическим машинам, RethinkDB сможет автоматически поддерживать доступность во многих случаях.
Для выполнения автоматического переключения для таблицы должны быть соблюдены следующие требования:
- Кластер должен иметь три или более серверов
- Таблица должна быть настроена на наличие трёх или более реплик
- Должна быть доступна большинство (более половины) реплик таблицы
Если первичная реплика таблицы выходит из строя, при условии, что более половины голосующих реплик таблицы и более половины голосующих реплик для каждого фрагмента остаются доступными, одна из этих голосующих реплик будет произвольно выбрана в качестве новой первичной. Будет короткий период недоступности, но данные не будут потеряны. Если первичная реплика, указанная в конфигурации таблицы, возвращается в онлайн-режим после отказа, она вернётся в статус первичной.
Если потеряны половина или более голосующих реплик фрагмента и их невозможно повторно подключить, необходимо выполнить экстренный ремонт. Для получения дополнительной информации об опции экстренного ремонта ознакомьтесь с документацией для reconfigure.
Голосующие и не голосующие? По умолчанию все реплики являются «голосующими» репликами, что просто означает, что они учитываются в любой операции, требующей наличия большинства реплик. Однако скорость, с которой реплики «голосуют», зависит от задержки сети; если у вас есть удалённый дата-центр с высокой задержкой, вы можете установить его реплики в качестве не голосующих для повышения производительности, ценой гарантированной доступности в этом дата-центре. Вы можете установить реплику в «не голосующие» изменяя конфигурацию таблицы с помощью
reconfigure.
Ограничения автоматического переключения
В большинстве случаев автоматическое переключение может быть выполнено, если доступно большинство голосующих реплик. Однако в одном случае оно может не быть выполнено — это непереходный отказ соединения. Представьте себе кластер с тремя серверами: A, B и C. При нормальной работе сети все серверы могут подключаться друг к другу. Если произойдёт отказ сети, при котором A может подключиться к B, а B может подключиться к C, но A не может подключиться к C, отказ сети является непереходным. Для более подробного описания, а также прогресса в решении долгосрочной проблемы, ознакомьтесь с Github issue #4357.
Поскольку автоматическое переключение требует наличия большинства серверов для таблицы, оно требует участия как минимум трёх серверов. В кластере из двух машин автоматическое переключение никогда не произойдёт, и таблицы потеряют доступность для записей, если любая из машин потеряет соединение. В этом случае, если машину нельзя повторно подключить, необходимо вручную исправить проблему, используя опцию экстренного ремонта reconfigure.
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/docs/failover/