Para migrar de un servidor de configuración integrado a un servidor de configuración dedicado, debe asegurarse de que los datos del fragmento de configuración se migren a los fragmentos restantes del clúster. Este procedimiento describe cómo migrar los datos de forma segura y completar la transición.
Acerca de esta tarea
Crear, particionado o mover colecciones mientras se realiza este procedimiento puede provocar interrupciones y causar resultados inesperados.
No utilice este procedimiento para migrar un clúster completo a un nuevo hardware. Para migrar, consulte Migrar un clúster fragmentado autogestionado a un hardware diferente.
Cuando se elimina una partición en un clúster con una distribución desigual de fragmentos, el balanceador primero elimina los fragmentos de la partición en proceso de drenaje y luego equilibra la distribución desigual de fragmentos restante.
Eliminar una partición puede causar que se cierre un cursor de flujo de cambios abierto, y es posible que el cursor de flujo de cambios cerrado no pueda reanudarse por completo.
Puede reiniciar un clúster de forma segura durante un proceso de transición. Si reinicia un clúster durante un proceso de drenaje en curso, el drenaje continúa automáticamente después de que se reinician los componentes del clúster. MongoDB registra el estado de la transición en el
config.shardscolección.
Antes de comenzar
Este procedimiento utiliza el método para mover colecciones fuera del fragmento de configuración. Antes de comenzar este procedimiento, revise
sh.moveCollection()lasmoveCollectionconsideraciones y requisitos para comprender el comportamiento del comando.Para pasar a un servidor de configuración dedicado, primero conéctese a una de las instancias del clúster
mongosusandomongosh.
Pasos
Asegúrese de que el balanceador esté habilitado.
Para migrar datos desde el fragmento de configuración, el proceso del balanceador debe estar habilitado. Para comprobar el estado del balanceador, utilice el sh.getBalancerState() método:
sh.getBalancerState()
Si la operación devuelve true, el balanceador está habilitado.
Si la operación devuelve false, consulta Activar el balanceador.
Verifique que el servidor de configuración esté funcionando como un fragmento.
Ejecute para confirmar que el fragmento de configuración aparece en la lista de listShards fragmentos:
db.adminCommand( { listShards: 1 } )
En la salida, el campo shards._id contiene los nombres de los fragmentos. El fragmento de configuración normalmente tiene un _id de "config":
{ shards: [ { _id: 'config', ... }, ... ], ok: 1 ... }
Comience a migrar los datos fragmentados fuera del fragmento de configuración.
Desde la admin base de datos, ejecute el transitionToDedicatedConfigServer comando:
use admin db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
El fragmento de configuración entra en estado de vaciado y el balanceador comienza a migrar fragmentos desde el fragmento de configuración a los fragmentos restantes del clúster. Dependiendo de la capacidad de la red y la cantidad de datos, esta operación puede tardar desde minutos hasta días en completarse.
Mueva las colecciones no fragmentadas fuera del fragmento de configuración.
Utilice la $listClusterCatalog etapa de agregación para identificar las colecciones no fragmentadas que aún residen en el fragmento de configuración:
use admin db.aggregate([ { $listClusterCatalog: { shards: true } }, { $match: { sharded: false, shards: "config", type: { $nin: ["timeseries", "view"] }, ns: { $not: { $regex: "^enxcol_\\..*(\\.esc|\\.ecc|\\.ecoc|\\.ecoc\\.compact)$" } }, $or: [ { ns: { $not: { $regex: "\\.system\\." } } }, { ns: { $regex: "\\.system\\.buckets\\." } } ], db: { $nin: ["config", "admin"] } } }, { $project: { _id: 0, ns: 1 } } ])
Para cada espacio de nombres en la salida, use sh.moveCollection() para mover la colección no fragmentada del fragmento de configuración a un fragmento receptor:
sh.moveCollection( "<database>.<collection>", "<ID of recipient shard>" )
Repita este paso hasta que no queden colecciones sin fragmentar en el fragmento de configuración.
Cambie el fragmento principal para las bases de datos que utilizan el fragmento de configuración.
Desde la admin base de db.printShardingStatus() datos, ejecute:
use admin db.printShardingStatus()
En la sección databases de la salida, compruebe el campo primary de cada base de datos. Para cualquier base de datos de aplicación (bases de datos distintas de config y admin) cuyo fragmento principal sea el fragmento de configuración, cambie el fragmento principal a otro fragmento.
Para cambiar el fragmento principal de una base de datos,movePrimary ejecute:
db.adminCommand({ movePrimary: "<dbName>", to: "<recipientShard>" })
Cualquier colección que no se haya movido en el paso anterior no estará disponible mientras se movePrimary ejecuta.
Verificar el estado de la transición.
Para comprobar el progreso de la transición, vuelva a ejecutar desde transitionToDedicatedConfigServer la admin base de datos:
use admin db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
Continúe comprobando el estado hasta que la transición se complete correctamente y el resultado se parezca al siguiente ejemplo:
{ state: 'completed', msg: 'removeshard completed successfully', shard: 'config', ok: 1 }
Confirme la transición a un servidor de configuración dedicado.
Después de que el fragmento de configuración informe un state de 'completed', confirme la transición de un servidor de configuración integrado a un servidor de configuración dedicado:
use admin db.adminCommand( { commitTransitionToDedicatedConfigServer: 1 } )
Una confirmación exitosa devuelve la siguiente salida:
{ ok: 1, '$clusterTime': { ... }, operationTime: ... }
Si la operación se realiza correctamente, MongoDB elimina el fragmento config de los metadatos del clúster y finaliza la transición a un servidor de configuración dedicado. Si el fragmento de configuración no se ha vaciado por completo, el comando falla y debe seguir comprobando el estado de la transición para { state: 'completed' } antes de volver a intentarlo.
Una vez confirmada la transición, ya no incluye el fragmento de configuración en la lista de fragmentos. El clúster ahora utiliza un servidor de configuración dedicado y este servidor ya no almacena los datos de la aplicación como unlistShards fragmento.