5

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

我们正在使用 Astyanax,但我们可以使用 Hector 进行引导。

鉴于另一个团队已决定每个环境都有自己的数据中心名称。鉴于当我们从两个数据中心转移到更多数据中心时,我希望它能够在产品中发挥作用。鉴于我们将使用 PropertyFileSnitch:

我如何询问 Cassandra 集群的布局?(不脱壳到nodetool ring

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

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

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

4

2 回答 2

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)andgetRack(ip)方法。

于 2012-10-20T19:30:25.850 回答
0

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

于 2012-10-19T21:31:59.927 回答