Devez-vous exécuter la réparation nodetool sur chaque nœud?

12

Devez-vous exécuter nodetool repairsur tous les nœuds d'un cluster, ou n'avez-vous besoin de l'exécuter que sur un nœud, et à partir de là, Cassandra s'occupera du reste?

2rs2ts
la source

Réponses:

9

En parcourant la documentation, j'ai du mal à trouver une référence pour cela, mais la réponse courte est "oui", vous devez exécuter nodetool repairsur chaque nœud de votre cluster. Le plus proche que je peux trouver est la documentation sur la réparation des nœuds qui suggère que vous ne devriez pas exécuter la réparation sur plus d'un nœud dans votre cluster à la fois.

Vous pouvez également exécuter la réparation avec l' -prindicateur, ce qui limite l'opération de réparation à la première plage de jetons dont le nœud actuel est responsable. Cela réduit la duplication du travail lorsqu'il est exécuté sur les nœuds restants.

Aaron
la source
Donc, si je lance avec -prsur chaque nœud, cela couvrira-t-il tout l'espace de clés?
2rs2ts
1
@ 2rs2ts Oui, si vous l'exécutez avec -prsur chaque nœud, il couvrira l'intégralité des espaces de clés.
Aaron
1
D'accord ... Je vais donc supposer que vous êtes censé l'exécuter sur chaque nœud, mais vous pouvez gagner du temps avec l' -prindicateur.
2rs2ts
1
J'ai ajouté quelques sources à l'autre réponse. Cette source est assez claire: "La fréquence requise pour les réparations de routine est la valeur de gc_grace_seconds. Exécutez une opération de réparation au moins une fois sur chaque nœud pendant cette période." Réparation des nœuds
Carl G
5

Son comportement dépend de votre configuration, de la version de Cassandra que vous utilisez et de la façon dont vous exécutez la commande de réparation.

Si vous exécutez simplement nodetool repairsur un seul nœud dans un cluster, il réparera toutes les données (plages de jetons) dont ce nœud est responsable ainsi que les autres nœuds qui sont responsables de ces données.

Ainsi, par exemple, si vous exécutez la nodetool repaircommande sur un seul nœud dans un cluster donné:

  • Si vous exécutez un cluster à trois nœuds avec un facteur de réplication de trois, tous les nœuds seront propriétaires de toutes les données et les réparations seront donc effectuées pour tous les nœuds.
  • Si vous exécutez un cluster à six nœuds avec un facteur de réplication de 2, les données ne seront réparées que sur deux des six nœuds. La réparation devra être lancée sur deux autres des quatre nœuds restants.

Cela dit, il est possible de définir quels hôtes et centres de données effectuer des réparations sur l'utilisation des indicateurs -hostset -dc. De plus, si vous utilisez l' -prindicateur (qui ne choisira que la première plage de jetons dont le nœud est responsable), vous devrez exécuter nodetool repair -prsur tous les nœuds du cluster.

Un autre drapeau à garder à l'esprit est le -incdrapeau, qui a été inclus dans Cassandra 2.1. Cette option ne réparera que les nouvelles données (données qui n'ont pas été précédemment réparées). Soyez prudent lorsque vous vous y fiez, surtout si vous supprimez fréquemment des données. ( plus à ce sujet )

Il faut également garder à l'esprit que la façon dont les réparations sont effectuées par défaut dans Cassandra peut varier. À partir de Cassandra 2.1 lors de son exécution, nodetool repairil effectue une réparation séquentielle complète par défaut. Vous voudrez vérifier ce que fait votre version.

Pour plus de lecture sur le sujet:

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

Gène
la source
2
la seule bonne réponse ici
ruruskyi
2

Non, vous n'avez pas à exécuter sur chaque nœud individuel. nodetool repairs'exécute sur un ensemble de nœuds, ce qui est clairement indiqué dans la documentation .

Vous pouvez limiter les nœuds ou une partie des données sur lesquels vous souhaitez exécuter la réparation. Par exemple, vous pouvez fournir une -proption pour la plage de partitionnement, plage dont le nœud est responsable, mais cela devra être exécuté sur l'ensemble du cluster. Mais si vous choisissez -local, les nœuds du centre de données local du nœud seront réparés.

nkzscorpion
la source
4
L'exécution nodetool repairsur un seul nœud n'est pas suffisante pour réparer toutes les données répliquées sur tous les nœuds dans toutes les configurations. L'exécution nodetool repairsur un seul nœud ne réparera que les données répliquées sur ce nœud. (L'ajout de l' -proption limite la réparation aux données pour lesquelles ce nœud est le premier réplica.) Mais si vous avez des données dans votre cluster qui ne sont pas répliquées sur ce nœud, vous devez alors exécuter nodetool repairsur des nœuds supplémentaires.
Carl G
2
"Si l'option -pr n'est pas spécifiée, Cassandra répare toutes les plages de réplicas qui relèvent de la responsabilité du nœud." docs de réparation de nodetool ( qui ne représentent pas des données de réparation pour lesquelles ce noeud n'est pas responsable de la reproduction.) « L'exigence difficile pour la fréquence des réparations de routine est la valeur de gc_grace_seconds. Exécuter une opération de réparation au moins une fois sur chaque noeud dans cette période. » Réparation des nœuds
Carl G