Sincronización Oplog en Replica Set

Recientemente nos encontramos con una incidencia respecto al oplog en un entorno MongoDB Community 4.4.5 desplegado sobre Windows Server y configurado como Replica Set de tres nodos.

El síntoma inicial parecía sencillo: uno de los nodos llevaba semanas sin sincronizar correctamente. Sin embargo, tras analizar el comportamiento del clúster comprobamos que el problema no estaba relacionado con la conectividad ni con el estado del resto de miembros, sino con el tamaño de la ventana de replicación disponible en el oplog.

Este artículo resume el análisis realizado, las conclusiones obtenidas y el procedimiento seguido para recuperar el nodo afectado.

Entorno

La infraestructura estaba compuesta por:

  • MongoDB Community 4.4.5
  • Replica Set de 3 nodos
  • Windows Server
  • Aproximadamente 190 GB de datos
  • Oplog de unos 10 GB
  • Ventana efectiva de replicación cercana a las 22 horas

Nodos:

  • nodo01 -> RECOVERING
  • nodo02 -> SECONDARY
  • nodo03 -> PRIMARY

¿Qué es el Oplog y por qué es importante?

MongoDB utiliza una colección especial denominada Oplog (Operations Log) para registrar las operaciones realizadas sobre la base de datos. Los nodos secundarios leen continuamente este histórico para mantenerse sincronizados con el primario.
Mientras un nodo permanezca desconectado durante un tiempo inferior al cubierto por el Oplog, podrá recuperar automáticamente los cambios pendientes. Sin embargo, si el desfase supera la ventana disponible, el nodo pierde la referencia histórica necesaria para continuar sincronizándose y será necesario realizar una resincronización completa.

oplog

Pasos para la sincronización oplog en replica set

1.Verificar estado replicaset

rs.status()
Verificar:
- nodo01 = RECOVERING
- nodo02 o nodo03 = PRIMARY

2.Verificar nuevo tamaño disco D:

En nodo01:

Get-PSDrive D

Verificar que aparecen los nuevos GB tras la ampliación en disco.

3.Parar servicio MongoDB en el 01

En el nodo 01:

Stop-Service MongoDB y Get-Process mongod -ErrorAction SilentlyContinue (para comprobar que no queda nigún proceso mongod...)

4.Configurar nuevo tamaño oplog

Editar el fichero:
C:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg
Buscar:
replication:
  replSetName: "mongo-pro"
Modificar dejando:
replication:
  replSetName: "mongo-pro"
  oplogSizeMB: 81920

NOTA:
81920 MB = 80 GB oplog

Guardar fichero.

5.ELIMINAR datos antiguos del 01

IMPORTANTE:
Este paso SOLO se realiza en el nodo 01.

Eliminar contenido antiguo:
Remove-Item -Recurse -Force D:\mongodb\data\db\*

NO borrar:
– D:\mongodb\security
– D:\mongodb\log
– mongod.cfg

6. Arrancar MongoDB y verificar initial sync

Ejecutar:

Start-Service MongoDB
y seguidamente:
rs.status()

El 01 debería aparecer pasando por estados similares a:

STARTUP2
RECOVERING
SECONDARY

7.Monitorización del proceso

En nodo01 revisar log:

Get-Content "D:\mongodb\log\mongod.log" -Tail 100 -Wait

Se deberían ver mensajes relacionados con:
- initial sync
- cloning
- syncing
- oplog application

8.Verificar estado final

Conclusion

La recuperación del nodo requirió una resincronización completa debido al desfase acumulado y a una ventana Oplog demasiado reducida.

La ampliación del almacenamiento y el aumento del tamaño del Oplog permitirán disponer de un margen significativamente mayor ante futuras incidencias y reducirán la necesidad de reconstrucciones completas de los nodos del Replica Set.

¿No estas seguro de sincronizar el oplog?

No dudéis en poneros en contacto con nosotros en caso de necesitar ayuda en la gestión de vuestras bases de datos. Échale un vistazo a nuestros servicios de soporte y mantenimiento SQL Server y Oracle.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *