Solución:
Tuve el mismo problema y lo resolví con removenode
, que no requiere que busque y cambie el token de nodo.
Primero, obtenga el UUID del 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 puede ver, el .201 y el .202 están muertos y en una red diferente. Estos se han cambiado a .91 y .92 sin una puesta fuera de servicio y una nueva puesta en servicio adecuadas. Estaba trabajando en la instalación de la red y cometí algunos errores …
En segundo lugar, elimine el .201 con el siguiente comando:
nodetool removenode 4fa4d101-d8d2-4de6-9ad7-a487e165c4ac
(en versiones anteriores era nodetool remove ...
)
Pero al igual que para el nodetool removetoken ...
, bloquea … (vea el comentario de samarth en la respuesta de psandord) Sin embargo, tiene un efecto secundario, coloca ese UUID en una lista de nodos que se eliminarán. Entonces, a continuación, podemos forzar la eliminación con:
nodetool removenode force
(en versiones anteriores era nodetool remove ...
)
Ahora el nodo acepta el comando y me dice que está eliminando la entrada no válida:
RemovalStatus: Eliminando token (-9136982325337481102). Esperando la confirmación de la 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 tanto, lleva un poco de tiempo, pero sigue siendo bastante rápido.
Siguiente a nodetool status
no muestra el nodo .201. Repito con .202 y ahora el estado es limpio.
Después de eso, es posible que también desee ejecutar una limpieza como se menciona en la respuesta de psanford:
nodetool cleanup
La limpieza debe ejecutarse en todos los nodos, uno por uno, para asegurarse de que el cambio se tenga en cuenta por completo.
Normalmente, al reemplazar un nodo, desea establecer el token del nuevo nodo en (failure node's token) - 1
y déjelo arrancar. A partir de la versión 1.0, ahora hay una bandera que puede especificar en el inicio para reemplazar un nodo muerto: “cassandra.replace_token =”.
Como ya ha agregado el nuevo nodo con el mismo token, hay un paso adicional:
- Mueva el token del nuevo nodo a
(failure node's token) - 1
utilizandonodetool move
- Correr
nodetool removetoken <failed node's token>
desde uno de los nodos superiores - Correr
nodetool cleanup
en cada nodo
Estas son básicamente las instrucciones anteriores a 1.0 para reemplazar un nodo muerto con el movimiento de token adicional.