Настройка Cassandra для согласованности между несколькими центрами обработки данных
В настоящее время мы запускаем кольцо Cassandra с 4 узлами в каждом из двух центров обработки данных. Мы хотели бы перестроить их в одно кольцо из 8 узлов. При прочих равных условиях мы действительно хотели бы иметь последовательные чтения, поэтому в настоящее время мы выполняем чтение и запись QUORUM. Тем не менее, если мы потеряем центр обработки данных, кажется, что это приведет к сбою многих или всех запросов из-за невозможности встретить ConsistencyLevel. Поскольку мы планируем отправлять запросы в оба центра обработки данных, переключения на LOCAL_QUORUM должно быть недостаточно для обеспечения согласованности.
Cassandra, похоже, очень не хватает настроек ConsistencyLevel, которые сравниваются только с доступными узлами.
Что можно сделать, чтобы получить максимальную согласованность без сбоев доступности в этом сценарии, и что нужно обменять, чтобы ее получить?
2 ответа
Вы можете сделать чтение / запись своего приложения с помощью QUORUM в обычных операциях, а затем переключиться на LOCAL_QUORUM в случае сбоя DC. Это то, что вам придется делать самостоятельно, поскольку Кассандра не сделает этого автоматически. По желанию, в случае сбоя DC вы можете выполнить восстановление nodetool, прежде чем открывать его для доступа на чтение / запись. Очевидно, что QUORUM в сценарии с несколькими DC может означать, что у вас будут проблемы с задержкой в зависимости от канала между ними, но вам придется взвесить этот компромисс.
Это просто невозможно. когда ваша сеть становится секционированной (т. е. связь между центрами обработки данных теряется), а затем восстанавливается, как вы будете согласовывать изменения, сделанные в каждом центре обработки данных во время простоя? Я спрашиваю конкретно записи, которые изменились в обоих центрах обработки данных.
Cassandra, похоже, очень не хватает настроек ConsistencyLevel, которые сравниваются только с доступными узлами.
есть причина, по которой в распределенных системах такие вещи, как ConsistencyLevel и кворум, планируются администратором и не принимаются системой для автоматического принятия решения. если бы они это сделали, то (опять же, используя ваш пример) вы могли бы разделить 2 соседних узла, и эти 2 узла решили бы, что у них есть кворум, и станут несовместимыми с остальными узлами.