Você precisa executar o reparo do nodetool em todos os nós?

12

Você precisa executar nodetool repairem todos os nós de um cluster ou precisa executá-lo apenas em um nó e, a partir daí, Cassandra cuidará do resto?

2rs2ts
fonte

Respostas:

9

Ao examinar a documentação, estou tendo dificuldade em encontrar uma referência para isso, mas a resposta curta é "sim", você precisa executar nodetool repair em cada nó do cluster. O mais próximo que posso encontrar é a documentação sobre o reparo de nós, que sugere que você não deve executar o reparo em mais de um nó no cluster por vez.

Você também pode executar o reparo com o -prsinalizador, o que limita a operação de reparo ao primeiro intervalo de tokens pelo qual o nó atual é responsável. Isso reduz a duplicação de trabalho quando executada nos nós restantes.

Aaron
fonte
Então, se eu executar -prem todos os nós, isso cobrirá todo o espaço de chave?
02s2ts
1
@ 2rs2ts Sim, se você executá-lo -prem todos os nós, ele cobrirá todo o (s) espaço (s) de chaves.
Aaron
1
Ok ... vou assumir, então, que você deve executá-lo em todos os nós, mas pode economizar tempo com o -prsinalizador.
2rs2ts 18/11/2014
1
Adicionei algumas fontes à outra resposta. Esta fonte é bastante clara: "O requisito rígido para a frequência de reparo de rotina é o valor de gc_grace_seconds. Execute uma operação de reparo pelo menos uma vez em cada nó dentro desse período." Reparando nós
Carl G
5

Como ele se comporta depende da sua configuração, qual versão do Cassandra você usa e como você executa o comando de reparo.

Se você apenas executar nodetool repairem um único nó em um cluster, ele reparará todos os dados (intervalos de token) pelos quais o nó é responsável e também os outros nós responsáveis ​​por esses dados.

Por exemplo, se você executasse o nodetool repair comando em um único nó em um determinado cluster:

  • Se você estiver executando um cluster de três nós com um fator de replicação de três, todos os nós possuirão todos os dados e, portanto, os reparos serão realizados para todos os nós.
  • Se você estiver executando um cluster de seis nós com um fator de replicação 2, os dados serão reparados apenas em dois dos seis nós. O reparo precisará ser iniciado em mais dois dos quatro nós restantes.

Dito isso, é possível definir quais hosts e datacenters executar reparos no uso dos sinalizadores -hostse -dc. Além disso, se você usar o -prsinalizador (que selecionará apenas o primeiro intervalo de tokens pelo qual o nó é responsável), será necessário executar nodetool repair -prem todos os nós no cluster.

Outra bandeira a ter em mente é a -incbandeira, que foi incluída no Cassandra 2.1. Esta opção irá reparar apenas novos dados (dados que não foram reparados anteriormente). Tenha cuidado ao confiar nisso, especialmente se você excluir dados com freqüência. ( mais sobre isso )

Outra coisa a ter em mente é que a maneira padrão de reparo no Cassandra pode variar. A partir do Cassandra 2.1, quando executado, nodetool repairele executa um reparo seqüencial completo por padrão. Você deseja pesquisar o que sua versão faz.

Para mais informações sobre o tópico:

https://www.datastax.com/dev/blog/repair-in-cassandra

Gene
fonte
2
a única boa resposta aqui
ruruskyi
2

Não, você não precisa executar em cada nó individual. nodetool repairé executado no conjunto de nós, que está claramente indicado na documentação .

Você pode limitar os nós ou parte dos dados nos quais deseja executar o reparo. Por exemplo, você pode fornecer a -propção para o intervalo do particionador, intervalo pelo qual o nó é responsável, mas isso terá que ser executado em todo o cluster. Mas se você escolher -local, os nós no datacenter local do nó serão reparados.

nkzscorpion
fonte
4
A execução nodetool repairem um único nó não é suficiente para reparar todos os dados replicados em todos os nós em todas as configurações. A execução nodetool repairem um único nó reparará apenas os dados replicados nesse nó. (A adição da -propção limita o reparo aos dados para os quais esse nó é a primeira réplica.) Mas se você tiver dados em seu cluster que não são replicados nesse nó, será necessário executar nodetool repairem nós adicionais.
Carl G
2
"Se a opção -pr não for especificada, o Cassandra reparará todos os intervalos de réplicas que são de responsabilidade do nó." documentação do nodetool repair ( Ou seja, não repara dados pelos quais este nó não é responsável pela replicação.) "O requisito rígido para a frequência de reparo de rotina é o valor de gc_grace_seconds. Execute uma operação de reparo pelo menos uma vez em cada nó dentro desse período." Reparando nós
Carl G