Проблема репликации данных Cassandra

У меня есть 2-узловой кластер cassandra с коэффициентом репликации 2 и AutoBootStrap = true. При запуске все хорошо и оба узла видят друг друга. Назовем эти узлы A и B.

  1. Добавьте набор ключей и столбцов (давайте назовем этот набор K1) в кассандру через узел A.
  2. Подключитесь к узлу A и прочитайте набор K1. То же самое на узле B. Успех - хорошо
  3. Убить процесс Cassandra на узле B.
  4. Добавить набор K2 через A.
  5. Подключиться к узлу A и прочитать набор K2. Хорошо
  6. Перезапустите процесс Cassandra на узле B.
  7. Попытайтесь прочитать все ключи из B ... установите K1 как присутствующий, установите K2 MISSING. (Даже через 30 минут)
  8. Добавить K3 в A / B.
  9. Прочитать все ключи из A - вернуть набор K1, K2, K3
  10. Прочитать все ключи из B - вернуть набор K1, K3.

B никогда не синхронизирует набор K2 ... (прошло более 12 часов)

  • Подключитесь к узлу A и считайте набор K1. То же самое на узле B. Успех - хорошо
  • Убить процесс Cassandra на узле B.
  • Добавить набор K2 через A.
  • Подключиться к узлу A и прочитать набор K2. Хорошо
  • Перезапустите процесс Cassandra на узле B.
  • Попытайтесь прочитать все ключи из B ... установите K1 как присутствующий, установите K2 MISSING. (Даже через 30 минут)
  • Добавить K3 в A / B.
  • Прочитать все ключи из A - вернуть набор K1, K2, K3
  • Прочитать все ключи из B - вернуть набор K1, K3.
  • B никогда не синхронизирует набор K2 ... (прошло более 12 часов)

  • Подключитесь к узлу A и считайте набор K1. То же самое на узле B. Успех - хорошо
  • Убить процесс Cassandra на узле B.
  • Добавить набор K2 через A.
  • Подключиться к узлу A и прочитать набор K2. Хорошо
  • Перезапустите процесс Cassandra на узле B.
  • Попытайтесь прочитать все ключи из B ... установите K1 как присутствующий, установите K2 MISSING. (Даже через 30 минут)
  • Добавить K3 в A / B.
  • Прочитать все ключи из A - вернуть набор K1, K2, K3
  • Прочитать все ключи из B - вернуть набор K1, K3.
  • B никогда не синхронизирует набор K2 ... (прошло более 12 часов) Почему узел B не видит набор K2 ... у кого-то есть идеи?


    Добавлена ​​информация :

    Хорошо ... это была проблема. Для read_consistency_level по умолчанию установлено значение 1.

    Поэтому, когда мы запрашиваем узел B для набора K2, а у него его нет (когда это должно быть из-за фактора репликации = 2), он немедленно возвращается с сообщением «Не найдено. 'ошибка.

    Однако, если мы используем согласованность чтения как КВОРУМ или ВСЕ, тогда B будет вынужден запросить A, который затем вернет правильное значение, и B синхронизирует этот ключ (сохраняет его локально).

    Это приводит к к другой проблеме - это означает, что когда появляется узел B, он не синхронизирует все данные с узла A даже по прошествии длительного времени. Теперь, если узел A выходит из строя, как мы можем получить доступ к этим несинхронизированным данным? (Я только что проверил, что мы не можем)

    Думаю, должен быть способ принудительно синхронизировать данные. Я вижу ИНФОРМАЦИЮ в выводе терминала о том, что при появлении B произошла намекаемая передача 15 строк от A к B, но у B нет этих строк локально (потому что мы все еще не можем прочитать их из B с уровнем согласованности ОДИН). Что здесь происходит?

    8
    задан Rajan 1 October 2010 в 05:48
    поделиться