Mongodb copias de seguridad incrementales


26

Me dieron la tarea de configurar copias de seguridad incrementales para el conjunto de réplicas MongoDB, como punto de partida, por supuesto, lo busqué en Google y no pude encontrar nada en los documentos de MongoDB, sin embargo, encontré esta pregunta en Stack Overflow, que me animó a desarrollar mi propia solución ya que no encontró a Tayra muy activa.

Leí sobre oplogy me di cuenta de que era muy fácil desarrollar algo para reproducir el registro, pero resulta que no tenía que hacerlo, mongorestorelo mismo que yo.

Ahora tengo una solución de trabajo con scripts de bash y fue bastante fácil, esa es la razón por la que pregunto aquí si hay algún defecto en mi lógica, o tal vez algo que me muerda en el futuro.

A continuación, cómo implementé eso:

Procedimiento de respaldo completo

  1. bloqueo escribe en un miembro secundario db.fsyncLock()
  2. Tomar instantáneas
  3. Grabar la última posición del oplog

    db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
  4. Desbloquear escribe db.fsyncUnlock()

Procedimiento de respaldo incremental

  1. bloqueo escribe en un miembro secundario
  2. Volcar el registro de operaciones desde la posición de registro registrada en la copia de seguridad completa (o la última incremental):

    mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
        --query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
  3. Registre la última posición del registro de operaciones (de la misma manera que para las copias de seguridad completas)

  4. Desbloquear escribe

Procedimiento de restauración de respaldo completo

  1. detener todas las instancias de mongod
  2. copie la instantánea en el directorio de datos del cuadro que será el principal, pero asegúrese de excluir todo local*y mongod.lock esta técnica de restauración se llama reconfigurar al romper el espejo
  3. Comience primaria
  4. reconfigurar el conjunto de réplicas
  5. inicie los secundarios sin ningún dato, permítales realizar la sincronización inicial. O copie los datos del nuevo primario con una nueva localbase de datos

Restaurar copia de seguridad incremental

Cuando creamos una copia de seguridad incremental, la almacenaba así:

/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json

Estamos inscritos oplog.rs.bsonpero tendremos que cambiarle el nombre, así que aquí están los pasos:

  1. cambiar el directorio a la copia de seguridad: cd /mnt/mongo-test_backup/1/local
  2. eliminar el archivo json rm *.json
  3. renombrar el archivo bson mv oplog.rs.bson oplog.bson
  4. restaurarlo:

    mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local

Lo tengo todo escrito, puedo comprometerlo en GitHub más tarde.

La pregunta es si hay algún defecto en la lógica. Sospecho un poco, ya que el procedimiento es bastante sencillo y aún así no pude encontrarlo documentado en ningún lado.


2
¿Qué versión de Mongo estás usando? Si está utilizando wiredtiger, entonces el primer elemento al que hizo referencia con db.fsyncLock () es un problema. MongoDB Inc afirma que "con WiredTiger, el comando fsync con la opción de bloqueo no puede garantizar que los archivos de datos no cambien. Como resultado, no use estos métodos para garantizar la coherencia a los efectos de crear copias de seguridad". enlace
SDillon

1
@SDillon usando 3.0.4 pero no usando WiredTiger, al menos no todavía. Si decidimos usarlo, en lugar de escribir bloqueos, tendremos que detener a mongod todos juntos. Es un punto justo gracias
Tiago

Encontré la siguiente herramienta para la copia de seguridad incremental github.com/EqualExperts/Tayra espero que esto ayude
Ahmad Abuhasna

1
"Cambiado en la versión 3.2: el comando fsync con la opción de bloqueo puede garantizar que los archivos de datos no cambien para las instancias de MongoDB que utilizan los motores de almacenamiento MMAPv1 o WiredTiger, lo que proporciona coherencia a los efectos de crear copias de seguridad".
seguridad

La forma normal (y absolutamente más fácil) de hacer copias de seguridad incrementales es usar LVM e instantáneas. docs.mongodb.com/manual/tutorial/…
JJussi

Respuestas:


3

Para responder tu pregunta. ¡No! No hay fallas en su lógica y debería funcionar sin problemas. Sin embargo, si se pueden usar instantáneas LVM, es una mejor manera de hacer copias de seguridad.


¿Cómo se realizan copias de seguridad incrementales de una instantánea LVM? ¡Gracias!
TanisDLJ

Las instantáneas de LVM son incrementales por naturaleza. Las instantáneas son momentos en el tiempo y solo hay cambios grabados.
JJussi

Solo una instantánea tomada sí, es incremental. Pero si archiva la instantánea, entonces es una copia de seguridad completa. No puede archivar diferentes copias de seguridad incrementales como lo hace la duplicidad, por ejemplo. Y no puede simplemente comenzar a crear instantáneas cada 30 minutos para copias de seguridad incrementales, ya que afectaría el rendimiento realmente mal.
TanisDLJ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.