#cassandra #cassandra-3.0
#cassandra #cassandra-3.0
Вопрос:
Я пытаюсь создать процесс резервного копирования и восстановления cassandra.
Допустим, у меня есть 2 узла A и B и таблица C с коэффициентом реплики 2. В таблице C у нас есть строка с идентификатором = 5 и именем = «Alex». Теперь что-то плохое случилось с узлом B, и нам нужно отключить его на несколько минут, чтобы выполнить восстановление. В то же время, пока узел B не работает, кто-то меняет строку с ID = 5 из формы Name=»Alex» на Name=»Alehandro».
Узел B снова запущен с восстановленными данными и, соответственно, для этого узла строка с ID = 5 по-прежнему содержит Name=»Alex».
Что произойдет, когда я попытаюсь найти строку с идентификатором = 5? Будет ли узел A синхронизироваться с узлом B?
Спасибо.
Ответ №1:
У Cassandra есть несколько способов синхронизировать данные с узлами, на которые были пропущены записи, потому что они не работали, или была приостановлена сборка мусора и т.д. Это включает в себя:
- Подсказки — узел-координатор в течение некоторого времени (3 часа по умолчанию, настраивается) будет собирать все операции записи, которые пропустил другой узел, и когда он вернется, эти операции будут воспроизведены против него
- Восстановление — явная синхронизация данных, которая запускается
nodetool repair
вручную, или для ее автоматизации можно использовать такие инструменты, как Reaper - Исправление чтения — если вы используете уровень согласованности, который требует чтения с нескольких узлов (ДВА, LOCAL_QUORUM, КВОРУМ и т.д.), То узел-координатор обнаружит несоответствия и вернет данные с новейшей меткой времени, при необходимости исправив данные на узле, который имеет старые данные
Отвечая на ваш последний вопрос — когда 2-й узел вернется, вы сможете получить старые данные, если подсказки еще не воспроизведены, и вы читаете непосредственно с этого узла, и вы читаете с уровнем согласованности ОДИН или LOCAL_ONE.
P.S. Я рекомендую ознакомиться с Руководством по архитектуре DSE — оно описывает, как работает Cassandra.