Realizar una copia de seguridad de un clúster fragmentado autogestionado con un vaciado de base de datos
A partir de MongoDB 7.1 (también disponible desde 7.0.2, 6.0.11, y 5.0.22), puede respaldar datos en clústeres sharded utilizando mongodump.
Acerca de esta tarea
mongodump es una utilidad que crea una exportación binaria del contenido de la base de datos. Puedes usar la utilidad mongodump para realizar copias de seguridad autogestionadas de un clúster.
Para hacer copias de seguridad de un clúster con mongodump, debes dejar de utilizar el balanceador, dejar de guardar y detener cualquier operación de transformación de esquemas en el clúster. Esto ayuda a reducir la probabilidad de inconsistencias en la copia de seguridad.
MongoDB proporciona operaciones de copia de seguridad y restauración que pueden ejecutarse con el balanceador y ejecutar transacciones a través de los siguientes servicios:
Copias de seguridad obsoletas
Las copias de seguridad proporcionan una snapshot del estado actual de la base de datos. Cuando restauras a partir de una copia de seguridad, la base de datos restaurada no incluye ningún cambio realizado después de que se haya hecho la copia de seguridad, lo que puede provocar pérdida de datos.
Antes de comenzar
Esta tarea utiliza mongodump para respaldar un clúster particionado. Asegúrate de que tienes un clúster en funcionamiento que contenga datos en colecciones particionadas.
Compatibilidad de versiones
Este procedimiento requiere una versión de MongoDB que soporte el bloqueo fsync desde mongos.
A partir de MongoDB 7.1 (también disponible 7.0.2 a6.0.11 partir 5.0 de,22 y.) los fsync comandos y se pueden ejecutar en fsyncUnlock mongos para bloquear y desbloquear un clúster fragmentado.
Privilegios de administrador
Para utilizar este procedimiento, su usuario de MongoDB debe tener la autorización, que puede estar disponible a fsync hostManager través de un rol personalizado o usando el rol integrado.
Con esta autorización podrás ejecutar los comandos fsync fsyncUnlock y.
Pasos
Para realizar una copia de seguridad autogestionada de un clúster fragmentado, complete los siguientes pasos:
Encuentra una ventana de copia de seguridad
Para encontrar un buen momento para realizar una copia de seguridad, supervise el uso de su aplicación y base de datos para encontrar un momento en el que sea poco probable que se produzcan migraciones por fragmentos, redistribuciones y operaciones de transformación de esquemas.
Nota
Estos pasos solo pueden producir una copia de seguridad coherente si se siguen exactamente y no hay ninguna operación en curso cuando se empieza.
Para obtener más información, consulte Programar ventana de copia de seguridad para un clúster autogestionado.
Detener el balanceador
Para evitar que las migraciones de fragmentos interrumpan la copia de seguridad, conéctese a mongos y utilice el método sh.stopBalancer() para detener el equilibrador:
sh.stopBalancer()
Si se está llevando a cabo una ronda de balanceo, la operación esperará a que se complete el balanceo.
Para verificar que el balanceador esté detenido, utiliza el método sh.getBalancerState():
use config while( sh.isBalancerRunning().mode != "off" ) { print( "Waiting for Balancer to stop..." ); sleep( 1000 ); }
Bloquear el clúster
El clúster particionado debe permanecer bloqueado durante el proceso de copia de seguridad para proteger la base de datos de escrituras, lo que podría causar inconsistencias en la copia de seguridad.
Para bloquear un clúster sharding, conectese a mongos y utilize el método db.fsyncLock():
db.getSiblingDB("admin").fsyncLock()
Para confirmar el bloqueo, en mongos y el primario mongod de los servidores de configuración, ejecuta el siguiente pipeline de agregación y asegúrate de que todas las particiones estén bloqueadas:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } }], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] )
[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
Realizar copias de seguridad
Para hacer una copia de seguridad del clúster particionado, use mongodump para conectarse a mongos y realizar la copia de seguridad:
mongodump \ --host mongos.example.net \ --port 27017 \ --username user \ --password "passwd" \ --out /opt/backups/example-cluster-1
Desbloquea el clúster
Una vez completada la copia de seguridad, puede desbloquear el clúster para permitir que se reanuden las escrituras.
Para desbloquear el clúster, utilice el db.fsyncUnlock() método:
db.getSibling("admin").fsyncUnlock()
Para confirmar el desbloqueo, en mongos y en el mongod primario de los servidores de configuración, ejecute el siguiente pipeline de agregación y asegúrese de que todas las particiones estén desbloqueadas:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } }], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] )
[ { fsyncLocked: false }, { fsyncUnlocked: true } ]
Reiniciar el Balanceador
Para reiniciar el balanceador, utiliza el método sh.startBalancer():
sh.startBalancer()
Para confirmar que el balanceador está ejecutándose, use el método sh.getBalancerState():
sh.getBalancerState()
true
El comando devuelve true cuando el equilibrador está funcionando.
Próximos pasos
Puede restaurar datos a partir de una mongodump copia de seguridad utilizando mongorestore.
Para migrar a un set de réplicas o un servidor autónomo, ejecute
mongorestoreenmongod.Para restaurar a un clúster fragmentado, ejecute
mongorestorecontramongoscon configurado para excluir--nsExcludelaconfigbase de datos:mongorestore --nsExclude='config.*' /data/backup
Importante
mongorestore no divide las colecciones restauradas en el clúster de destino.
Para asegurarse de que una colección restaurada esté particionada en el clúster de destino, cree una colección con el mismo namespace en el clúster de destino y luego particione la colección antes de ejecutar mongorestore. El balanceador eventualmente distribuirá los documentos restaurados entre las particiones del clúster de destino.
Para más información, consulta Respaldar y restauración una implementación autogestionada con las herramientas de MongoDB.