movePrimaryEn un clúster,
movePrimaryreasigna la partición primaria que contiene todas las colecciones no segmentadas en la base de datos.movePrimaryprimero cambia la partición primaria en los metadatos del clúster y luego migra todas las colecciones no fragmentadas a la partición especificada. Use el comando con la siguiente forma:db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } ) Por ejemplo, el siguiente comando mueve la partición primaria de
testashard0001:db.adminCommand( { movePrimary : "test", to : "shard0001" } ) Cuando el comando retorna, la partición primaria de la base de datos se ha cambiado a la partición especificada. Para desactivar completamente una partición, utiliza el comando
removeShard.movePrimaryes un comando administrativo que solo está disponible paramongosinstancias.Advertencia
Tras iniciar
movePrimary, no realices ninguna operación de lectura o escritura en colecciones sin particionar de esa base de datos hasta que el comando se haya completado. Las operaciones de lectura o guardado emitidas contra esas colecciones durante la migración pueden resultar en un comportamiento inesperado, incluyendo la posible falla de la operación de migración o la pérdida de datos.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
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.
Considerations
mongos usa el nivel de confirmación de escritura (write concern) "majority" para movePrimary.
Problema movePrimary durante una ventana de mantenimiento
movePrimary puede requerir un tiempo significativo para completarse dependiendo del tamaño de la base de datos y factores como la salud de la red o los recursos de la máquina. Durante la migración, los intentos de guardar o realizar cualquier operación DDL en las colecciones no particionadas de la base de datos que se está trasladando fallan con el error: "movePrimary is in progress".
Considere programar un periodo de mantenimiento durante la cual las aplicaciones detengan todas las lecturas y escrituras en el clúster. Emitir movePrimary durante un tiempo de inactividad programado mitiga el riesgo de encontrar un comportamiento indefinido debido a lecturas o escrituras entrelazadas en las colecciones no particionadas de la base de datos.
Los conflictos de espacios de nombres impiden la migración
movePrimary falla si la partición de destino contiene un namespace de colección en conflicto. Por ejemplo:
Un administrador emite
movePrimarypara cambiar el fragmento principal de la base de datoshr.Un usuario o una aplicación emite una operación de guardar en una colección no particionada en
hrmientrasmovePrimaryestá moviendo esa colección. La operación de guardar crea la colección en la partición primaria original.Un administrador posteriormente emite
movePrimarypara restaurar la partición primaria original para la base de datoshr.movePrimaryfalla debido al namespace en conflicto que queda tras la operación de escritura entrelazada.
La partición de destino debe reconstruir los índices
Como parte de la operación movePrimary, el fragmento de destino debe reconstruir los índices de las colecciones migradas tras convertirse en el fragmento principal. Esto puede requerir un tiempo considerable, dependiendo del número de índices por colección y de la cantidad de datos a indexar.
Consulta Creación de índices en colecciones pobladas para más información sobre el proceso de creación de índices.
Información Adicional
Consulta Remover particiones de un clúster existente para ver el procedimiento completo.