Невозможно записать записи в Кассандре, когда 2 из 3 узлов отключены

Я вставляю данные в Cassandra через C ++. У меня есть 2 центра обработки данных и всего 3 узла, распределенных между 2 центрами обработки данных (dc1 и dc2). Поскольку я делаю некоторые эксперименты, я остановил Cassandra на 2 узлах. Теперь, когда я пытаюсь записать данные в один оставшийся узел, я получаю сообщения об ошибках типа «нет доступных хостов». Так как в программе на C ++ я не упомянул никакой согласованности для оператора write, то почему он не работает? Я читал, что согласованность записи по умолчанию была локальной, поэтому я должен иметь возможность записывать данные, даже когда работает только один из трех узлов.

У dc1 есть 2 узла, а у dc 2 есть 1 узел.
стратегия репликации: топология сети, dc1: 2, dc2: 1
Кассандра: 3.0.14
RHEL 6

Изменить: проблема была решена после того, как я изменил 2 вещи и перезапустил мой кластер:
1. Я настроил свойства cassandra-topology.properties. Первоначально он не был установлен с правильными значениями.
2. Я синхронизировал время между 3 узлами.
Я не знаю, какой (если не оба) решил проблему.

1

Решение

РФ не имеет значения для этой проблемы. Это зависит от записи CL. Я предполагаю, что ваша запись CL — LOCAL_ONE. Поскольку у вас есть только один восходящий узел, он может быть на dc1 или dc2. Если ваш up-узел находится в dc1, так как dc1 имеет два узла, хеш-кольцо совместно используется этими двумя узлами. Итак, Кассандра должна определить, какой узел писать в dc1. Кассандра вычисляет хэш ключа раздела ваших данных. Если восходящий узел является владельцем этого раздела, запись завершается успешно, в противном случае происходит сбой.

Если ваш up-узел находится в dc2, так как dc2 имеет только 1 узел, этот узел владеет всеми данными. Так что запись всегда должна быть успешной.

1

Другие решения

Если для пространства ключей, в которое вы пишете, установлено значение RF> 1, это означает, что данные должны быть записаны более чем в 1 реплике (более 1 узла), а поскольку активен только 1 узел, это не удовлетворяет настройкам RF.

Я предполагаю, что это причина ошибки, которую вы видите.

0