Я создаю сценарии для некоторых кластеров 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
команда, это должно работать нормально.