Un set de réplicas se vuelve "desactualizado" cuando su proceso de replicación se retrasa tanto que el primario sobrescribe entradas de Oplog que el miembro aún no ha replicado. El nodo no puede alcanzar el ritmo y se vuelve "desactualizado". Cuando esto ocurre, debes resincronizar completamente el nodo removiendo sus datos y realizando una sincronización inicial.
Este tutorial aborda tanto la resincronización de un nodo obsoleto como la creación de un nuevo nodo utilizando datos semilla de otro nodo, ambos procedimientos que pueden utilizarse para restaurar un nodo de un conjunto de réplicas. Al sincronizar a un nodo, se debe elegir una hora en la que el sistema tenga la capacidad necesaria para transferir una gran cantidad de datos. Programa la sincronización en un momento de bajo uso o durante un periodo de mantenimiento.
Importante
Volver a sincronizar desde el nodo más actualizado en el set de réplicas.
Si vuelves a sincronizar un nodo con datos obsoletos, el nodo se reincorpora al set de réplicas en un punto posterior a donde estaba antes. Una escritura que fue confirmada por mayoría antes de la resincronización puede que ya no esté confirmada por mayoría. Esto puede ocasionar la pérdida de datos.
MongoDB ofrece dos opciones para realizar una sincronización inicial:
Reiniciar el
mongodcon un directorio de datos vacío y permite que la funcionalidad estándar de sincronización inicial de MongoDB restablezca los datos. Esta es la opción más simple, pero puede llevar más tiempo reemplazar los datos.Reiniciar la máquina con una copia de un directorio de datos reciente de otro nodo del set de réplicas. Este procedimiento puede reemplazar los datos más rápidamente, pero requiere más pasos manuales.
Consulta Sincronizar copiando archivos de datos de otro nodo.
Procedimientos
Nota
Para evitar cambiando el quórum de escritura, nunca sustituya más de un set de réplicas a la vez.
Sincroniza automáticamente un nodo
Este procedimiento se basa en el proceso típico de MongoDB para la Sincronización de set de réplicas. Esto almacena los datos actuales en el nodo. Para obtener una visión general del proceso de sincronización inicial de MongoDB, consulta la sección de Sincronización de Set de réplicas.
Las operaciones de sincronización inicial pueden afectar a los demás nodos del conjunto y generar tráfico adicional al nodo de origen. El nodo que se está sincronizando requiere que otro nodo del conjunto esté accesible y actualizado.
Si la instancia no tiene datos, puedes seguir el procedimiento para Agregar nodos a un set de réplicas autogestionado o Reemplazar un nodo de un set de réplicas autogestionado para agregar un nuevo nodo a un set de réplicas.
También puedes forzar que un mongod que ya es nodo del conjunto realice una sincronización inicial al reiniciar la instancia sin el contenido del directorio dbPath:
Detén la instancia
mongoddel nodo. Para garantizar un apagado limpio, use el métododb.shutdownServer()demongosho en sistemas Linux, la opciónmongod --shutdown.(Opcional) Hacer una copia de seguridad de todos los datos y subdirectorios del directorio
dbPathdel nodo. Si no se requiere una copia de seguridad completa, considera hacer una copia de seguridad solo del directoriodiagnostic.datapara preservar datos de solución de problemas potencialmente útiles en caso de inconvenientes. Consulta Captura de Datos Diagnósticos a Tiempo Completo para más información.Borra todos los datos y subdirectorios del directorio
dbPathdel nodo.
En este punto, el mongod realiza una sincronización inicial. La duración del proceso de sincronización inicial varía dependiendo del tamaño de la base de datos y la latencia de red entre los miembros del set de réplicas.
Sincronizar copiando archivos de datos de otro nodo
Este enfoque "sembrar" un nodo nuevo o estancado utilizando los archivos de datos de un nodo existente en el set de réplicas. Los archivos de datos deben ser lo suficientemente recientes para permitir que el nuevo nodo se ponga al día con el oplog. De lo contrario, el nodo necesitaría realizar una sincronización inicial.
Copia los archivos de datos
Puede capturar los archivos de datos como una snapshot o una copia directa. Sin embargo, en la mayoría de los casos, no se pueden copiar archivos de datos de una instancia en ejecución de mongod a otra porque los archivos de datos cambiarán durante la operación de copia de archivos.
Importante
Si copias archivos de datos, asegúrate de que tu copia incluya el contenido de la base de datos local.
No se puede usar una mongodump copia de seguridad para los archivos de datos: solo una copia de seguridad snapshot. Para conocer los enfoques para capturar una coherente de una mongod instancia en ejecución, consulta la documentación sobre métodos de copia de seguridad para una implementación autogestionada.
Sincroniza el nodo
Luego de copiar los archivos de datos desde el origen "seed", iniciar la instancia mongod con un nuevo members[n]._id y permitir que aplicar todas las operaciones desde el oplog hasta reflejar el estado actual del set de réplicas. Para ver el estado actual del set de réplicas, utiliza rs.printSecondaryReplicationInfo() o rs.status().