Каков наилучший способ получить список узлов, принадлежащих кластеру 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 Команда это должно работать нормально.

Другие вопросы по тегам