Как я могу запросить метаданные кластера Cassandra?

У нас есть процесс с творческим названием «начальная загрузка», который настраивает наши кластеры Cassandra для данной версии программного обеспечения в среде (Dev1, Dev2, QA, ..., PROD). Этот бутстрап создает/обновляет пространства ключей и семейства столбцов, а также заполняет исходные данные в не-продукте.

Мы используем Astyanax, но мы могли бы использовать Hector для начальной загрузки.

Учитывая, что другая команда решила, что каждая среда будет иметь свои собственные имена центров обработки данных. И учитывая, что я хочу, чтобы это работало в рабочей среде, когда мы переходим от двух к большему количеству центров обработки данных. Учитывая, что мы будем использовать PropertyFileSnitch:

Как я могу запросить у кластера Cassandra его макет? (Без обстрела до nodetool ring)

В частности, мне нужно знать имена центров обработки данных, чтобы я мог создать или обновить пространство ключей с правильными настройками для параметров стратегии при использовании NetworkTopologyStrategy. Нам нужно 3 копии на каждый центр обработки данных. У некоторых env есть один, а у некоторых два, в конечном итоге в производстве будет больше.

Есть ли вызов CQL или Thrift, который даст мне информацию о структуре кластера?

Я просмотрел несколько оглавлений в различных наборах документов и немного погуглил. Я подумал, что спрошу здесь, прежде чем копаться в коде nodetool.


person Frobbit    schedule 18.10.2012    source источник


Ответы (2)


Я не уверен, как Гектор или Астианакс разоблачают это, но базовый метод Бережливости describeRing(keyspace) должен дать вам то, что вы ищете. Часть информации, которую он содержит, представляет собой EndpointDetails структуры, которые выглядят следующим образом:

endpoint_details=[EndpointDetails(datacenter='datacenter1', host='127.0.0.1', rack='rack1')]

Наряду с остальными результатами этого метода вы сможете определить токены, контроллеры домена, стойки и т. д. для каждого узла в кластере.

Поскольку вы используете Java-клиент, вы также можете использовать некоторые методы JMX (которые использует nodetool) для описания более избранных частей кластера. Например, вы можете взглянуть на mbean-снитч ("org.apache.cassandra.db:type=EndpointSnitchInfo"), особенно на методы getDatacenter(ip) и getRack(ip).

person Tyler Hobbs    schedule 20.10.2012

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

person Dean Hiller    schedule 19.10.2012