Проблема с Cassandra и ConsistencyLevel (избыточность) - PullRequest
2 голосов
/ 21 апреля 2011

Итак, я играю с Кассандрой и настроил кластер с тремя узлами. Я пытаюсь выяснить, как избыточность работает с ConsistencyLevels. В настоящее время я пишу данные с помощью ConsistenyLevel.ALL и читаю данные с помощью ConsistencyLevel.ONE. Из того, что я читал, это, кажется, имеет смысл. У меня есть три узла Кассандры, и я хочу написать для всех трех из них. Я забочусь только о чтении одного из них, поэтому приму первый ответ. Чтобы проверить это, я написал кучу данных (опять же, с ConsistencyLevel.ALL). Затем я убиваю один из моих узлов (а не компьютер "seed" или "listen_address").

Когда я пытаюсь читать, я ожидаю, может быть, после некоторой задержки, вернуть мои данные. Первоначально я получаю TimeoutException ... который я ожидаю. Это то, что получается, когда Кассандра пытается справиться с неожиданной потерей узла, верно? Примерно через 20 секунд я повторяю попытку, и теперь я получаю исключение UnavailableException, которое описывается как «Не все необходимые реплики могут быть созданы и / или прочитаны».

Что ж, меня не волнуют все реплики ... только одна (как в ConsistencyLevel.ONE в моем операторе get), верно?

Мне не хватает точки ConsistencyLevel здесь? Как я могу настроить это, чтобы получать информацию, даже если узел умирает?

Спасибо

1 Ответ

1 голос
/ 21 апреля 2011

Звучит так, как будто у вас установлен коэффициент репликации (RF) равный 1, что означает, что только один узел содержит любую данную строку. Таким образом, когда вы отключаете узел, независимо от того, какой уровень согласованности вы используете, вы не сможете читать или записывать 1/3 ваших данных. Ваши ожидания соответствуют тому, что должно произойти с RF = 3.

...