Назад | Перейти на главную страницу

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

В настоящее время мы используем 4-узловое кольцо Cassandra в каждом из двух центров обработки данных. Мы хотели бы перестроить их в единое кольцо из 8 узлов. При прочих равных, мы действительно хотели бы иметь согласованные чтения, поэтому сейчас мы выполняем QUORUM чтения и записи. Однако, если мы потеряем центр обработки данных, похоже, что это приведет к сбою многих или всех запросов из-за неспособности удовлетворить ConsistencyLevel. Поскольку мы планируем отправлять запросы в оба центра обработки данных, переключения на LOCAL_QUORUM не должно быть достаточно, чтобы гарантировать согласованность.

В Cassandra, похоже, очень отсутствуют настройки ConsistencyLevel, которые измеряются только для доступных узлов.

Что можно сделать, чтобы добиться максимальной согласованности без сбоев доступности в этом сценарии, и чем нужно пожертвовать, чтобы этого добиться?

Ваше приложение может читать / писать, используя QUORUM в обычных операциях, а затем переключиться на LOCAL_QUORUM в случае отказа контроллера домена. Это то, что вам придется сделать самому, поскольку Кассандра не сделает этого автоматически. При желании, если DC выходит из строя, вы можете выполнить восстановление nodetool, прежде чем открывать его для чтения / записи. Очевидно, что QUORUM в сценарии с несколькими DC может означать, что у вас будут проблемы с задержкой в ​​зависимости от канала между ними, но это компромисс, который вам придется взвесить.

это просто невозможно. когда ваша сеть становится разделенной (т. е. связь между центрами обработки данных выходит из строя), а затем восстанавливается, как вы будете согласовывать изменения, сделанные в каждом центре обработки данных во время отключения? Я прошу конкретно записи, которые были изменены в ОБЕИХ дата-центрах.

Кассандре, похоже, очень не хватает настроек ConsistencyLevel, которые измерялись только для доступных узлов.

есть причина, по которой в распределенных системах такие вещи, как ConsistencyLevel и кворум, планируются администратором и не остаются на усмотрение системы автоматически. если они это сделали, то (опять же, используя ваш пример) вы могли бы разделить 2 соседних узла, и эти 2 узла решат, что у них есть кворум, и станут несовместимы с остальными узлами.