Utilice este procedimiento para analizar Distribución de datos fragmentados. Puede usar esta información para determinar si habrá un gran balanceo en su clúster.
Acerca de esta tarea
Este procedimiento le muestra cómo puede:
Actualice su clúster de 5.0 a 6.0.
Determine la distribución de sus datos fragmentados en el clúster utilizando el
$shardedDataDistributionescenario.Actualice la configuración de su balanceador, si es necesario.
Antes de comenzar
Mantenga el balanceador desactivado durante el proceso de actualización y durante todo este procedimiento. Una vez que comprenda la uniformidad de sus cobros con la nueva política de balanceo, puede volver a activarlo.
Pasos
Actualice su clúster de 5.0 a 6.0.
Para actualizar su clúster de 5.0 6.0a, consulte Actualizar un clúster fragmentado 6.0 a.
Conéctese a mongos usando mongosh.
Puede conectarse a cualquier del mongos clúster.
Analice la distribución de datos en su clúster.
Para comprender cómo la distribución de datos de sus colecciones afectará el equilibrio, utilice la $shardedDataDistribution etapa de agregación.
Para devolver todas las métricas de distribución de datos fragmentados, ejecute lo siguiente:
db.aggregate([ { $shardedDataDistribution: { } } ])
Ejemplo de salida:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
Si la diferencia entre el fragmento con el mayor ownedSizeBytes y el fragmento con el menor ownedSizeBytes se encuentra dentro del umbral de migración, la colección se considera equilibrada. Cuando el equilibrador está habilitado para estas colecciones, no emite migraciones.
(Opcional) Configure elbalanceador 6.0 en.
Si su colección no está equilibrada y desea controlar el comportamiento del equilibrador, puede utilizar uno o ambos de los siguientes métodos:
Configure el balanceador para que solo esté activo en determinados momentos modificando la ventana de balanceo.
Restrinja las operaciones de equilibrio a colecciones específicas deshabilitando el equilibrador en las colecciones.
Modificar la ventana de equilibrio
Cambiar a la base de datos de configuración.
Emita el siguiente comando para cambiar a la base de datos
config.use config Establezca las horas de inicio y finalización de la ventana de equilibrio.
Para establecer la ventana activa, utilice el
updateOne()método:db.settings.updateOne( { _id: "balancer" }, { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, { upsert: true } ) Reemplace
<start-time>y<end-time>con valores de tiempo utilizando valores de hora y minutos de dos dígitos (es decir,HH:MM) que especifican los límites de inicio y final de la ventana de equilibrio.Para valores
HH, utilice valores de hora entre00y23.Para el valor
MM, utilice valores de minutos que oscilen entre00y59.
Para los clústeres fragmentados autoadministrados, MongoDB evalúa las horas de inicio y finalización en relación con la zona horaria del miembro principal en el conjunto de réplicas del servidor de configuración.
Para los clústeres Atlas, MongoDB evalúa las horas de inicio y finalización en relación con la zona horaria UTC.
Nota
La ventana del balanceador debe ser suficiente para completar la migración de todos los datos insertados durante el día.
Como las tasas de inserción de datos pueden cambiar según la actividad y los patrones de uso, asegúrese de que la ventana de equilibrio que seleccione sea suficiente para satisfacer las necesidades de su implementación.
(Opcional) Asegúrese de que la eliminación por rango sea síncrona.
Utilice este paso solo si desea restringir la eliminación de rango a la ventana de equilibrio.
De forma predeterminada, el balanceador no espera a que finalice la fase de eliminación de la migración en curso antes de iniciar la siguiente migración de fragmentos. Para que la fase de eliminación bloquee el inicio de la siguiente migración de fragmentos, puede establecer
_waitForDeletecomo verdadero.Actualizar el valor
_waitForDeleteen la colecciónsettingsde la base de datosconfig. Por ejemplo:use config db.settings.updateOne( { "_id" : "balancer" }, { $set : { "_waitForDelete" : true } }, { upsert : true } )
Desactiva el balanceo para colecciones específicas
De forma predeterminada, cada colección tiene el equilibrio habilitado.
Para deshabilitar el equilibrio de una colección específica, conéctese a un mongos con el mongosh shell y llame al sh.disableBalancing() método.
Este ejemplo deshabilita el equilibrio en la colección students.grades:
sh.disableBalancing("students.grades")
El sh.disableBalancing() método acepta el espacio de nombres completo de la colección como parámetro.
Vuelva a habilitar el balanceador en su clúster.
Utilice este procedimiento si ha deshabilitado el balanceador y está listo para volver a habilitarlo:
Conéctese a cualquier en el
mongosmongoshclúster utilizando el shell.Emita una de las siguientes operaciones para habilitar el balanceador:
Desde el shell
mongosh, ejecute:sh.startBalancer() Nota
Para habilitar el balanceador desde un controlador, utilice el comando balancerStart contra la
adminbase de datos, como se muestra a continuación:db.adminCommand( { balancerStart: 1 } ) A partir de MongoDB,6.0.3 la división automática de fragmentos no se realiza. Esto se debe a mejoras en la política de balanceo. Los comandos de división automática aún existen, pero no realizan ninguna operación. Para más información, consulte Cambios en la política de balanceo.
En versiones de MongoDB anteriores 6.0.3 a, también habilita la división automática para el clúster
sh.startBalancer()fragmentado.