我正在为我运营的一些 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
命令的输出,它就应该正常工作。