Репликация плота под разделом
- 7 участников кластера, один из которых является лидером.
- Лидер пытается повторить журнал (некоторые пишут)
- Сетевой раздел происходит. 3 и 4 члена соответственно.
- Лидер оказывается в меньшинстве
- Лидер достигает только 2 подписчиков → ошибка репликации
Что происходит в этой ситуации?
Насколько я понимаю: 2 подписчика применили "плохую" запись, и когда сетевой раздел исправится, они перезапишут эту запись с историей лидеров большинства. Но это нарушает линеаризацию.
1 ответ
Вы путаете репликацию с обязательством. Простая репликация записи в меньшинство этого кластера не нарушает линеаризуемость. Важно то, когда это изменение считается совершенным. Поскольку лидер на стороне меньшинства раздела не может реплицировать изменение на большинство кластера, он никогда не зафиксирует изменение и никогда не сообщит клиенту, что изменение сохранено. Кроме того, незафиксированное изменение никогда не будет применено к конечному автомату ни на одном узле. Поэтому перезапись незафиксированного изменения при исцелении раздела не нарушает никаких гарантий.
Гарантии будут нарушены, только если лидер увеличит commitIndex
и подтвердите запись после репликации только в меньшинство кластера.