Каков наилучший способ получить список узлов, принадлежащих кластеру 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}'
Каждая строка, содержащая информацию об узле, будет либо начинаться с состояния узла, являющегося U p, либо D собственного (^(U|N)
) с последующим состоянием узла: N ormal, Laving, J oining или M oving ((N|L|J|M)
).
Пока разработчики Apache Cassandra не меняют вывод nodetool status
Команда это должно работать нормально.