Вопрос в том, ведет ли себя Кассандра одинаково для существующего центра обработки данных, присоединяющегося к кластеру?
Если вы следуете стандартной процедуре построения центра обработки данных, когда пустые узлы блокируются, а затем передаются потоковые данные в процессе nodetool rebuild
, тогда ответ «не обязательно». Восстановление узла не работает так же, как его загрузка, и, таким образом, он все еще может пытаться обслуживать запросы.
Конечно, оборотной стороной этой медали является то, что ваши прикладные команды не должны развертывать или активировать какие-либо сервисы, которые по умолчанию или "привязаны" к новому или "воссоединяющемуся" центру обработки данных, , пока вы не дадите им хорошо . Это одна из причин, по которой все клиентские приложения должны указывать центр обработки данных по умолчанию и использовать NetworkTopologyStrategy для своих пространств ключей.
Если у меня есть 2 DC, и DC1 используется для всех операций чтения / записи, а DC2 - только для резервного копирования. Если DC1 понижается и DC2 вступает во владение для всех записей. Когда DC1 возвращается сейчас, предотвращает ли Cassandra DC1 от запросов на чтение, пока все данные не будут полностью реплицированы?
В этом случае ответ «нет» не мешает DC1 обслуживать запросы. Если приложение привязано к DC1 и существует, оно будет обслуживать запросы независимо от того, не синхронизированы ли его данные. Если бы это был я, я бы использовал Reaper, чтобы убедиться, что восстановление выполнялось на DC1, и велел бы моим командам приложений настраивать свои приложения / службы для использования только DC2, пока не указано иное.