2011-12-21 47 views
8
  1. Tengo el conjunto de cassandra de 12 nodos en EC2.
  2. Debido a alguna falla, hemos perdido completamente uno de los nodos. Quiero decir que la máquina ya no existe.
  3. Así que he creado la nueva instancia EC2 con diferente ip y el mismo token que el nodo muerto y también tuve la copia de seguridad de los datos en ese nodo para que funcione bien
  4. Pero el problema es que los nodos muertos todavía aparece como un nodo inalcanzable en describir el clúster.
  5. Como ese nodo (instancia EC2) no existe más que no puedo usar el nodetool desmantelar o nodetool disablegossip

¿Cómo puedo deshacerme de este nodo inalcanzable¿Cómo eliminar el nodo muerto del clúster Cassandra?

Respuesta

5

Normalmente cuando reemplace un nodo, quiere establecer el token del nuevo nodo en (failure node's token) - 1 y dejarlo arrancar. A partir de 1.0 ahora hay un indicador que puede especificar al inicio al replace a dead node: "cassandra.replace_token =".

Dado que ya ha añadido el nuevo nodo con la misma razón que hay un paso adicional:

  1. movimiento de contadores al nuevo nodo a (failure node's token) - 1 usando nodetool move
  2. Run nodetool removetoken <failed node's token> de uno de los nodos hasta
  3. Ejecute nodetool cleanup en cada nodo

Estos son básicamente el pre 1.0 instructions para reemplazar un nodo muerto con el movimiento de token adicional.

+0

Gracias Psanford. Pero en mi caso ya comencé el nuevo nodo con el mismo token que tenía el nodo muerto. Ahora el anillo está bien y equilibrado. Pero en describir el clúster, muestra el nodo muerto como inalcanzable. Todavía está bien para la mayoría de los casos, pero cargamos los datos con sstableloader y con el nodo inalcanzable sstableloader no funciona. ¿Cuál podría ser la posible solución para esto? – samarth

+0

Necesita borrar el conocimiento del antiguo nodo del anillo. Puedes hacer eso con 'nodetool removetoken'. Tu problema es que también eliminaría el nodo de reemplazo. Por lo tanto, debe mover el token del nodo de reemplazo a token-1 antes de hacer el 'removetoken'. – psanford

+0

He intentado con la solución que ha sugerido. Hemos movido con éxito el nuevo nodo. Pero durante la eliminación del nodo muerto se queda trabado diciendo: 'RemovalStatus: Removing token (62676456546693435176060154681903071729). Esperando la confirmación de la replicación de [cassandra-1/10.101.101.01 ' – samarth

7

Tuve el mismo problema y lo resolví con removenode, que no requiere que encuentre y cambie el token del nodo.

primer lugar, obtener el UUID nodo:

nodetool status 

DN 192.168.56.201 ?   256  13.1% 4fa4d101-d8d2-4de6-9ad7-a487e165c4ac r1 
DN 192.168.56.202 ?   256  12.6% e11d219a-0b65-461e-babc-6485343568f8 r1 
UN 192.168.2.91 156.04 KB 256  12.4% e1a33ed4-d613-47a6-8b3b-325650a2bbd4 RAC1 
UN 192.168.2.92 156.22 KB 256  13.6% 3a4a086c-36a6-4d69-8b61-864ff37d03c9 RAC1 
UN 192.168.2.93 149.6 KB 256  11.3% 20decc72-8d0a-4c3b-8804-cc8bc98fa9e8 RAC1 

Como se puede ver el 0.201 y el 0.202 han muerto y en una red diferente. Estos han sido cambiados a .91 y .92 sin el desmantelamiento apropiado y el nuevo servicio. Yo estaba trabajando en la instalación de la red y cometí algunos errores ...

En segundo lugar, retire el 0.201 con el siguiente comando:

nodetool removenode 4fa4d101-d8d2-4de6-9ad7-a487e165c4ac 

(en versiones anteriores era nodetool eliminar ...)

Pero al igual que para el nodetool removetoken ..., bloquea ... (ver el comentario de samarth en la respuesta de Prandord) Sin embargo, tiene un efecto secundario, pone ese UUID en una lista de nodos que se eliminarán. Entonces, podemos forzar la eliminación con:

nodetool removenode force 

(en versiones anteriores era nodetool eliminar ...)

Ahora el nodo acepta el comando que me dice que es la eliminación de la entrada no válida:

RemovalStatus: Extracción de fichas (-9136982325337481102). Esperando confirmación de replicación de [/192.168.2.91,/192.168.2.92].

También vemos que se comunica con los otros dos nodos que están activos y por lo tanto toma un poco de tiempo, pero todavía es bastante rápido.

A continuación, nodetool status no muestra el nodo .201. Repito con .202 y ahora el estado es limpio.

Después de que usted también puede querer ejecutar una limpieza como se menciona en psanford respuesta:

nodetool cleanup 

La limpieza se debe ejecutar en todos los nodos, uno por uno, para asegurarse de que el cambio se tenga plenamente en cuenta .

+0

Hola, por favor tengo una pregunta. estado nodetool devuelve solo un nodo (con ip @ 127.0.0.1) Estado = Arriba/Abajo |/Estado = Normal/Salir/Unir/Mover - Tokens de carga de direcciones posee (efectivo) Host ID Rack ONU 127.0.0.1 83.05 KB 256 100.0% 460ddcd9-1ee8-48b8-a618-c076056aad07 rack1 – researcher

+0

¿Cómo puedo hacer para cambiar la dirección IP? y ¿cómo puedo obtener la lista de todos los nodos en el anillo como lo has hecho? muchas gracias. Atentamente. – researcher

+0

Busque un archivo llamado cassandra.yaml y dentro del archivo, busque una entrada llamada seed_provider. Eso tiene entradas para direcciones IP. Luego busque en los archivos cassandra-rackdc.properties y cassandra-topology.properties. También hay una cassandra-topology.yaml que creo que ya no se usa en las versiones más nuevas. –

Cuestiones relacionadas