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