Antes de que intentes cualquier degradación, familiarízate 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, puedes rebajar una implementación de la serie 5.0 a la serie 4.4. Sin embargo, no se admite la conversión adicional de esa implementación de la serie 4.4 a una implementación de la serie 4.2.
Crear copia de seguridad
Opcional, pero se recomienda. Crea una copia de seguridad de tu base de datos.
Control de acceso
Si tu set de réplicas tiene el control de acceso habilitado, tus privilegios de degradación de usuario deben incluir privilegios para listar y administrar índices en todas las bases de datos. Un usuario con root El rol tiene los privilegios requeridos.
Requisitos previos
Para hacer downgrade de la versión 5.0 a la 4.4, debes remover las funcionalidades incompatibles que están guardadas y/o actualizar la configuración incompatible. Estos 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 por defecto para el nivel de confirmación de lectura o escritura (write concern) de un clúster, utiliza el comando
setDefaultRWConcern.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 documentos con . o $ caracteres
MongoDB 5.0 agrega soporte para incluir los caracteres . o $ en los nombres de los campos de los documentos. Debes borrar cualquier documento que contenga nombres de campos que incluyan los caracteres . o $ antes de realizar una degradación 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. Degradar la compatibilidad de características entre versiones (compatibilidad de características entre versiones)
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úrate de que ningún nodo tenga un campo
newlyAddeden su configuración del set de réplicas. Ejecuta el siguiente comando en cada nodo de tu set de réplicas 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 revertir la versión del featureCompatibilityVersion de tu set de réplicas:
Conecta un shell
mongoal primario.Degrade el
featureCompatibilityVersiona"4.4".db.adminCommand({setFeatureCompatibilityVersion: "4.4"}) El comando
setFeatureCompatibilityVersionrealiza escrituras en una colección interna del sistema y es idempotente. Si por alguna razón el comando no se completa correctamente, vuelve a ejecutar el comando en el primario.Para garantizar que todos los miembros del set de réplicas reflejen el
featureCompatibilityVersionactualizado, conéctate a cada miembro del set de réplicas y verifica elfeatureCompatibilityVersion: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 funcionalidades entre versiones igual a la versión de degradación del binario, independientemente del valor de la compatibilidad de funcionalidades entre versiones del set de réplicas.
Por ejemplo, un árbitro en 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 featureCompatibilityVersion devuelto, consulte Ver FeatureCompatibilityVersion.
5. Remover la compatibilidad de características entre versiones 5.0 funcionalidades persistentes
Los siguientes pasos solo son necesarios si alguna vez se ha configurado la compatibilidad de características entre versiones 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
- Remueva todas las colecciones de series de tiempo.
Gestión de filtros de auditoría en tiempo de ejecución
Restablece la configuración por defecto en el servidor primario en el grupo con
db.admin.runCommand. El primario debería ser el último servidor de configuración del grupo en actualizarse.db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: false } ) El documento de configuración también se puede eliminar después de la degradación:
config.settings.remove({_id: 'audit'}); Desactive la gestión del filtro de auditoría de tiempo de ejecución en cada nodo configurando
auditLog.runtimeConfigurationenfalseen el archivo de configuración del nodo.Actualice los filtros de auditoría de esta instancia en el archivo de configuración local.
6. Remover Funcionalidades de la versión 5.0
Remueva todas las funcionalidades guardadas que usen funcionalidades de la versión 5.0. Estos incluyen, pero no se limitan a:
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
Advertencia
Antes de proceder con el procedimiento de degradación, asegúrese de que todos los miembros del set de réplicas, incluidos los miembros retrasados del set de réplicas, reflejen los cambios previos requeridos. Es decir, comprueba el featureCompatibilityVersion y la eliminación de funcionalidades incompatibles para cada nodo antes de realizar una reversión a una versión anterior.
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.
Degradar miembros secundarios del set de réplicas.
Degrade cada secundario miembro del set de réplicas, 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 } ) Reemplaza el binario 5.0 con el binario 4.4 y reinicia.
Espere a que el nodo se recupere al estado
SECONDARYantes de degradar el siguiente secundario. Para verificar el estado del nodo, utiliza el métodors.status()enmongosh.Una vez que el nodo esté en la etapa
SECONDARY, degrade el siguiente secundario.
Disminuya la versión del miembro del set de réplicas del árbitro, si lo hay.
Omite este paso si el conjunto de réplicas no incluye un árbitro.
Degradar al árbitro nodo del set de réplicas:
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 } ) Elimine el contenido del directorio de datos del árbitro. El
storage.dbPathajuste de configuración o--dbpathopción de línea de comandos especifica el directorio de datos del árbitromongod.rm -rf /path/to/mongodb/datafiles/* Reemplaza el binario 5.0 con el binario 4.4 y reinicia.
Espera a que el nodo se recupere al estado
ARBITER. Para comprobar el estado del nodo, conectemongoshal nodo y ejecuters.status()método.
Degradar al primario.
Utilice rs.stepDown() en mongosh para reducir el rol de principal y forzar el procedimiento normal de failover.
rs.stepDown()
rs.stepDown() acelera el procedimiento de failover y es preferible a apagar directamente el primario.
Reemplace y reinicie el antiguo principal mongod.
Cuando rs.status() muestra que el primario ha renunciado y otro nodo ha asumido PRIMARY estado:
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 de
mongodpor el binario de la versión 4.4 y reinicie.