Overview
Este documento describe un procedimiento para realizar una copia de seguridad de todos los componentes de un clúster fragmentado. Este procedimiento utiliza instantáneas del sistema de archivos para capturar una copia del mongod instancia.
Importante
Para realizar una copia de seguridad de un clúster fragmentado,debe detener todas las escrituras en el clúster.
Para obtener más información sobre las copias de seguridad en MongoDB y las copias de seguridad de clústeres fragmentados en particular, consulte Métodos de copia de seguridad para una implementación autoadministrada y Copia de seguridad y restauración de un clúster fragmentado autoadministrado.
Considerations
Transacciones entre fragmentos
Para realizar una copia de seguridad con una instantánea del sistema de archivos, primero debe detener el balanceador, detener las escrituras y detener cualquier operación de transformación de esquema en el clúster.
MongoDB proporciona operaciones de respaldo y restauración que pueden ejecutarse con el balanceador y ejecutar transacciones a través de los siguientes servicios:
Motor de almacenamiento cifrado (solo MongoDB Enterprise)
Para los motores de almacenamiento cifrado que utilizan el modo de cifrado AES256-GCM, AES256-GCM requiere que cada proceso use un valor de bloque de contador único con la clave.
Para el motor de almacenamiento cifrado configurado con el cifrado AES256-GCM:
- Restauración desde una copia de seguridad en caliente
- A partir de la versión 4.2, si restaura desde archivos obtenidos mediante una copia de seguridad "en caliente" (es decir, mientras
mongodestá en ejecución), MongoDB puede detectar claves "sucias" en el inicio y cambiar automáticamente la clave de la base de datos para evitar la reutilización del IV (vector de inicialización).
- Restauración desde una copia de seguridad en frío
Sin embargo, si restaura desde archivos obtenidos mediante una copia de seguridad "en frío" (es decir,
mongodno está en ejecución), MongoDB no puede detectar las claves "sucias" en el inicio, y la reutilización de IV invalida las garantías de confidencialidad e integridad.A partir de la versión 4.2, para evitar la reutilización de las claves después de restaurar desde un snapshot del sistema de archivos en frío, MongoDB agrega una nueva opción de línea de comandos
--eseDatabaseKeyRollover. Al iniciarse con la opción--eseDatabaseKeyRollover, la instanciamongodcambia las claves de la base de datos configuradas con el cifradoAES256-GCMy se cierra.
Balanceador
Es esencial parar el balanceador antes de capturar una copia de seguridad.
Si el balanceador está activo mientras capturas copias de seguridad, los artefactos de la copia de seguridad pueden estar incompletos o tener datos duplicados, ya que los fragmentos pueden migrar mientras se graban las copias de seguridad.
Precisión
En este procedimiento, detendrá el balanceador del clúster y realizará una copia de seguridad de la base de datos de configuración. Posteriormente, realizará copias de seguridad de cada fragmento del clúster mediante una herramienta de instantáneas del sistema de archivos. Si necesita una instantánea del sistema en un momento preciso, deberá detener todas las escrituras antes de tomar las instantáneas; de lo contrario, la instantánea solo se aproximará a un momento en el tiempo.
Consistencia
Para realizar una copia de seguridad de un clúster fragmentado, debe usar el fsync comando o db.fsyncLock() el método para detener las escrituras en el clúster. Esto ayuda a reducir la probabilidad de inconsistencias en la copia de seguridad.
Nota
Estos pasos solo pueden producir una copia de seguridad consistente si se siguen exactamente y no hay ninguna operación en curso cuando comienza.
Instantáneas con Amazon EBS en una configuración RAID 10
Si tu implementación depende del almacenamiento en bloque elástico (EBS) de Amazon con RAID configurado dentro de la instancia, es imposible obtener un estado coherente en todos los discos utilizando la herramienta de snapshot de la plataforma. Como alternativa, se puede realizar una de las siguientes acciones:
Establezca un bloqueo para vaciar todas las escrituras y bloquear el clúster contra nuevas escrituras para ayudar a reducir la probabilidad de que ocurra un estado inconsistente durante el proceso de respaldo.
fsyncSi elige esta opción, consulte Realizar copias de seguridad de instancias con archivos de diario en un volumen separado o sin registro en diario.
Configure LVM para ejecutar y almacenar sus archivos de datos MongoDB sobre el RAID dentro de su sistema.
Si elige esta opción, realice la operación de copia de seguridad de LVM descrita en Crear una instantánea.
Compatibilidad de versiones
Este procedimiento requiere una versión de MongoDB que admita el bloqueo fsync mongos desde.
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.
Stale Data
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
A partir de MongoDB 8.0, se puede utilizar el rol directShardOperations para realizar operaciones de mantenimiento que requieren ejecutar comandos directamente contra un fragmento.
Advertencia
Ejecutar comandos usando el rol de directShardOperations puede hacer que su clúster deje de funcionar correctamente y puede causar corrupción de datos. Utilice el rol de directShardOperations solo para fines de mantenimiento o bajo la orientación del soporte de MongoDB. Una vez que haya terminado de realizar las operaciones de mantenimiento, deje de usar el rol de directShardOperations.
Pasos
Para realizar una copia de seguridad autogestionada de un clúster fragmentado, complete los siguientes pasos:
Encuentra una ventana de respaldo
Las migraciones de fragmentos, la reorganización de particiones y las operaciones de migración de esquemas pueden causar inconsistencias en las copias de seguridad. Para encontrar el momento oportuno para realizar una copia de seguridad, supervise el uso de su aplicación y base de datos y busque un momento en el que sea improbable que estas operaciones se realicen.
Para obtener más información, consulte Programar ventana de copia de seguridad para un clúster fragmentado autoadministrado.
Detener el balanceador
Para evitar que las migraciones de fragmentos interrumpan la copia de seguridad, utilice el método para detener el sh.stopBalancer() equilibrador:
sh.stopBalancer()
Si hay una ronda de equilibrio en curso, la operación espera a que se complete el equilibrio.
Para verificar que el balanceador esté detenido, utilice el sh.getBalancerState() método:
use config while( sh.isBalancerRunning().mode != "off" ) { print("waiting..."); sleep(1000); }
Bloquear el clúster
Las escrituras en la base de datos pueden causar inconsistencias en las copias de seguridad. Bloquee el clúster fragmentado para proteger la base de datos de las escrituras.
Para bloquear un clúster, utiliza el método db.fsyncLock() en mongos y el primario mongod de los servidores de configuración:
db.getSiblingDB("admin").fsyncLock()
Para confirmar el bloqueo, ejecute la siguiente secuencia de agregación en los servidores de mongos mongod configuración fysncLocked true fsyncUnlocked falsey, respectivamente. Asegúrese de que el campo devuelva y el campo devuelva.
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 una copia de seguridad del servidor de configuración principal
Nota
Al respaldar un servidor de configuración, se respaldan los metadatos del clúster fragmentado. Solo necesita respaldar un servidor de configuración, ya que todos contienen los mismos datos. Realice este paso en el miembro principal de CSRS.
Para crear una instantánea del sistema de archivos del servidor de configuración, siga el procedimiento en Crear una instantánea.
Realizar una copia de seguridad de los fragmentos principales
Realice una instantánea del sistema de archivos contra el miembro principal de cada fragmento, utilizando el procedimiento que se encuentra en Realizar una copia de seguridad de una implementación autoadministrada con instantáneas del sistema de archivos.
Desbloquear el cluster
Una vez completada la copia de seguridad, debe 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()
Ejecute la siguiente canalización de agregación en mongos mongod los servidores de configuración fysncLocked false y, que es el principal. Para confirmar el desbloqueo,fsyncUnlocked trueasegúrese de que el campo devuelva y el campo devuelva.
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 se está ejecutando, utilice el sh.getBalancerState() método:
sh.getBalancerState()
true
El comando devuelve true cuando el balanceador se está ejecutando.