【问题标题】:Is there an API for scylla nodetool?是否有用于 scylla nodetool 的 API?
【发布时间】:2019-12-06 22:32:11
【问题描述】:

是否有nodetool 的 API?特别是nodetool tablestats

我看到有https://github.com/scylladb/scylla/tree/master/api/api-doc。这是寻找 API 的正确位置吗?

【问题讨论】:

    标签: scylla


    【解决方案1】:

    Scylla 服务器确实有一个 REST API,它的文档位于您指向的 URL。启动 Scylla 服务器时也可以找到 Swagger UI:https://docs.scylladb.com/operating-scylla/rest/

    但是,请注意 nodetool 不直接使用 API。相反,它与 Scylla JMX 代理通信,这是一个实现与 Cassandra 兼容的 JMX API 的 Java 进程。您仍然可以直接使用 REST API,但您必须自己弄清楚 JMX 操作和 REST API 之间的映射关系。

    对于像nodetool tablestats 这样的东西,第一步是检查 nodetool 使用什么 JMX API:

    https://github.com/scylladb/scylla-tools-java/blob/master/src/java/org/apache/cassandra/tools/nodetool/TableStats.java

    该命令委托给 TableStatsHolder 类:

    https://github.com/scylladb/scylla-tools-java/blob/master/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsHolder.java#L117

    它使用 ColumnFamilyStoreMBean JMX API 来查询表统计信息。

    在scylla-jmx项目中通过找到ColumnFamilyStore类(不带MBean后缀)可以找到JMX API的实现:

    https://github.com/scylladb/scylla-jmx/blob/master/src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java

    从该类中,您可以看到,例如,ColumnFamilyStore.getSSTableCountPerLevel() 方法委托给 column_family/sstables/per_level/<table name> REST API URL。

    【讨论】:

    • 关于 REST API 您应该了解的重要一点是,在撰写本文时,它只是 内部 节点 - 您无法从外部机器连接到它。这很重要,因为此 REST API 没有身份验证或授权协议。因此,只有在 Scylla 节点上安装自己的代理进程或使用 ssh 登录到 Scylla 节点时,REST API 才会对您有用。
    【解决方案2】:

    嗯,FWIW 我在这里通过直接访问 API 重新实现了 nodetool: https://github.com/scylladb/scylla-tools-java/pull/121

    它可以工作,但在代码方面我会进行一些重构以避免重复,否则它完全可以通过 REST API 使用 nodetool(跳过 JMX 以获取“tablestats”)

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多