Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Administración
/ / /

Migrar un clúster fragmentado autogestionado a un hardware diferente

El tutorial está orientado específicamente a MongoDB 6.0. Para versiones anteriores de MongoDB, consulta la versión correspondiente del Manual de MongoDB.

Los servidores de configuración para clústeres particionados se implementan como un Conjunto de réplicas. Los servidores de configuración del conjunto de réplicas deben ejecutar el motor de almacenamiento WiredTiger.

Este procedimiento mueve los componentes del clúster a un nuevo sistema de hardware sin interrupciones para lecturas y guardados.

Importante

Mientras la migración esté en curso, no intente cambiar los metadatos del clúster fragmentado. No utilice ninguna operación que modifique los metadatos del clúster. Por ejemplo, no cree ni elimine bases de datos, colecciones ni utilice comandos de fragmentación.

Deshabilitar el balanceador para detener la migración de fragmentos y no realizar ninguna operación de escritura de metadatos hasta que el proceso termine. Si una migración está en curso, el balanceador completará la migración en curso antes de detenerse.

Para deshabilitar el balanceador, conéctese a uno de los clústeres mongos instancias y emita el siguiente método: [1]

sh.stopBalancer()

Para comprobar el estado del balanceador, emite el método sh.getBalancerState().

Para obtener más información,consulte Deshabilitar el balanceador.

[1] A partir de MongoDB 6.0.3, no se realiza la partición automática de fragmentos. Esto se debe a mejoras en las políticas de equilibrio. Los comandos de división automática siguen existiendo, pero no realizan una operación. Para más información, consulta Cambios en la política de balanceo.En versiones de MongoDB anteriores a la 6.0.3, sh.stopBalancer() también desactiva la división automática para el clúster fragmentado.

Los servidores de configuración para clústeres sharded pueden implementarse como un set de réplicas (CSRS). Utilizar un set de réplicas para los servidores de configuración mejora la coherencia entre los servidores de configuración, ya que MongoDB puede aprovechar los protocolos estándar de lectura y escritura de sets de réplicas para los datos de configuración. Además, el uso de un set de réplicas para los servidores de configuración permite que un cluster shard tenga más de 3 servidores de configuración, ya que un set de réplicas puede tener hasta 50 miembros. Para implementar servidores de configuración como un set de réplicas, los servidores de configuración deben ejecutar el Motor de almacenamiento WiredTiger.

Las siguientes restricciones se aplican a una configuración de conjunto de réplicas cuando se utiliza para servidores de configuración:

  • Debe tener cero árbitros.

  • No debe tener miembros retrasados.

  • Deben crear índices (i.e. ningún nodo debería tener el ajuste members[n].buildIndexes ajustado en falso).

Para cada nodo del set de réplicas del servidor de configuración:

Importante

Reemplace los miembros secundarios antes de reemplazar los primarios.

1

Inicie una instancia de mongod, especificando las opciones --configsvr, --replSet, --bind_ip y otras opciones según corresponda a su implementación.

Advertencia

Antes de enlazar a un host que no sea localhost (por ejemplo, Públicamente accesible) dirección IP, asegúrese de que ha protegido su clúster de accesos no autorizados. Para obtener una lista completa de recomendaciones de seguridad, consulta la Lista de verificación de seguridad para implementaciones autogestionadas. Como mínimo, considera activar la autenticación y fortalecer la infraestructura de red.

mongod --configsvr --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>
2

Conecta mongosh al primario del set de réplicas de servidores de configuración y utiliza rs.add() para agregar el nuevo nodo.

Advertencia

Antes de MongoDB 5.0, un nuevo secundario añadido aún cuenta como nodo con derecho a voto incluso aunque no pueda servir lecturas ni convertirse en primario hasta que sus datos sean coherentes. Si tienes una versión de MongoDB anterior a la 5.0 y agregas un secundario con su votes y la configuración de priority mayor a cero, esto puede llevar a una situación en la que la mayoría de los nodos con derecho a voto estén en linea pero no se pueda elegir un primario. Para evitar estas situaciones, considera añadir el nuevo arrendatario secundario, inicialmente, con priority :0 y votes :0. Después, ejecuta rs.status() para asegurar que el nodo haya pasado al estado SECONDARY. Por último, usa rs.reconfig() para actualizar su prioridad y votos.

rs.add( { host: "<hostnameNew>:<portNew>", priority: 0, votes: 0 } )

El proceso de sincronización inicial copia todos los datos de un miembro del conjunto de réplicas del servidor de configuración al nuevo miembro sin reiniciar.

mongos Las instancias reconocen automáticamente el cambio en los miembros del conjunto de réplicas del servidor de configuración sin reiniciar.

