Qual é a melhor maneira de obter uma lista de nós que pertencem a um cluster do Cassandra?

3

Estou criando alguns scripts para alguns clusters do Cassandra que eu opero. Alguns desses scripts precisam de uma lista de nós que fazem parte do cluster.

nodetool status imprimirá uma lista dos nós e seu estado atual, mas imprimirá mais informações do que eu preciso. Por exemplo:

$ 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

A lista dos nós deve ser apenas IPs (nomes de host não são necessários) e eu gostaria de limpar a saída como o seguinte:

10.11.12.13
10.11.12.14
10.11.12.15

Qual é a maneira melhor / mais simples de fazer isso?

Vou fornecer meu método atual abaixo para fazer isso, mas se houver uma maneira melhor, eu adoraria ver isso. Mesmo que não use o comando nodetool .

    
por Gene 02.09.2015 / 07:57

1 resposta

5

Você pode usar o comando nodetool status com awk :

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

Cada linha que contém informações sobre um nó iniciará com o Status do nó sendo U p ou D próprio ( ^(U|N) ) seguido pelo Estado de o nodo sendo N ormal, L entalhado, J sendo ou M oving ( (N|L|J|M) ).

Desde que os desenvolvedores do Apache Cassandra não alterem a saída do comando nodetool status , isso deve funcionar bem.

    
por 02.09.2015 / 07:57