У нас есть кластер Cassandra из 3 узлов с RF = 2. Согласованность чтения и записи установлена на ONE. Мы также используем Vnodes. Обозначим эти узлы как N1, N2 и N3. Допустим, N3 выходит из строя. У меня сложилось впечатление, что всякий раз, когда узел выходит из строя, другие узлы будут хранить подсказки, а всякий раз, когда появляется N3, подсказки будут отправляться на N3, тем самым обеспечивая согласованность данных между репликами. Однако, просматривая документы, я наткнулся на параметр max_hint_window_in_ms
, который по умолчанию равен 3 часам. Таким образом, если узел мертв более 3 часов, он считается мертвым навсегда, и подсказки не сохраняются. Все идет нормально.
Итак, теперь я понимаю, что если узел не работает, скажем, 10 часов, то подсказки за первые 3 часа будут переданы этому узлу, когда он вернется, но записи для этой 7-часовой продолжительности будут потеряны для этого узел. Более того, если запрос на чтение запускается для определенного диапазона токенов, и поскольку этот узел также имеет право обслуживать запросы на чтение для диапазона токенов, он вернет null вместо фактических данных, которые хранятся в каком-то другом узле. Правильно ли я понимаю? Что же тогда делать?