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 la resincronización de un miembro obsoleto y la creación de uno nuevo con datos de inicialización de otro miembro. Ambas opciones permiten restaurar un miembro del conjunto de réplicas. Al sincronizar un miembro, elija un momento en el que el sistema tenga suficiente ancho de banda para transferir una gran cantidad de datos. Programe la sincronización durante un período de bajo uso o durante una ventana 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, se permite que la función de sincronización inicial normal de MongoDB restaure los datos. Esta es la opción más sencilla, pero puede tardar más en reemplazar los datos.Consulta Sincronizar un nodo automáticamente.
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 miembros del conjunto y generar tráfico adicional hacia el miembro de origen. El miembro que se sincroniza requiere otro miembro del conjunto accesible y actualizado.
Si la instancia no tiene datos, puede seguir el procedimiento Agregar miembros a un conjunto de réplicas autoadministradas o Reemplazar un miembro de un conjunto de réplicas autoadministradas para agregar un nuevo miembro a un conjunto 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.Eliminar todos los datos y subdirectorios del
dbPathdirectorio del miembro.
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 miembro
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 instantánea. Para obtener información sobre cómo capturar una instantánea consistente de una mongod instancia en ejecución, consulte la documentación "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().