Что произойдет, если узел реплики выйдет из строя при уровне согласованности кворума?

Сценарий:

  • Всего узлов: 3 [A, B, C]
  • Фактор репликации: 2
  • Согласованность записи: кворум (требуется подтверждение 2 реплик)
  • Последовательность чтения: кворум
  • Диапазоны разделов узлов:

    • A [ primary 1-25, replica 26-50 ]
    • B [первичный 26-50, реплика 51-75]
    • C [первичный 51-75, реплика 1-25]

Вопрос:

Предположим, мне нужно вставить данные 30, а узел A не работает. Как бы повела себя Кассандра в этой ситуации? Сможет ли Кассандра записать данные и сообщить об успехе обратно драйверу (даже если узел реплики не работает и Кассандре требуется 2 узла для подтверждения записи)?


person Tahir Rauf    schedule 30.10.2016    source источник


Ответы (3)


У вас есть только 1 реплика для записи (B), поэтому вы получите ошибку при записи (UnavailableException).

Лучше спроектировать свои уровни согласованности / коэффициент репликации, чтобы вы могли терпеть сбой узла для диапазона токенов (подумайте о повышении RF до 3).

Также лучше не пытаться решить вопрос доступности, следуя пути конечной согласованности (R + W ‹= N), например. положив в этом случае W = 1. Мы пробовали это, и в оперативном плане это не стоило усилий.

person Ivan    schedule 30.10.2016

Есть ли веская причина за RF = 2? учитывая сценарий, кворум не будет удовлетворен в сценарии неработающего узла, и ваши записи завершатся ошибкой. Предлагаю вам пересмотреть свой РФ.

person DataJanitor    schedule 30.10.2016

Вы определили одну из ключевых причин, по которой RF = 2 не рекомендуется использовать для репликации высокодоступных развертываний Cassandra. Что произойдет, зависит от поведения водителя (включен или выключен токен).

  1. Узел B или C будет выбран в качестве координатора
  2. Координатор попытается написать как B, так и A, потому что кворум 2 равен 2.
  3. Координатор отметит, что узел A не подтвердил запись, и, таким образом, сообщит клиенту, что кворум не может быть достигнут.

Обратите внимание, это не означает, что запись на узел B не удалась ... на самом деле значение записывается на узел B, и координатор сохранит подсказку для узла A. Однако вы не достигли своей цели согласованности, поэтому, вероятно, рекомендуется, чтобы вы пытаетесь выполнить запись снова, пока узел не восстановится в большинстве ситуаций. В этой конкретной ситуации вы эффективно выполняете ВСЕ, что не даст ожидаемого поведения в ситуациях отказа узла.

TL; DR, не используйте кворум с RF = 2

person cgilm    schedule 31.10.2016