2012-07-20 15 views
5

Estoy desarrollando un script automatizado para la reparación de nodetool que se ejecutará cada fin de semana en los 6 nodos Cassandra. Tenemos 3 en DC1 y 3 en DC2. Solo quiero entender el peor de los casos. ¿Qué pasaría si se pierde la conectividad entre DC1 y DC2 o si una pareja de réplicas baja antes o durante una reparación de la herramienta noda? Podría ser un problema de red, una actualización de red (que generalmente ocurre los fines de semana) u otra cosa. Entiendo que la reparación de nodetool computa un árbol de Merkle para cada rango de datos en ese nodo, y lo compara con las versiones en otras réplicas. Entonces, si no hay conectividad entre réplicas, ¿cómo se comportaría una reparación de nodo nodal? ¿Realmente reparará los nodos? ¿Tengo que volver a ejecutar la reparación de la herramienta de nodo después de que todos los nodos estén activos y se haya restaurado la conectividad? ¿Serán sus efectos secundarios de este evento? Lo miré con curiosidad, pero no pude encontrar muchos detalles. Cualquier idea sería útil.Cassandra Replicas Down durante la reparación de nodetool?

Gracias.

Respuesta

1

Digamos que está utilizando vnodes, lo que de manera predeterminada significa que cada nodo tiene 256 rangos, pero la idea es la misma.

Si el problema de red ocurre después de que la reparación de la herramienta de nodo ya se haya iniciado, verá en los registros que algunos rangos se repararon con éxito y otros no. El error dirá que la reparación del rango falló porque el nodo "192.168.1.1 está muerto" algo así.

Si se produce un error de red antes de que se inicie la reparación de nodetool, todos los intervalos fallarán con el mismo error.

En ambos casos, deberá ejecutar otra reparación de herramienta de nodo después de resolver el problema de la red.

No conozco la cantidad de datos que tiene en esos 6 nodos, pero en mi experiencia si el clúster puede manejarlo, es mejor ejecutar la reparación de nodetool una vez por semana en un día diferente de la semana. Por ejemplo, puede reparar el nodo 1 el domingo, el nodo 2 el lunes y así sucesivamente. Si tiene una cantidad pequeña de datos o las adiciones/actualizaciones durante un día no son demasiadas, incluso puede ejecutar una reparación una vez al día. Cuando tenga un clúster ya reparado y ejecute nodetool repair más a menudo, le llevará mucho menos tiempo terminar, pero de nuevo si tiene demasiados datos, puede que no sea posible.

En cuanto a los efectos secundarios, solo puede notar una diferencia en los datos si usa el nivel de consistencia 1, si se produce una consulta contra el nodo "no reparado" los datos serán diferentes a los del "reparado" "nodos. Puede resolver esto aumentando el nivel de coherencia a 2, por ejemplo, y luego si se "reparan" 2 nodos y la consulta que ejecuta se resuelve usando esos 2 nodos verá una diferencia nuevamente. Usted tiene una compensación aquí, ya que la mejor opción para evitar esta "diferencia" en las consultas es tener el factor de consistencia = factor de replicación, que trae otro problema cuando 1 de los nodos está inactivo, todo el clúster está inactivo y usted comience a recibir tiempos de espera en sus consultas.

Espero que ayude!

1

Hay varias opciones de reparación disponibles, puede elegir una dependiendo del uso de su aplicación. Si está utilizando DSE Cassandra, le recomendaría programar la reparación de OpsCenter, que repara de forma incremental, con una duración inferior a gc_grace_seconds.

A continuación se presentan diferentes opciones de reparación haciendo:

  1. por defecto (Ninguno): la eliminación de todos los rangos de partición 3: 1 primarias y 2 réplicas de propiedad del nodo en el que fue ejecutado. El total de 5 nodos estará involucrado. 2 nodos estarán arreglando 1 rango de partición, 2 nodos estarán arreglando 2 rangos de partición, 1 nodo estará arreglando 3 rangos de partición.
  2. -par: Hará la operación anterior en paralelo.
  3. -pr: arreglará solo el rango de partición primaria para el nodo en el que se ejecutó. Si está utilizando la coherencia de escritura de EACH_QUORUM, utilice también la opción -local para reducir el tráfico cruzado de DC.

Sugeriría ir con la opción 3 si ya está en producción para evitar cualquier impacto en el rendimiento debido a la reparación.

Si desea leer acerca de la reparación en más detalle, eche un vistazo a este here