获取属于 Cassandra 集群的节点列表的最佳方法是什么?

获取属于 Cassandra 集群的节点列表的最佳方法是什么?

我正在为我运营的一些 Cassandra 集群创建一些脚本。其中一些脚本需要集群中节点的列表。

nodetool status将打印节点及其当前状态的列表,但它打印出的信息比我需要的要多。例如:

$ nodetool status mykeyspace
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens  Owns    Host ID                               Rack
UN  10.11.12.13  47.66 KB   1       33.3%   aaa1b7c1-6049-4a08-ad3e-3697a0e30e10  rack1
UN  10.11.12.14  47.67 KB   1       33.3%   1848c369-4306-4874-afdf-5c1e95b8732e  rack1
UN  10.11.12.15  47.67 KB   1       33.3%   49578bf1-728f-438d-b1c1-d8dd644b6f7f  rack1

节点列表应该只是 IP(不需要主机名),我想要如下所示的干净输出:

10.11.12.13
10.11.12.14
10.11.12.15

做到这一点的最好/最简单的方法是什么?

我将在下面提供我目前的方法来实现这一点,但如果有更好的方法,我很乐意看到。即使它不使用该nodetool命令。

答案1

您可以使用以下nodetool status命令awk

nodetool status | awk '/^(U|D)(N|L|J|M)/{print $2}'

包含节点信息的每一行都将以节点的状态开头p 或own(^(U|N))后面跟着节点的状态正常的,大号离开,J愛 ( (N|L|J|M))。

只要 Apache Cassandra 开发人员不更改nodetool status命令的输出,它就应该正常工作。

相关内容