我们有一个创造性地命名为“bootstrap”的过程,它为环境中的给定rev软件设置我们的Cassandra集群(Dev1,Dev2,QA,...,PROD)。此引导程序创建/更新键空间和列族以及在非prod中填充初始数据。
我们正在使用Astyanax,但我们可以使用Hector进行自举。
鉴于另一个团队已决定每个环境都有自己的数据中心名称。 而且,当我们从两个数据中心转到更多数据中心时,我希望这可以在prod中工作。 鉴于我们将使用PropertyFileSnitch:
如何询问Cassandra集群的布局? (没有炮轰nodetool ring
)
具体来说,我需要知道数据中心的名称,这样我就可以在使用NetworkTopologyStrategy时使用正确的策略选项设置创建或更新密钥空间。我们希望每个数据中心有3个副本。有些环境有一个和几个有两个,最终生产会有更多。
是否有CQL或Thrift调用可以提供有关群集布局的信息?
我已经查看了各种文档集中的几个TOC,并用Google搜索了一下。我想在挖掘nodetool代码之前会问这里。
答案 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都会通过你并保存你想要的一些数据,这样你就可以查询自己的数据了,这意味着其他团队你最好经过同一个中间人,所以所有的信息都在那里。好吧,可能不想让你想要,但只是想让你考虑其他潜在的解决方案。