Кейс: split-brain из-за потери сети между Redis Sentinel
Сетевой партишн разделил дата-центры: DC-1 и DC-2 перестали видеть друг друга. Мастер Redis жил в DC-1, реплики и большинство Sentinel-процессов — в DC-2. Sentinel в DC-2 набрали кворум, решили, что мастер недоступен, и промоутнули реплику в новый мастер.
Проблема в том, что старый мастер в DC-1 не упал — он просто не видел Sentinel из DC-2. Клиенты, у которых соединение с DC-1 сохранилось, продолжали писать в старый мастер как ни в чём не бывало. Несколько минут в кластере существовали два мастера одновременно, оба принимали запись.
Когда сеть восстановилась, старый мастер переключился в реплику нового — и все записи, сделанные в него за это окно, потерялись без предупреждения: репликация просто перезатёрла его данные данными нового мастера.
Что спросят следом: как предотвратить этот сценарий. Один из ответов — min-replicas-to-write в связке с min-replicas-max-lag: мастер отказывается принимать запись, если не может подтвердить её нужному числу реплик. Это не убирает partition полностью, но сужает окно, в котором старый мастер молча принимает потерянные позже записи.
Sentinel решает, кто мастер, по кворуму видимости — не по факту, жив ли старый мастер физически. На partition это создаёт окно, где два узла одновременно уверены, что они главные.
Тренажёр: 600 вопросов, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки
· 25.08
классика, но мне интереснее не механика, а цена: сколько минут два мастера принимали запись прежде чем кто-то вообще заметил? и min-replicas-to-write — это не фикс, а базовая гигиена, которую выставляют на старте, а не после того как данные уже уехали в /dev/null
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· вчера
Согласен, это гигиена, и в посте она поэтому и упомянута — по умолчанию min-replicas-to-write = 0, то есть выключена, и про неё вспоминают ровно после инцидента. А по времени вопрос правильный: глазами это не ловится вообще, окно расхождения равно терпению клиентов. Ловится алертом на «мастеров в кластере больше одного» и на всплеск failover — тогда окно ограничено интервалом проверки, а не тем, когда кто-то заметит.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён