Несогласованность данных в кластере Cassandra после миграции данных в новый кластер
Я вижу некоторую несогласованность данных после перемещения данных в новый кластер.
Всего в старом кластере 9 узлов, на каждом из которых 2+ ТБ данных. Новый кластер имеет тот же набор узлов, что и старый, и конфигурация такая же.
Вот что я сделал по порядку:
nodetool snapshot
.- Скопировал этот снимок в место назначения
- Создано новое пространство ключей в целевом кластере.
- Используемый
sstableloader
утилита для загрузки. - Перезагрузили все узлы.
После успешного завершения передачи я выполнил несколько запросов для сравнения (старый и новый кластер) и обнаружил, что новый кластер не согласован, но данные, которые я вижу, правильно распределяются по каждому узлу (nodetool status
). Тот же запрос возвращает разные наборы результатов для некоторых разделов, и я получаю ноль строк в первый раз, второй раз - 100 строк,200 строк, и в конечном итоге он становится согласованным для нескольких разделов, и количество записей совпадает со старым кластером.
Некоторые разделы не имеют данных в новом кластере, тогда как в старом кластере есть данные для этих разделов.
Я пробовал запускать запросы на cqlsh
с CONSISTENCY ALL
но проблема все еще существует.
Пропустил ли я какие-либо важные шаги до и после?
Есть ли какая-нибудь процедура, чтобы выяснить причину этого?
Я сейчас работаю "nodetool repair"
но я сомневаюсь, что это может решить, как я пытался с Consistency ALL.
Высоко ценю вашу помощь!
1 ответ
Тот факт, что результаты в конечном итоге становятся согласованными, указывает на то, что реплики рассинхронизированы.
Вы можете проверить это, просмотрев журналы примерно в то время, когда вы загружали данные, особенно на предмет упавших мутаций. Вы также можете проверить выводnodetool netstats
. Если вы видите блокирующее восстановление при чтении, это еще одно подтверждение того, что реплики не синхронизированы.
Если у вас все еще есть другие разделы, которые вы можете протестировать, включите TRACING ON
в cqlsh при запросе с CONSISTENCY ALL
. Вы увидите, есть ли несоответствия дайджеста в выводе трассировки, что также должно вызвать исправление чтения. Ура!
[РЕДАКТИРОВАТЬ] Судя по вашим комментариям ниже, похоже, что вы, возможно, не загрузили снимки со ВСЕХ узлов исходного кластера с sstableloader
. Если вы пропустили загрузку SSTables в целевой кластер, это объясняет, почему данные отсутствуют.