Кассандра: Как кластер обрабатывает мертвые узлы? - PullRequest
3 голосов
/ 13 февраля 2012

Я довольно новичок в Кассандре, и я не уверен, что все правильно понял, поэтому надеюсь, что кто-нибудь сможет мне помочь.

это моя система:

  • Кассандра 0,8
  • кластер с 3 узлами
  • пространство ключей с коэффициентом репликации 3
  • стратегия репликации: NetworkTopologyStrategy (все узлы в одном DC)
  • rails metal приложение, которое подключается к кластеру с помощью твиттера cassandra gem [1]
    • последовательность чтения: ОДИН
    • запись конфискации: ЛЮБОЙ

когда один узел выходит из строя, я в этом уверен:

  • Я должен иметь возможность читать записи из пространства ключей, если я использую уровень согласованности чтения ОДИН.
  • я должен иметь возможность записи в пространство ключей с уровнем согласованности записи ЛЮБОЙ

вот чего я не понимаю:

  • вышеуказанные действия завершаются, но только если я вручную удаляю токен мертвого узла
  • не должен ли мой кластер работать должным образом с мертвым узлом? Разве это не то, что Кассандра все о: высокая доступность?

Я покопался в коде самоцвета, и похоже, что кластер кассандры сообщает самоцвету, что он может найти запись на мертвом узле (который фактически не работает). поэтому гем потерпел неудачу за исключением того, что он не может подключиться к мертвому узлу.

, поэтому я не уверен, что что-то неправильно понял, неправильно настроена моя кассандра или проблема с рубиновым камнем кассандры (о чем я не думаю).

спасибо, Саймон

[1] https://github.com/twitter/cassandra

1 Ответ

0 голосов
/ 14 февраля 2012

Да, ваш кластер должен работать так, как вы описали с мертвым узлом.

Я не знаком с ruby ​​или клиентом ruby, но мне кажется, что ваш клиент пытается отправить запросы на мертвый узел, что может вызвать исключение типа «невозможно подключиться».Cassandra выдаст исключение UnavailableException, если не будет достаточно узлов для удовлетворения требований согласованности определенного запроса.

Какой тип пулирования выполняет клиент ruby, и вы уверены, что он не пытается отправлять запросык узлу, который не работает?Предполагая, что у клиента ruby ​​есть какой-то пул соединений, ему, вероятно, придется увидеть хотя бы один неудачный запрос, прежде чем он поймет, что узел не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...