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 oplog
y me di cuenta de que era muy fácil desarrollar algo para reproducir el registro, pero resulta que no tenía que hacerlo, mongorestore
lo 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
- bloqueo escribe en un miembro secundario
db.fsyncLock()
- Tomar instantáneas
Grabar la última posición del oplog
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
Desbloquear escribe
db.fsyncUnlock()
Procedimiento de respaldo incremental
- bloqueo escribe en un miembro secundario
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) } }'
Registre la última posición del registro de operaciones (de la misma manera que para las copias de seguridad completas)
- Desbloquear escribe
Procedimiento de restauración de respaldo completo
- detener todas las instancias de
mongod
- copie la instantánea en el directorio de datos del cuadro que será el principal, pero asegúrese de excluir todo
local*
ymongod.lock
esta técnica de restauración se llama reconfigurar al romper el espejo - Comience primaria
- reconfigurar el conjunto de réplicas
- inicie los secundarios sin ningún dato, permítales realizar la sincronización inicial. O copie los datos del nuevo primario con una nueva
local
base 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.bson
pero tendremos que cambiarle el nombre, así que aquí están los pasos:
- cambiar el directorio a la copia de seguridad:
cd /mnt/mongo-test_backup/1/local
- eliminar el archivo json
rm *.json
- renombrar el archivo bson
mv oplog.rs.bson oplog.bson
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.