Несогласованность данных в кластере Cassandra после миграции данных в новый кластер

Я вижу некоторую несогласованность данных после перемещения данных в новый кластер.

Всего в старом кластере 9 узлов, на каждом из которых 2+ ТБ данных. Новый кластер имеет тот же набор узлов, что и старый, и конфигурация такая же.

Вот что я сделал по порядку:

  1. nodetool snapshot.
  2. Скопировал этот снимок в место назначения
  3. Создано новое пространство ключей в целевом кластере.
  4. Используемый sstableloader утилита для загрузки.
  5. Перезагрузили все узлы.

После успешного завершения передачи я выполнил несколько запросов для сравнения (старый и новый кластер) и обнаружил, что новый кластер не согласован, но данные, которые я вижу, правильно распределяются по каждому узлу (nodetool status). Тот же запрос возвращает разные наборы результатов для некоторых разделов, и я получаю ноль строк в первый раз, второй раз - 100 строк,200 строк, и в конечном итоге он становится согласованным для нескольких разделов, и количество записей совпадает со старым кластером.
Некоторые разделы не имеют данных в новом кластере, тогда как в старом кластере есть данные для этих разделов.

Я пробовал запускать запросы на cqlsh с CONSISTENCY ALL но проблема все еще существует.

Пропустил ли я какие-либо важные шаги до и после?

Есть ли какая-нибудь процедура, чтобы выяснить причину этого?

Я сейчас работаю "nodetool repair" но я сомневаюсь, что это может решить, как я пытался с Consistency ALL.

Высоко ценю вашу помощь!

1 ответ

Тот факт, что результаты в конечном итоге становятся согласованными, указывает на то, что реплики рассинхронизированы.

Вы можете проверить это, просмотрев журналы примерно в то время, когда вы загружали данные, особенно на предмет упавших мутаций. Вы также можете проверить выводnodetool netstats. Если вы видите блокирующее восстановление при чтении, это еще одно подтверждение того, что реплики не синхронизированы.

Если у вас все еще есть другие разделы, которые вы можете протестировать, включите TRACING ON в cqlsh при запросе с CONSISTENCY ALL. Вы увидите, есть ли несоответствия дайджеста в выводе трассировки, что также должно вызвать исправление чтения. Ура!

[РЕДАКТИРОВАТЬ] Судя по вашим комментариям ниже, похоже, что вы, возможно, не загрузили снимки со ВСЕХ узлов исходного кластера с sstableloader. Если вы пропустили загрузку SSTables в целевой кластер, это объясняет, почему данные отсутствуют.

Другие вопросы по тегам