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

我正在为我操作的一些Cassandra集群创build一些脚本。 其中一些脚本需要属于集群一部分的节点列表。

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命令。

你可以在awk使用nodetool status命令:

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

每条包含关于一个节点的信息的行将以该节点的状态为U p或D own( ^(U|N) )开始,随后是该节点的状态为N ormal, L eaving, J orining或M(N|L|J|M) )。

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