3
  1. Asegúrese de que el nuevo miembro haya alcanzado el estado. Para comprobar el estado de los miembros del conjunto de SECONDARY réplicas,rs.status() ejecute:

    rs.status()
  2. Reconfigura el set de réplicas para actualizar los votos y la prioridad del nuevo nodo:

    var cfg = rs.conf();
    cfg.members[n].priority = 1; // Substitute the correct array index for the new member
    cfg.members[n].votes = 1; // Substitute the correct array index for the new member
    rs.reconfig(cfg)

    donde n es el índice del nuevo nodo en el arreglo members.

Advertencia

  • El método de shell rs.reconfig() puede forzar el traspaso del primario actual, lo que provoca una elección. Cuando el primario renuncia, el mongod cierra todas las conexiones de los clientes. Aunque esto generalmente toma entre 10 y 20 segundos, intente hacer estos cambios durante los periodos de mantenimiento programados.

  • Evitar reconfigurar sets de réplicas que contengan miembros de diferentes versiones de MongoDB, ya que las reglas de validación pueden diferir entre versiones de MongoDB.

4

Si se reemplaza al miembro principal, primero se debe retirar al principal antes de apagarlo.

5

Al completar la sincronización inicial del servidor de configuración de reemplazo, desde una sesión mongosh conectada al primario, utiliza rs.remove() para remover el nodo antiguo.

rs.remove("<hostnameOld>:<portOld>")

mongos Las instancias reconocen automáticamente el cambio en los miembros del conjunto de réplicas del servidor de configuración sin reiniciar.

Con los servidores de configuración del set de réplicas, las instancias de mongos especifican en la configuración --configdb o sharding.configDB el nombre del set de réplicas del servidor de configuración y al menos uno de los miembros del set de réplicas. Las mongos instancias para el clúster deben especificar el mismo nombre del set de réplicas del servidor de configuración, pero pueden especificar diferentes nodos del set de réplicas.

Si una instancia de mongos especifica un miembro de set de réplicas migrado en la configuración --configdb o sharding.configDB, actualice la configuración del servidor de configuración para la próxima vez que reinicie la instancia mongos.

Para obtener más información, consulte Iniciar un mongos para el clúster fragmentado.

Migra las particiones una a la vez. Para cada partición, debe seguir el procedimiento correspondiente indicado en esta sección.

Para migrar un clúster fragmentado, migre cada miembro por separado. Primero migre los miembros no principales y, por último, el principal.

Si el set de réplicas tiene dos miembros con derecho a voto, agregue un árbitro al set de réplicas para asegurar que el set mantenga la mayoría de sus votos disponibles durante la migración. Puede remover el árbitro después de completar la migración.

  1. Apague el proceso mongod. Para garantizar un cierre limpio, utilice el comando shutdown.

  2. Mueve el directorio de datos (es decir, el dbPath) a la nueva máquina.

  3. Reinicia el proceso mongod en la nueva ubicación.

  4. Conéctese al servidor principal actual del conjunto de réplicas.

  5. Si el nombre de host del nodo ha cambiado, utiliza rs.reconfig() para actualizar el documento de configuración del set de réplicas con el nuevo nombre de host.

    Por ejemplo, la siguiente secuencia de comandos actualiza el nombre de host de la instancia en la posición 2 en el arreglo members:

    cfg = rs.conf()
    cfg.members[2].host = "pocatello.example.net:27018"
    rs.reconfig(cfg)

    Para obtener más información sobre cómo actualizar el documento de configuración, consulta Ejemplos.

  6. Para confirmar la nueva configuración, emite rs.conf().

  7. Espera a que se recupere el nodo. Para verificar el estado del nodo, emite rs.status().

Al migrar el conjunto de réplicas principal, este debe elegir un nuevo conjunto. Este proceso de conmutación por error impide que el conjunto de réplicas pueda realizar lecturas o aceptar escrituras durante la elección, que suele completarse rápidamente. Si es posible, planifique la migración durante una ventana de mantenimiento.

  1. Reducir la carga del servidor principal para permitir el proceso normal de conmutación por error. Para reducir la carga del servidor principal, conéctese a él y ejecute replSetStepDown el comando o el rs.stepDown() método. El siguiente ejemplo muestra el rs.stepDown() método:

    rs.stepDown()
  2. Una vez que el primario haya renunciado y otro nodo haya pasado al estado PRIMARY. Para migrar el primario degradado, sigue el procedimiento de Migrar un miembro de un set de réplicas partición

    Puedes verificar la salida de rs.status() para confirmar el cambio de estado.

Para completar la migración, vuelva a activar el equilibrador para reanudar las migraciones de fragmentos.

Conéctate a una de las instancias mongos del clúster y pasa true al método sh.startBalancer(): [2]

sh.startBalancer()

Para comprobar el estado del balanceador, emite el método sh.getBalancerState().

Para obtener más información, consulte Habilitar el balanceador.

[2] 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 siguen existiendo, pero no realizan ninguna operación. Para obtener más información, consulte Cambios en la política de balanceo.En versiones de MongoDB anteriores a la 6.0.3, sh.startBalancer() también habilita la división automática para el clúster fragmentado.

Volver

Reiniciar

En esta página