CREATE KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 3 };
Скорее всего ваш виновник. В нем говорится, что данные в пространстве ключей demodb принадлежат DC1 и должны быть реплицированы 3 раза. Если ваш единственный тестовый узел не указан как член DC1, любой запрос на вставку в это пространство ключей завершится ошибкой. Кроме того, если он является членом DC1 и уровень согласованности больше 1, все запросы будут завершаться сбоем, поскольку для записи будет невозможно получить более одного подтверждения.
Проверьте, как называется ваш центр обработки данных (состояние nodetool), и настройте параметры репликации пространства ключей, чтобы они соответствовали. Это, скорее всего, решит ваши проблемы.
---- Отредактировано для получения более подробной информации и лучшего форматирования ----
Это одна из самых распространенных ошибок новых пользователей с Cassandra. По сути, в Cassandra есть логические единицы оборудования, которые мы называем центрами обработки данных. Предполагается, что центр обработки данных представляет собой группу географически или каким-либо иным образом обособленной группы машин. Вы можете сделать несколько из них и защититься от сбоя в одном географическом местоположении, чтобы ваше приложение не отключилось.
Пространства ключей — это логическая структура для организации групп информации, она аналогична базе данных в реляционном мире. Каждое ключевое пространство указывает, на каких и скольких машинах оно должно реплицироваться. Если мы используем NetworkTopologyStrategy, репликация указывается для каждого центра обработки данных. Мы указываем эти детали во время создания (хотя они могут быть изменены позже), используя «CREATE KEYSPACE…. WITH REPLICATION».
В приведенном выше заявлении вы указали, что вся информация в демо-базе Keyspace должна быть помещена в центр обработки данных «DC1», и в этом центре обработки данных должно быть 3 копии данных. В основном это означает, что у вас есть как минимум 3 узла в DC1, и вам нужна копия данных на каждом из этих узлов. Это само по себе не приведет к сбою вставки, если только весь центр обработки данных не будет известен кластеру Cassandra. Это было бы в том случае, если вы не выполнили первоначальную настройку своего кластера C * и просто запускаете стандартный yaml.
Запуск состояния nodetool покажет вам, что текущий узел думает о состоянии кластера. Вот вывод C*, работающего на моей локальной машине.
Datacenter: Cassandra
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Owns (effective) Host ID Token Rack
UN 127.0.0.1 93.37 KB 100.0% 50be3bec-7e30-4385-bd4a-918055a29292 4731866028208108826 rack1
Этот вывод показывает, что у меня есть один узел, работающий в кластере с именем «Кассандра». Это означает, что любые вставки в области ключей, для которых требуются реплики в других центрах обработки данных, завершатся ошибкой, поскольку кластер не знает, как обрабатывать такие запросы. (Если узлы были просто отключены, но мы видели их до того, как мы могли сохранить подсказки, но если другой контроллер домена никогда не был замечен, мы отклоняем запрос, потому что кластер, скорее всего, был неправильно сконфигурирован.)
Чтобы исправить эту ситуацию, я бы изменил свое пространство ключей, используя
cqlsh:demodb> ALTER KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'Cassandra' : 1 };
Теперь demoDB требует копию данных на 1 машине в дата-центре Cassandra. Это здорово, потому что, как указано в выходных данных моего nodetool, у меня есть один узел в центре обработки данных с именем Cassandra. Если я попробую вставить сейчас, это пройдет.
cqlsh:demodb> INSERT INTO users (user_name, state, birth_year) VALUES ('canadiancreed', 'PA', 1976);
cqlsh:demodb> select * from users where user_name = 'canadiancreed' ;
user_name | birth_year | state
---------------+------------+-------
canadiancreed | 1976 | PA
(1 rows)
и я бы изменил свой сценарий схемы установки, чтобы он также имел правильное имя центра обработки данных
CREATE KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'Cassandra' : 1 };
person
RussS
schedule
08.03.2014