Antes de intentar realizar cualquier cambio a una versión inferior, familiarícese con el contenido de este documento.
Ruta de degradación
Importante
Antes de actualizar o degradar un Set de réplicas, asegúrate de que todos los miembros del Set de réplicas estén en funcionamiento. De lo contrario, la actualización o degradación no se completará hasta que se inicien todos los miembros.
Si necesitas bajar de la versión 5.0, bájate a la última versión de parche de la 4.4.
MongoDB solamente soporta degradaciones de una única versión. No se puede retroceder a una versión que esté varias versiones por detrás de la versión actual.
Por ejemplo, puede degradar una implementación de la serie 5.0 a una de la serie 4.4. Sin embargo, no se admite degradar esa implementación de la serie 4.4 a una de la serie 4.2.
Crear copia de seguridad
Opcional, pero se recomienda. Crea una copia de seguridad de tu base de datos.
Requisitos previos
Para cambiar de la versión 5.0 a la 4.4, debe eliminar las funciones incompatibles que persisten o actualizar las opciones de configuración incompatibles. Estas incluyen:
1. Niveles de confirmación de lectura y escritura (read and write concerns) por defecto del clúster
MongoDB 5.0 cambió el valor predeterminado para el nivel de confirmación de lectura y escritura (write concern) a nivel de clúster, y la reversión a MongoDB 4.4 podría cambiar esos valores predeterminados nuevamente. Considera configurar manualmente el nivel de confirmación de lectura y escritura (read and write concern) por defecto de tu clúster antes de realizar el downgrade:
Para configurar manualmente un valor predeterminado para el read o nivel de confirmación de escritura (write concern) de un clúster, utiliza el
setDefaultRWConcerndominio.Si tu clúster incluye un árbitro, y previamente habías desactivado el nivel de consistencia de lectura
"Majority"para evitar la presión de caché en ciertas situaciones, puedes querer configurar--enableMajorityReadConcern falseoreplication.enableMajorityReadConcern: falseuna vez que realices el downgrade.
2. Campos de documento con . o $ caracteres
MongoDB 5.0 permite incluir los caracteres . o $ en los nombres de campo de los documentos. Debe eliminar cualquier documento que contenga nombres de campo que incluyan los caracteres . o $ antes de actualizar a MongoDB 4.4.
3. Archivos de datos de zona horaria en formato slim
MongoDB 5.0 permite el soporte de archivos de datos de zona horaria en formato reducido. Si se utilizan archivos de datos de zona horaria en formato slim en su implementación, tal como se proporciona a MongoDB con la opción de línea de comandos --timeZoneInfo o la configuración de archivo processManagement.timeZoneInfo, debe degradar a MongoDB 4.4.7 o superior, o bien revertir los archivos de datos de zona horaria para utilizar los archivos de datos anteriores en formato no slim.
4. Refragmentación
Asegúrate de que cualquier operación de refragmentación se haya completado con éxito antes de intentar cualquier procedimiento de degradación. Si una operación reciente de resharding ha fallado debido a un cambio de primario, debes ejecutar primero el comando cleanupReshardCollection antes de realizar un downgrade del featureCompatibilityVersion de tu clúster fragmentado.
Si una operación de re-fragmentación aún se está ejecutando mientras degrada el featureCompatibilityVersion de su clúster fragmentado, la operación de re-fragmentación se cancelará.
5. Degradar la compatibilidad de características entre versiones (FCV)
Primero, verifica lo siguiente:
Asegúrese de que no haya sincronización inicial en curso. Ejecutar el comando
setFeatureCompatibilityVersionmientras una sincronización inicial está en curso provocará que la sincronización inicial se reinicie.Asegúrese de que ningún nodo tenga un campo
newlyAddeden su configuración del set de réplicas. Ejecútalo siguiendo comando en cada nodo de tu clúster sharded para verificar esto:use local db.system.replset.find( { "members.newlyAdded" : { $exists : true } } ); El campo
newlyAddedsolo aparece en el documento de configuración del set de réplicas de un nodo durante y poco después de una sincronización inicial.Asegúrate de que ningún miembro del conjunto de réplicas esté en el estado
ROLLBACKoRECOVERING.
A continuación, para degradar el featureCompatibilityVersion de su clúster fragmentado:
Conecte un
mongoshell a lamongosinstancia.Degrade el
featureCompatibilityVersiona"4.4".db.adminCommand({setFeatureCompatibilityVersion: "4.4"}) El comando
setFeatureCompatibilityVersionrealiza operaciones de guardado en una colección del sistema interno y es idempotente. Si por alguna razón la instrucción no se completa con éxito, retrase la instrucción en la instanciamongos.Nota
Mientras se ejecuta en el clúster fragmentado, las migraciones, divisiones y fusiones de fragmentos pueden
setFeatureCompatibilityVersionfallarConflictingOperationInProgresscon.Si
setFeatureCompatibilityVersionfalla con un errorManualInterventionRequired, y el clúster ha sufrido recientemente una operación de reshuffling que falló debido a una elección, debe ejecutar el comandocleanupReshardCollectionantes de intentarsetFeatureCompatibilityVersionde nuevo.
Para garantizar que todos los nodos del clúster reflejen la actualización de
featureCompatibilityVersion, conéctese a cada nodo del set de réplicas de particiones y a cada nodo del set de réplicas del servidor de configuración y verifique losfeatureCompatibilityVersion:Tip
Para un clúster fragmentado que tiene habilitado el control de acceso, para ejecutar el siguiente comando contra un miembro del conjunto de réplicas de fragmentos, debe conectarse al miembro como un usuario local de fragmentos.
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) Todos los nodos deben devolver un resultado que incluya:
"featureCompatibilityVersion" : { "version" : "4.4" } Si un nodo devuelve un
featureCompatibilityVersionde"5.0", espera a que el nodo refleje la versión"4.4"antes de continuar.
Nota
Los árbitros no replican la admin.system.version colección. Por esta razón, los árbitros siempre tienen una compatibilidad de características entre versiones igual a la versión de degradación del binario, independientemente del valor de la compatibilidad de características entre versiones del Set de réplicas.
Por ejemplo, un árbitro de un clúster de MongoDB 5.0 tiene un valor de compatibilidad de características entre versiones de 4.4.
Para obtener más información sobre el valor de featureCompatibilityVersion devuelto, consulta Obtener la Version de Compatibilidad de Características.
6. Eliminar compatibilidad de características entre versiones 5.0 Funcionalidades persistentes
Los siguientes pasos son necesarios solo si FCV alguna vez se configuró en "5.0".
Remueva todas las funcionalidades persistentes de la versión 5.0 que sean incompatibles con la versión 4.4. Esto incluye:
- Colección de series de tiempo
- Eliminar todas las colecciones de series temporales.
- Gestión de filtros de auditoría en tiempo de ejecución
7. Eliminar las características 5.0
Eliminar todas las funciones persistentes que utilizan funciones de la versión 5.0. Estas incluyen, entre otras:
Si alguna definición de vista incluye operadores 5.0, como
$dateAddo$sampleRate, deben ser removidos. Consulta Nuevos operadores de agregación para la lista completa.
Procedimiento
Degradar un clúster particionado
Advertencia
Antes de proceder con el procedimiento de degradación, asegúrese de que todos los miembros, incluidos los miembros de set de réplicas retrasados en el clúster, reflejen los cambios previos necesarios. Es decir, comprueba el featureCompatibilityVersion y la eliminación de funcionalidades incompatibles para cada nodo antes de la degradación.
Descargar los últimos binarios 4.4.
Utilizando un administrador de paquetes o una descarga manual, obtén la versión más reciente de la serie 4.4. Si utilizas un gestor de paquetes, añade un nuevo repositorio para los binarios de la versión 4.4 y luego realiza el proceso real de degradación.
Importante
Antes de actualizar o degradar un Set de réplicas, asegúrate de que todos los miembros del Set de réplicas estén en funcionamiento. De lo contrario, la actualización o degradación no se completará hasta que se inicien todos los miembros.
Si necesitas bajar de la versión 5.0, bájate a la última versión de parche de la 4.4.
Desactivar el balanceador.
Conecte mongosh a una instancia mongos en el clúster fragmentado y ejecute sh.stopBalancer() para desactivar el balanceador:
sh.stopBalancer()
Nota
Si una migración está en progreso, el sistema completará la migración en curso antes de detener el balanceador. Puedes ejecutar sh.isBalancerRunning() para comprobar el estado actual del balanceador.
Para comprobar que el balanceador esté deshabilitado, ejecuta sh.getBalancerState(), que retorna false si el balanceador está deshabilitado:
sh.getBalancerState()
Para obtener más información sobre cómo deshabilitar el balanceador,consulte Deshabilitar el balanceador.
Degrade cada partición, uno a la vez.
Degradar las particiones uno a la vez.
Degradar los miembros secundarios del fragmento uno a la vez:
Ejecute el siguiente comando en
mongoshpara realizar un apagado limpio, o consulte Detener procesos demongodpara conocer formas adicionales de finalizar de forma segura el proceso demongod:db.adminCommand( { shutdown: 1 } ) Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Espere a que el nodo se recupere al estado
SECONDARYantes de degradar el siguiente nodo secundario. Para comprobar el estado del nodo, conectamongosha la partición y ejecuta el métodors.status().Repetir para degradar para cada miembro secundario.
Degradar el árbitro del fragmento, si lo hay.
Omita este paso si el conjunto de réplicas no incluye un árbitro.
Ejecute el siguiente comando en
mongoshpara realizar un apagado limpio, o consulte Detener procesos demongodpara conocer formas adicionales de finalizar de forma segura el proceso demongod:db.adminCommand( { shutdown: 1 } ) Eliminar el contenido del directorio de datos del árbitro. La
storage.dbPathopción de configuración o la opción de línea de comandos especifican el directorio de datos--dbpathdelmongodárbitro.rm -rf /path/to/mongodb/datafiles/* Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Espere a que el miembro recupere el
ARBITERestado. Para comprobar su estado, conecte al miembromongoshrs.status()y ejecute el método.
Reducir la versión primaria de la partición.
Degrada el nodo primario del set de réplicas. Conecte
mongoshal primario y utilicers.stepDown()para degradar el primario y forzar la elección de un nuevo primario:rs.stepDown() Ejecuta
rs.status().rs.status() Cuando el estado indique que el primario ha cedido el paso y otro nodo ha asumido el estado
PRIMARY, proceda.Ejecuta el siguiente comando desde
mongoshpara realizar un apagado limpio del primario al que se le retiró la primaria o consulta Detener Procesos demongodpara obtener formas adicionales de terminar de forma segura el procesomongod:db.adminCommand( { shutdown: 1 } ) Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Repita este procedimiento para los fragmentos restantes.
Realiza la degradación de los servidores de configuración.
Degradar los miembros secundarios del conjunto de réplicas de servidores de configuración (CSRS) uno a la vez:
Ejecute el siguiente comando en
mongoshpara realizar un apagado limpio, o consulte Detener procesos demongodpara conocer formas adicionales de finalizar de forma segura el proceso demongod:db.adminCommand( { shutdown: 1 } ) Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Espere a que el nodo se recupere al estado
SECONDARYantes de degradar el siguiente nodo secundario. Para comprobar el estado del nodo, conectamongosha la partición y ejecuta el métodors.status().Repetir para degradar para cada miembro secundario.
Desciende el primario del servidor de configuración.
Conecte
mongoshal principal y utilicers.stepDown()para rebajar al principal y forzar la elección de un nuevo principal:rs.stepDown() Ejecuta
rs.status().rs.status() Cuando el estado indique que el primario ha cedido el paso y otro nodo ha asumido el estado
PRIMARY, proceda.Ejecuta el siguiente comando desde
mongoshpara realizar un apagado limpio del primario al que se le retiró la primaria o consulta Detener Procesos demongodpara obtener formas adicionales de terminar de forma segura el procesomongod:db.adminCommand( { shutdown: 1 } ) Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Vuelva a habilitar el balanceador.
Una vez completada la degradación de los componentes del clúster fragmentado, conecta mongosh a un mongos y vuelve a habilitar el balanceador.
sh.startBalancer()
El mongosh método también permite la división automática del clúster sh.startBalancer() fragmentado.