Назад | Перейти на главную страницу

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

Вы можете использовать nodetool status команда с awk:

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

Каждая строка, содержащая информацию об узле, будет начинаться с состояния текущего узла. Up или Dсвоя ( ^(U|N) ), за которым следует Состояние узла, Nобычный Lкарниз Jдобыча, или Mовинг ( (N|L|J|M) ).

Пока разработчики Apache Cassandra не изменяют вывод nodetool status команда, это должно работать нормально.