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 necesita degradar desde 5.0, degrade a la última versión parcheada de 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.0a una de la serie 4.4. Sin embargo, no se admite degradar esa implementación de la serie 4.4a una de la serie 4.2.
Crear copia de seguridad
Opcional pero recomendado. Crea una copia de seguridad de tu base de datos.
Requisitos previos
Para degradar de 5.0 a 4.4, debe eliminar las funciones incompatibles que persisten o actualizar las opciones de configuración incompatibles. Estas incluyen:
1. Problemas de lectura y escritura predeterminados del clúster
MongoDB 5.0 cambió el valor predeterminado para las preocupaciones de lectura y escritura a nivel de clúster, y al revertir a MongoDB 4.4, podría restablecer esos valores predeterminados. Considere configurar manualmente la preocupación de lectura y escritura predeterminada de su clúster antes de revertir a la versión anterior:
Para configurar manualmente un valor predeterminado para la preocupación de lectura o escritura de un clúster, utilice el
setDefaultRWConcerndominio.Si su clúster incluye un árbitro y anteriormente había deshabilitado la
"Majority"preocupación de lectura para evitar la presión de caché en ciertas situaciones, es posible que desee configurar--enableMajorityReadConcern falseoreplication.enableMajorityReadConcern: falseuna vez que baje de versión.
2. Campos de documento con . o $ caracteres
MongoDB 5.0 ahora admite la inclusión de 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 de formato reducido
MongoDB 5.0 habilita la compatibilidad con archivos de datos de zona horaria en formato slim. Si utiliza archivos de datos de zona horaria en formato slim en su implementación, como se proporciona a MongoDB con la --timeZoneInfo opción de línea de comandos o processManagement.timeZoneInfo la configuración del archivo de configuración, debe actualizar a MongoDB.4.4 7 o posterior, o bien revertir sus archivos de datos de zona horaria para que utilicen los archivos de datos anteriores sin formato slim.
4. Redistribución
Asegúrese de que todas las operaciones de repartición se hayan completado correctamente antes de intentar cualquier procedimiento de degradación. Si una operación de repartición reciente ha fallado debido a una conmutación por error principal, primero debe ejecutar el cleanupReshardCollection comando antes de degradar el featureCompatibilityVersion de su 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. Versión de compatibilidad de funciones de degradación (FCV)
Primero, verifique 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
newlyAddedcampo en la configuración de su conjunto de réplicas. Ejecute el siguiente comando en cada nodo del clúster fragmentado para verificarlo:use local db.system.replset.find( { "members.newlyAdded" : { $exists : true } } ); El campo
newlyAddedsolo aparece en el documento de configuración del conjunto de réplicas de un nodo durante y poco después de una sincronización inicial.Asegúrese de que ningún miembro del conjunto de réplicas esté en estado
ROLLBACKRECOVERINGo.
A continuación, para degradar el featureCompatibilityVersion de su clúster fragmentado:
Conecte un
mongoshell a lamongosinstancia.Bajar de
featureCompatibilityVersiona"4.4".db.adminCommand({setFeatureCompatibilityVersion: "4.4"}) El
setFeatureCompatibilityVersioncomando realiza escrituras en una colección interna del sistema y es idempotente. Si por alguna razón el comando no se completa correctamente, vuelva a intentarlo en lamongosinstancia.Nota
Mientras se ejecuta en el clúster fragmentado, las migraciones, divisiones y fusiones de fragmentos pueden
setFeatureCompatibilityVersionfallarConflictingOperationInProgresscon.Si falla con
setFeatureCompatibilityVersionunManualInterventionRequirederror y el clúster recientemente se sometió a una operación de reorganización que falló debido a una elección, debe ejecutar elcleanupReshardCollectioncomando antes de intentarsetFeatureCompatibilityVersionnuevamente.
Para garantizar que todos los miembros del clúster fragmentado reflejen el
featureCompatibilityVersionactualizado, conéctese a cada miembro del conjunto de réplicas de fragmentos y a cada miembro del conjunto de réplicas del servidor de configuración y verifique elfeatureCompatibilityVersion: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 miembros 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 featureCompatibilityVersion valor devuelto,consulte Obtener FeatureCompatibilityVersion.
6. Eliminar funciones persistentes de FCV 5.0
Los siguientes pasos son necesarios solo si FCV alguna vez se configuró en "5.0".
Elimine todas las 5.0 funciones persistentes que sean incompatibles 4.4 con. Estas incluyen:
- 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 5.0 funciones
Eliminar todas las funciones persistentes que utilizan 5.0 funciones. Estas incluyen, entre otras:
Si alguna definición de vista incluye 5.0 operadores, como o, debe eliminarse.Consulte "Nuevos
$dateAddoperadores$sampleRatede agregación" para ver la lista completa.
Procedimiento
Degradar un clúster fragmentado
Advertencia
Antes de proceder con el proceso de degradación, asegúrese de que todos los miembros, incluidos los miembros del conjunto de réplicas retrasadas del clúster fragmentado, reflejen los cambios de requisitos previos. Es decir, verifique el featureCompatibilityVersion y la eliminación de las características incompatibles en cada nodo antes de degradar.
Descargue los últimos binarios 4.4.
Usando un gestor de paquetes o una descarga manual, obtenga la última versión de la serie 4.4. Si usa un gestor de paquetes, agregue un nuevo repositorio para los binarios 4.4 y luego realice el proceso 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 necesita degradar desde 5.0, degrade a la última versión parcheada de 4.4.
Desactivar el balanceador.
Conecte mongosh a una mongos instancia en el clúster fragmentado y ejecute sh.stopBalancer() para deshabilitar el balanceador:
sh.stopBalancer()
Nota
Si hay una migración en curso, el sistema la completará antes de detener el balanceador. Puede ejecutar para comprobar el estado actual del sh.isBalancerRunning() balanceador.
Para verificar que el balanceador esté deshabilitado, ejecute, que devuelve falso si el balanceador está sh.getBalancerState() deshabilitado:
sh.getBalancerState()
Para obtener más información sobre cómo deshabilitar el balanceador,consulte Deshabilitar el balanceador.
Degrade cada fragmento, uno a la vez.
Degrade los fragmentos uno a uno.
Degradar los miembros secundarios del fragmento uno a la vez:
Ejecute el siguiente comando en
mongoshpara realizar un apagado limpio, o consultemongodDetener procesos para obtener formas adicionales de finalizar de forma segura elmongodproceso:db.adminCommand( { shutdown: 1 } ) Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Espere a que el miembro se recupere al
SECONDARYestado antes de degradar el siguiente miembro secundario. Para comprobar el estado del miembro, conecte al fragmento ymongoshrs.status()ejecute el método.Repita el proceso para degradar a 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 consultemongodDetener procesos para obtener formas adicionales de finalizar de forma segura elmongodproceso: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.
Degradar el fragmento principal.
Reducir el conjunto de réplicas principal. Conecte al
mongoshrs.stepDown()principal y use para reducirlo y forzar la elección de un nuevo principal:rs.stepDown() rs.status() Cuando el estado muestre que el miembro principal ha renunciado y otro miembro ha asumido el estado
PRIMARY, continúe.Ejecute el siguiente comando desde para realizar un
mongoshapagado limpio del proceso primario reducido, omongodconsulte Detener procesosmongodpara obtener formas adicionales de finalizar de manera segura el proceso:db.adminCommand( { shutdown: 1 } ) Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Repita este procedimiento para los fragmentos restantes.
Degradar 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 consultemongodDetener procesos para obtener formas adicionales de finalizar de forma segura elmongodproceso:db.adminCommand( { shutdown: 1 } ) Reemplace el binario 5.0 con el binario 4.4 y reinicie.
Espere a que el miembro se recupere al
SECONDARYestado antes de degradar el siguiente miembro secundario. Para comprobar el estado del miembro, conecte al fragmento ymongoshrs.status()ejecute el método.Repita el proceso para degradar a cada miembro secundario.
Bajar el servidor de configuración principal.
Conecte a la
mongoshrs.stepDown()primaria y use para reducir la primaria y forzar la elección de una nueva primaria:rs.stepDown() rs.status() Cuando el estado muestre que el miembro principal ha renunciado y otro miembro ha asumido el estado
PRIMARY, continúe.Ejecute el siguiente comando desde para realizar un
mongoshapagado limpio del proceso primario reducido, omongodconsulte Detener procesosmongodpara obtener formas adicionales de finalizar de manera segura el proceso: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, conecte mongosh a un mongos y vuelva a habilitar el equilibrador.
sh.startBalancer()
El mongosh método también permite la división automática del clúster sh.startBalancer() fragmentado.