2016-01-19 1 views
2

Есть ли способ определить количество узлов в кластере Cassandra без предварительного контекста?Как программно определить количество узлов в кластере Cassandra?

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

Важно: На данный момент, единственный интерфейс, который у меня есть, - это бережливость в C.

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

ответ

3

Вы можете посмотреть системную таблицу, используя протокол Thrift: system.peers. Здесь перечислены все остальные узлы и их информация, но не локальный узел. Путем подсчета количества узлов в system.peers, общее количество узла entries_count_in_peers +-

Ниже представлена ​​структура (CQL) из system.peers стола

CREATE TABLE system.peers (
    peer inet PRIMARY KEY, 
    data_center text, 
    host_id uuid, 
    preferred_ip inet, 
    rack text, 
    release_version text, 
    rpc_address inet, 
    schema_version uuid, 
    tokens set<text> 
) 

Существует одна перегородка (строка ключа в терминологии бережливости) на узел

+0

Ah! Я вижу это сейчас. У меня есть узел, использующий Cassandra 1.1.5, где он еще не существует. Но в Cassandra 2.0.1 он есть. Большой! 8-) –

+0

Ну ... как-то бережливый, похоже, не может видеть этот стол сверстников. Думаю, это нужно сделать с CQL на этом. Сейчас я должен отложить эту функцию. –