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

时间:2012-10-18 02:22:21

标签: cassandra hector astyanax

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

我不确定Hector或Astyanax是如何揭露这一点的,但基本的Thrift方法describeRing(keyspace)应该会给你你想要的东西。它包含的部分信息是EndpointDetails结构,如下所示:

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

除了该方法的其余结果外,您还应该能够为群集中的每个节点找出令牌,DC,机架等。

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

答案 1 :(得分:0)

嗯,另一种选择(间接答案)是你可以做PlayOrm正在做的事情,并且所有创建CF都会通过你并保存你想要的一些数据,这样你就可以查询自己的数据了,这意味着其他团队你最好经过同一个中间人,所以所有的信息都在那里。好吧,可能不想让你想要,但只是想让你考虑其他潜在的解决方案。