【问题标题】:How can I query a Cassandra cluster for its metadata?如何查询 Cassandra 集群的元数据?
【发布时间】:2012-10-08 09:51:15
【问题描述】:

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

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

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

如何询问 Cassandra 集群的布局? (不用炮击nodetool ring

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

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

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

【问题讨论】:

    标签: cassandra hector astyanax


    【解决方案1】:

    我不确定 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) 方法。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-08-09
        • 2015-03-22
        • 2015-01-20
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 2016-08-02
        • 2019-04-02
        相关资源
        最近更新 更多