如何查询Cassandra集群的元数据?

Fro*_*bit 5 cassandra hector astyanax

我们有一个创造性地命名为"bootstrap"的过程,它为环境中的给定rev软件设置我们的Cassandra集群(Dev1,Dev2,QA,...,PROD).此引导程序创建/更新键空间和列族以及在非prod中填充初始数据.

我们正在使用Astyanax,但我们可以使用Hector进行自举.

鉴于另一个团队已决定每个环境都有自己的数据中心名称.而且,当我们从两个数据中心转到更多数据中心时,我希望这可以在prod中工作.鉴于我们将使用PropertyFileSnitch:

我如何询问Cassandra集群的布局?(没有炮击nodetool ring)

具体来说,我需要知道数据中心的名称,以便在使用NetworkTopologyStrategy时可以使用正确的策略选项设置创建或更新密钥空间.我们希望每个数据中心有3个副本.有些envs有一个和几个有两个,最终生产会有更多.

是否有CQL或Thrift调用可以提供有关群集布局的信息?

我已经查看了各种文档集中的几个TOC,并用Google搜索了一下.我想在挖掘nodetool代码之前我会问这里.

Tyl*_*bbs 4

我不确定 Hector 或 Astyanax 如何揭露这一点,但基本的 Thrift 方法describeRing(keyspace)应该可以满足您的需求。它包含的部分信息是EndpointDetails如下所示的结构:

endpoint_details=[EndpointDetails(datacenter='datacenter1', host='127.0.0.1', rack='rack1')]
Run Code Online (Sandbox Code Playgroud)

连同该方法的其余结果一起,您应该能够计算出集群中每个节点的令牌、DC、机架等。

由于您使用的是 Java 客户端,因此您还可以使用一些 JMX 方法(nodetool 使用的)来描述集群的更多选定部分。例如,您可能会查看 snitch mbean ( "org.apache.cassandra.db:type=EndpointSnitchInfo"),特别是getDatacenter(ip)和getRack(ip)方法。