使用 datastax 驱动程序检索有关 cassandra 集群数据中心的信息
Retrieve information about cassandra cluster datacenters using datastax driver
我需要检索有关集群数据中心及其节点的信息。我需要使用 datastax java 驱动程序来做到这一点。所以我可以不调用说“nodetool status
”并解析它的输出。
我已经尝试查询 system.peers
table (SELECT peer,data_center FROM system.peers
),但它 return 我没有关于所有对等点和数据中心的实际信息。它仅包含属于其中一个数据中心的部分节点列表。
有什么办法吗?
检查 Metadata class。 getAllHosts()
returns 一个集合,每个主机包含关于该主机的所有信息,包括 dc。
@Horia 我很好地提示了如何正确解决此问题。实际上
Metadata.getAllHosts()
方法 returns 不是完整的主机列表。它 returns 仅关于 N
主机的信息,其中 N
等于复制因子。所以它没有必要包含来自多个数据中心的主机。
但是使用这个 class 我找到了另一种方法来做到这一点。 Metadata.getKeyspace(...)
方法 returns KeyspaceMetadata
包含所有数据中心信息的对象:
Cluster cluster = ...
Metadata metadata = cluster.getMetadata();
Map<String, String> replication = metadata.getKeyspace("keyspace_name").getReplication();
我需要检索有关集群数据中心及其节点的信息。我需要使用 datastax java 驱动程序来做到这一点。所以我可以不调用说“nodetool status
”并解析它的输出。
我已经尝试查询 system.peers
table (SELECT peer,data_center FROM system.peers
),但它 return 我没有关于所有对等点和数据中心的实际信息。它仅包含属于其中一个数据中心的部分节点列表。
有什么办法吗?
检查 Metadata class。 getAllHosts()
returns 一个集合,每个主机包含关于该主机的所有信息,包括 dc。
@Horia Metadata.getAllHosts()
方法 returns 不是完整的主机列表。它 returns 仅关于 N
主机的信息,其中 N
等于复制因子。所以它没有必要包含来自多个数据中心的主机。
但是使用这个 class 我找到了另一种方法来做到这一点。 Metadata.getKeyspace(...)
方法 returns KeyspaceMetadata
包含所有数据中心信息的对象:
Cluster cluster = ...
Metadata metadata = cluster.getMetadata();
Map<String, String> replication = metadata.getKeyspace("keyspace_name").getReplication();