Definición
db.fsyncLock()Vacía todos los guardados pendientes de la capa de almacenamiento en el disco y bloquea el servidor para evitar cualquier guardado adicional hasta que se libere el bloqueo.
A partir de MongoDB 7.1 (también disponible desde 7.0.2, 6.0.11 y 5.0.22), los métodos
db.fsyncLock()ydb.fsyncUnlock()pueden ejecutar enmongospara bloquear y desbloquear un clúster.Importante
Método mongosh
Esta página documenta un método.
mongoshEsta no es la documentación para comandos de base de datos ni controladores específicos de lenguaje, como Node.js.Para el comando de base de datos, consulta el comando
fsync.Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.
Los servidores mantienen un contador de bloqueos fsync. El
fsyncLock()método incrementa este contador, mientras que el método lo decrementa. Para desbloquear lasfsyncUnlock()fsyncUnlock()escrituras en un servidor o clúster, llame al método hasta que el contador de bloqueos llegue a cero.db.fsyncLock()tiene la sintaxis:db.fsyncLock() La operación devuelve un documento con los siguientes campos:
CampoDescripcióninfoInformación sobre el estado de la operación.
lockCountNúmero de bloqueos actualmente en la instancia.
seeAlsoEnlace a la documentación del comando
fsync.okEl código de estado.
db.fsyncLock()es un comando administrativo. Utilice este método para bloquear un servidor o clúster antes de realizar operaciones de copia de seguridad.
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
Importante
Este comando no es compatible con los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulta Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Comportamiento
db.fsyncLock() garantiza que los archivos de datos se puedan copiar de forma segura utilizando utilidades de copia de seguridad de bajo nivel cp como, scp taro. Un iniciado con los archivos copiados contiene datos escritos por el usuario que son indistinguibles de los datos escritos por el usuario en mongod el mongod bloqueado.
Los archivos de datos de un mongod bloqueado pueden cambiar debido a operaciones como sincronizaciones de diarios o instantáneas de WiredTiger. Si bien esto no tiene ningún efecto en los datos lógicos (por ejemplo, datos a los que acceden los clientes), algunas utilidades de copia de seguridad pueden detectar estos cambios y emitir advertencias o fallar con errores. Para obtener más información sobre las utilidades y procedimientos de copia de seguridad recomendados por MongoDB, consulte Métodos de copia de seguridad para una implementación autogestionada.
Bloqueos de Fsync tras fallos
Los bloqueos fsync se ejecutan en el primario en un set de réplicas o clúster.
Si el primario se cae o se vuelve inaccesible debido a problemas de red, el clúster elige un nuevo primario de entre los secundarios disponibles. Si un primario con un bloqueo fsync se cae, el nuevo primario no retiene el bloqueo fsync y puede gestionar operaciones de escritura. Cuando se realizan elecciones durante las operaciones de copia de seguridad, la copia de seguridad resultante puede ser inconsistente o inutilizable.
Para recuperarse de la caída de la primaria:
Ejecute el
db.fsyncUnlock()método hasta que el recuento de bloqueos llegue a cero para liberar el bloqueo en todos los nodos.Emita el comando para restablecer el bloqueo fsync en el
db.fsyncLock()clúster.Reiniciar la copia de seguridad.
Además, los bloqueos de fsync son persistentes. Cuando la principal antiguo vuelva a estar en línea, deberás ejecutar el comando db.fsyncUnlock() para liberar el bloqueo del nodo.
Ejemplo
La siguiente operación se db.fsyncLock() ejecuta:
db.fsyncLock()
La operación devuelve el siguiente documento de estado que incluye el lockCount:
{ "info" : "now locked against writes, use db.fsyncUnlock() to unlock", "lockCount" : Long(1), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
Si ejecuta de nuevo, la operación db.fsyncLock() incrementa:lockCount
{ "info" : "now locked against writes, use db.fsyncUnlock() to unlock", "lockCount" : Long(2), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
Para desbloquear la instancia para guardar, debes ejecutar db.fsyncUnlock() dos veces para reducir el lockCount a 0.