Мы тут с
@y_dynnikov периодически обсуждали назначение нового мастера в картридже при потере старого...
изначально фигурировали такие понятия eventual failover, stateful failover , force promote ... и прочее
в какой то момент появилась терминология "fencing" которая по факту была воспринята неверно , ниже изложил как я вижу общую картину того что должно происходить в картридже на самом деле.
про понятие
fencing
wiki:
>
Fencing is the process of isolating a node of a computer cluster or protecting shared resources when a node appears to be malfunctioning.
ключевой момент - изолировать вычислительный узел для того чтобы он не разломал shared ресурсы ... в терминах тарантула - это отключение от репликации через FENCING_TIMEOUT секунд ... это "грязное выключение" (описал ниже терминологию)
введем понятия:
"чистое выключение " - мастер при выключении совершенно точно отдал последние записи репликам и vclock keeper запомнил те реплики которые могут быть назначены мастерами ... после такого "выключения" узел без проблем может входить в кластер без rejoin (да, это часть процесса graceful shutdown)
"грязное выключение" варианты:
- мастер просто погас в какойто момет и все....(kill -9, выключение света)
- мастер потерял сеть и дождался FENCING_TIMEOUT - после чего перешел в RO отключил репликацию
после "грязного выключения" за последующее включение репликации отвечает чтото в картридже , координатор или чтото еще что знает позиции vclock и насколько "gracfully" узел покинул кластер... после сработки fencing и прехода в состояние "грязного выключения" может быть две ситуации :
1. последние записи мастера НЕ уехали в кластер до того как сеть развалилась , действия
- бэкапим или дропаем базу
- делаем rejoin
2. последние записи мастера уехали в кластер до того как сеть развалилась , действия
- координатор разрешает включение репликации в штатном режиме (он сравнивает vclock узла и видит что последняя позиция этого тарантула доехала в кластер)
---
Таким образом каждый раз при включении тарантула и/или включении репликации нужно проверять статус "чистоты" последнего выхода из кластера в следствие нештатного отключения (сбой питания или внешинй fencing кильнул или просто ктото кильнул) или сработки "сомовыпиливания" из кластера через FENCING_TIMEOUT
----
fencing != force promote
----
force promote - это значит мы игнорируем FENCING_TIMEOUT (разумеется мастер сейчас недоступен) , что может привести к теоретической поломке репликации в случае если восстановилась сеть после "разделение" сети ( мастер какое то время жил в режиме RW в "изоляции" от vclock keeper и координатор )
----