Cassandra NoHostsAvailable ошибка в cqlsh
Я запускаю Cassandra 3.11 на двух узлах. Это пространство клавиш:
CREATE KEYSPACE backend_platform_dev
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
У меня есть два узла, работающие на виртуальных машинах на моей машине. Когда оба узла работают, все работает. Но когда я отключаю один узел, мое приложение (elixir) начинает выдавать ошибки, а также cqlsh (NoHostAvailable
или же InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table test"
).
Я искал ошибку, и у всех была проблема установки NetworkTopologyStrategy
для одного узла, но это не мой случай.
Что здесь происходит?
Редактировать: это ошибка, которую дает драйвер:
[недоступно] Невозможно достичь уровня согласованности ОДИН: %{в живых: 0, согласованность:: один, требуется: 1}
Я уверен, что один узел жив, а другой не работает. С помощью cqlsh
из моей локальной системы, чтобы подключиться к узлу Cassandra подтверждает это. Теперь я в замешательстве.
1 ответ
Проблема в том, что "replication_factor" настроен как 1. Таким образом, существует только одна копия данных. Допустим, вы храните 10 записей, тогда каждый узел предположительно получает свою долю записей, и для простоты, скажем, первые 5 записей хранятся в узле 1, а вторые 5 записей хранятся в узле 2. Теперь, когда вы отключите узел 1 и посмотрите на первую запись, вы получите ошибку драйвера, о которой сообщалось, поскольку ни один узел не доступен для обслуживания этой записи.
- Измените replication_factor как минимум на 2, так как здесь ситуация только с двумя узлами. Рекомендуемая RF=3 для PROD.
- Запустите NODETOOL REPAIR, чтобы записи в этой таблице стали двумя копиями. Любые будущие вставки будут автоматически иметь две копии, но это исправит существующие записи.
- Уровень согласованности запроса READ по умолчанию ОДИН, который будет успешным даже в случае сбоя узла.
SimleStrategy должен нормально работать для сценария с одним центром данных. Тем не менее, рекомендуемая конфигурация для PROD - это стратегия NetworkTopology.