¿Tiene que ejecutar la reparación de nodetool en cada nodo?

12

¿Tiene que ejecutar nodetool repairen cada nodo de un clúster, o solo necesita ejecutarlo en un nodo, y desde allí Cassandra se encargará del resto?

2rs2ts
fuente

Respuestas:

9

Al revisar la documentación, me cuesta encontrar una referencia para esto, pero la respuesta breve es "sí", debe ejecutar nodetool repairen cada nodo de su clúster. Lo más cercano que puedo encontrar es la documentación sobre la reparación de nodos que sugiere que no debe ejecutar la reparación en más de un nodo en su clúster a la vez.

También puede ejecutar la reparación con el -prindicador, que limita la operación de reparación al primer rango de token del que es responsable el nodo actual. Esto reduce la duplicación de trabajo cuando se ejecuta en los nodos restantes.

Aaron
fuente
Entonces, si ejecuto con -prcada nodo, ¿eso cubrirá todo el espacio de claves?
2rs2ts
1
@ 2rs2ts Sí, si lo ejecuta -pren cada nodo, cubrirá todo el espacio de teclas.
Aaron
1
Bien ... Voy a suponer, entonces, que se supone que debes ejecutarlo en cada nodo, pero puedes ahorrar tiempo con la -prbandera.
2rs2ts
1
Agregué algunas fuentes a la otra respuesta. Esta fuente es bastante clara: "El requisito difícil para la frecuencia de reparación de rutina es el valor de gc_grace_seconds. Ejecute una operación de reparación al menos una vez en cada nodo dentro de este período de tiempo". Reparación de nodos
Carl G
5

Su comportamiento depende de su configuración, qué versión de Cassandra usa y cómo ejecuta el comando de reparación.

Si solo se ejecuta nodetool repairen un solo nodo en un clúster, reparará todos los datos (rangos de tokens) de los que ese nodo es responsable y también los otros nodos que son responsables de esos datos.

Entonces, por ejemplo, si tuviera que ejecutar el nodetool repaircomando en un solo nodo en un clúster dado:

  • Si está ejecutando un clúster de tres nodos con un factor de replicación de tres, todos los nodos serán dueños de todos los datos y, por lo tanto, se realizarán reparaciones para todos los nodos.
  • Si está ejecutando un clúster de seis nodos con un factor de replicación de 2, los datos solo se repararán en dos de los seis nodos. La reparación deberá iniciarse en dos más de los cuatro nodos restantes.

Dicho esto, es posible definir qué hosts y centros de datos realizar reparaciones al usar los indicadores -hostsy -dc. Además, si usa el -prindicador (que solo seleccionará el primer rango de tokens del que es responsable el nodo), deberá ejecutarlo nodetool repair -pren todos los nodos del clúster.

Otra bandera a tener en cuenta es la -incbandera, que se incluyó en Cassandra 2.1. Esta opción solo reparará datos nuevos (datos que no han sido reparados previamente). Tenga cuidado al confiar en esto, especialmente si elimina datos con frecuencia. ( más sobre esto )

Otra cosa a tener en cuenta es que la forma predeterminada en que se realizan las reparaciones en Cassandra puede variar. A partir de Cassandra 2.1 cuando se ejecuta solo nodetool repair, realiza una reparación secuencial completa de forma predeterminada. Querrá consultar qué hace su versión.

Para más lectura sobre el tema:

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

Gene
fuente
2
la única buena respuesta aquí
ruruskyi
2

No, no tiene que ejecutar en cada nodo individual. nodetool repairse ejecuta en un conjunto de nodos, que se indica claramente en la documentación .

Puede limitar los nodos o parte de los datos en los que desea ejecutar la reparación. Por ejemplo, puede proporcionar una -propción para el rango del particionador, rango del cual el nodo es responsable, pero esto tendrá que ejecutarse en todo el clúster. Pero si elige -local, los nodos en el centro de datos local del nodo serán reparados.

nkzscorpion
fuente
44
La ejecución nodetool repairen un solo nodo no es suficiente para reparar todos los datos replicados en todos los nodos en todas las configuraciones. La ejecución nodetool repairen un solo nodo solo reparará los datos replicados en ese nodo. (Agregar la -propción limita la reparación a los datos para los cuales este nodo es la primera réplica). Pero si tiene datos en su clúster que no se replican en este nodo, debe ejecutar nodetool repairen nodos adicionales.
Carl G
2
"Si no se especifica la opción -pr, Cassandra repara todos los rangos de réplica que son responsabilidad del nodo". documentos de reparación de nodetool (es decir, no repara datos de los que este nodo no es responsable de la replicación). "El requisito difícil para la frecuencia de reparación de rutina es el valor de gc_grace_seconds. Ejecute una operación de reparación al menos una vez en cada nodo dentro de este período de tiempo". Reparación de nodos
Carl G