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
/ / /

Convierta un set de réplicas autogestionado en un clúster

Este tutorial convierte un único set de réplicas de tres nodos en un clúster con dos particiones. Cada partición es un set de réplicas independiente de tres nodos. Este tutorial es específico de MongoDB 5.0. Para otras versiones de MongoDB, consulta la versión correspondiente del Manual de MongoDB.

Puedes convertir a un clúster compartimentado en la Interfaz de Usuario para despliegues alojados en MongoDB Atlas.

Los pasos individuales en estos procedimientos indican cuándo se producirá el tiempo de inactividad.

Importante

Estos procedimientos provocan cierto tiempo de inactividad para tu implementación.

Este tutorial utiliza un total de diez servidores: un servidor para el mongos y tres servidores cada uno para el primer set de réplicas, el segundo set de réplicas y el set de réplicas de servidor de configuración.

Cada servidor debe tener un dominio, hostname o dirección IP resoluble dentro de tu sistema.

El tutorial utiliza los directorios de datos por defecto (por ejemplo, /data/db y /data/configdb). Crea los directorios adecuados con los permisos apropiados. Para usar rutas diferentes, consulta Opciones de archivos de configuración autogestionados .

1

Para obtener usuarios y roles existentes, ejecute mongodump:

mongodump -d=admin --out=adminDump -u <adminUser> -p <password> --host <replicaSetURI> --dumpDbUsersAndRoles
2

Implementa un set de réplicas de tres nodos para los servidores de configuración. En este ejemplo, los servidores de configuración utilizan los siguientes hosts:

  • mongodb7.example.net

  • mongodb8.example.net

  • mongodb9.example.net

  1. Configurar los servidores de configuración

    Configura una instancia de mongod en cada host del servidor de configuración. Especifica estas opciones en el archivo de configuración para cada instancia mongod:

    Opción
    Valor

    configReplSet

    configsvr

    localhosty luego cualquier otro nombre de host en el que el mongod deba escuchar las conexiones de los clientes.

    replication:
    replSetName: configReplSet
    sharding:
    clusterRole: configsvr
    net:
    bindIp: localhost,<hostname(s)>

    Incluya opciones adicionales según corresponda para su implementación.

  2. Inicie los servidores de configuración

    Implemente el mongod con la configuración especificada:

    mongod --config <PATH_TO_CONFIG_FILE>

    Los servidores de configuración usan el directorio de datos por defecto /data/configdb y el puerto por defecto 27019.

  3. Conectar con uno de los servidores de configuración.

    Utilice mongosh para conectarse a uno de los servidores de configuración. Por ejemplo:

    mongosh "mongodb://mongodb7.example.net:27019"
  4. Inicia el set de réplicas del servidor de configuración.

    Para iniciar el set de réplicas, ejecuta rs.initiate():

    rs.initiate( {
    _id: "configReplSet",
    configsvr: true,
    members: [
    { _id: 0, host: "mongodb7.example.net:27019" },
    { _id: 1, host: "mongodb8.example.net:27019" },
    { _id: 2, host: "mongodb9.example.net:27019" }
    ]
    } )

    El comando precedente utiliza la excepción de localhost para realizar acciones administrativas sin autenticación.

    Importante

    Ejecuta rs.initiate() en solo una y únicamente una instancia mongod para el conjunto de réplicas.

3

Restaure los usuarios y roles existentes que obtuviste al ejecutar mongodump.

mongorestore ./adminDump --nsInclude "admin.*" --host <configPrimaryURI>

El comando precedente utiliza la excepción de localhost para realizar acciones administrativas sin autenticación.

La salida al ejecutar este comando puede ser similar a:

0 document(s) restored successfully

Este mensaje no indica un problema. Esta salida significa que se restauraron 0 documentos que no son usuarios ni roles.

4

Vuelve a configurar y reinicia el set de réplicas del servidor de configuración.

  1. Reconfigura los servidores de configuración

    Selecciona la pestaña de tu mecanismo de autenticación:

    Reinicie una instancia de mongod en cada uno de estos hosts:

    • mongodb7.example.net

    • mongodb8.example.net

    • mongodb9.example.net

    Especifica estas opciones en el archivo de configuración para cada instancia de mongod:

    Opción
    Valor

    La ruta al archivo clave utilizado para su set de réplicas inicial.

    security:
    keyFile: <PATH_TO_KEYFILE>
    replication:
    replSetName: configReplSet
    sharding:
    clusterRole: configsvr
    net:
    bindIp: localhost,<hostname(s)>

    Incluya opciones adicionales según corresponda para su implementación.

    Reinicie una instancia de mongod en cada uno de estos hosts:

    • mongodb7.example.net

    • mongodb8.example.net

    • mongodb9.example.net

    Especifica estas opciones en el archivo de configuración para cada instancia de mongod además de las opciones que ya configuraste:

    Opción
    Valor

    x509

    requireTLS

    La ruta absoluta al archivo .pem que contiene tanto el certificado TLS como la clave.

    La ruta absoluta hacia el archivo .pem que contiene la cadena de certificados raíz de la Autoridad Certificadora.

    localhosty luego cualquier otro nombre de host en el que el mongod deba escuchar las conexiones de los clientes.

    ADVERTENCIA: Antes de enlazar a un host que no sea localhost (por ejemplo, dirección IP (accesible públicamente), asegúrate de haber protegido tu clúster contra 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, considere activar la autenticación y reforzar la infraestructura de red.

    sharding:
    clusterRole: configsvr
    replication:
    replSetName: configReplSet
    security:
    clusterAuthMode: x509
    net:
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<hostname(s)>

    Incluya opciones adicionales según corresponda para su implementación, como net.tls.certificateKeyFilePassword si el archivo de clave de certificado TLS está cifrado con una contraseña.

  2. Reiniciar MongoDB

    Reinicia el mongod con la configuración que especificaste:

    mongod --config <PATH_TO_CONFIG_FILE> --shutdown
    mongod --config <PATH_TO_CONFIG_FILE>
5

El mongos proporciona la interfaz entre las aplicaciones cliente y el clúster fragmentado.

  1. Cree un archivo de configuración para el mongos.

    Especifica estas opciones en el mongos archivo de configuración:

    Opción
    Valor

    configReplSetseguidos de una barra / y al menos uno de los nombres de host y puertos del servidor de configuración.

    La ruta al archivo clave utilizado para su set de réplicas inicial.

    localhosty luego cualquier otro nombre de host en el que el mongos deba escuchar las conexiones de los clientes.

    sharding:
    configDB: configReplSet/mongodb7.example.net:27019,mongodb8.example.net:27019,mongodb9.example.net:27019
    security:
    keyFile: <PATH_TO_KEYFILE>
    net:
    bindIp: localhost,<hostname(s)>

    Incluya opciones adicionales según corresponda para su implementación.

    Especifica estas opciones en el mongos archivo de configuración:

    Opción
    Valor

    configReplSetseguidos de una barra / y al menos uno de los nombres de host y puertos del servidor de configuración.

    x509

    requireTLS

    La ruta absoluta al archivo .pem que contiene tanto el certificado TLS como la clave.

    La ruta absoluta hacia el archivo .pem que contiene la cadena de certificados raíz de la Autoridad Certificadora.

    localhosty luego cualquier otro nombre de host en el que el mongos deba escuchar las conexiones de los clientes.

    sharding:
    configDB: configReplSet/mongodb7.example.net:27019,mongodb8.example.net:27019,mongodb9.example.net:27019
    security:
    clusterAuthMode: x509
    net:
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<hostname(s)>

    Incluya cualquier opción adicional apropiada para su implementación.

  2. Implementa el mongos.

    Implemente el mongos con la configuración especificada:

    mongos --config <PATH_TO_CONFIG_FILE>
6

En este ejemplo, tu set de réplicas inicial es un set de réplicas de tres nodos. Este paso actualiza el set de réplicas inicial para que pueda ser añadido como una partición a tu clúster fragmentado.

El set de réplicas se ejecuta en estos hosts:

  • mongodb0.example.net:27017

  • mongodb1.example.net:27017

  • mongodb2.example.net:27017

Para los clústeres particionados, debes establecer el rol para cada instancia mongod en la partición a shardsvr. Para especificar el rol del servidor, establece el ajuste sharding.clusterRole en el archivo de configuración mongod.

Nota

El puerto por defecto para las instancias de mongod con el rol de shardsvr es 27018. Para utilizar un puerto diferente, especifica la net.port configuración.

  1. Conéctate a un nodo de tu set de réplicas inicial.

    Utilice mongosh para conectarte a uno de los miembros de tu set de réplicas inicial.

    mongosh "mongodb://<username>@mongodb0.example.net:27017"

    Si tu implementación utiliza la autenticación x.509, especifica estas mongosh opciones:

    Por ejemplo:

    mongosh "mongodb://<username>@mongodb0.example.net:27017" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
  2. Determina el primario y los secundarios del set de réplicas.

    Ejecuta rs.status() para determinar el primario y los secundarios:

    rs.status()

    En la salida del comando, el replSetGetStatus.members[n].stateStr campo indica cuál nodo es el principal y cuáles nodos son secundarios.

  3. Reinicia los secundarios con la opción --shardsvr.

    Advertencia

    Este paso requiere cierto tiempo de inactividad para las aplicaciones conectadas a los secundarios del set de réplicas.

    Después de reiniciar un secundario, cualquier aplicación conectada a esa réplica secundaria genera un error CannotVerifyAndSignLogicalTime hasta que completes los pasos en Agregar el set de réplicas inicial como una partición.

    También puedes reiniciar tu aplicación para evitar que reciba errores de CannotVerifyAndSignLogicalTime.

    1. Conéctese a un secundario.

      Utiliza mongosh para conectarse a uno de los secundarios.

      mongosh "mongodb://<username>@<host>:<port>"
    2. Apaga el secundario.

      Ejecute los siguientes comandos:

      use admin
      db.shutdownServer()
    3. Edite el archivo de configuración del secundario.

      En el archivo de configuración del secundario, establecer sharding.clusterRole a shardsvr:

      security:
      keyFile: <PATH_TO_KEYFILE>
      replication:
      replSetName: rs0
      sharding:
      clusterRole: shardsvr
      net:
      port: 27017
      bindIp: localhost,<hostname(s)>

      Incluya opciones adicionales según corresponda para su implementación.

    4. Reinicie el secundario como servidor de particiones.

      Ejecute el siguiente comando en el host que contiene el secundario:

      mongod --config <PATH_TO_CONFIG_FILE>
    5. Repite los pasos de apagado y reinicio para el otro secundario.

    1. Conéctese a un secundario.

      Utiliza mongosh para conectarse a uno de los secundarios.

      Si tu implementación utiliza la autenticación x.509, especifica estas mongosh opciones:

      mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
    2. Apaga el secundario.

      Ejecute los siguientes comandos:

      use admin
      db.shutdownServer()
    3. Edite el archivo de configuración del secundario.

      En el archivo de configuración del secundario, establecer sharding.clusterRole a shardsvr:

      replication:
      replSetName: rs0
      sharding:
      clusterRole: shardsvr
      security:
      clusterAuthMode: x509
      net:
      port: 27017
      tls:
      mode: requireTLS
      certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
      CAFile: <CA_FILE>
      bindIp: localhost,<hostname(s)>

      Incluya opciones adicionales según corresponda para su implementación, como net.tls.certificateKeyFilePassword si el archivo de clave de certificado TLS está cifrado con una contraseña.

    4. Reinicie el secundario como servidor de particiones.

      Ejecute el siguiente comando en el host que contiene el secundario:

      mongod --config <PATH_TO_CONFIG_FILE>
    5. Repite los pasos de apagado y reinicio para el otro secundario.

7

Advertencia

Este paso requiere cierto tiempo de inactividad para las aplicaciones conectadas al primario del set de réplicas.

Después de reiniciar el primario, cualquier aplicación que esté conectada al primario devolverá un error CannotVerifyAndSignLogicalTime hasta que realices los pasos en Agregar el set de réplicas inicial como una partición.

También puedes reiniciar tu aplicación para evitar que reciba errores de CannotVerifyAndSignLogicalTime.

  1. Conéctese al primario.

    Usa mongosh para conectarte al primario:

    mongosh "mongodb://<username>@<host>:<port>"
  2. Degradar al primario.

    Ejecuta el siguiente comando:

    rs.stepDown()
  3. Verifique que la reducción esté completa.

    Ejecutar rs.status() para confirmar que el nodo al que estás conectado ha renunciado y ahora es un secundario:

    rs.status()
  4. Apague la versión principal anterior.

    Ejecute los siguientes comandos:

    use admin
    db.shutdownServer()

    Esperar que se complete el apagado.

  5. Edita el archivo de configuración del nodo:primario.

    En el archivo de configuración principal, establezca sharding.clusterRole en shardsvr:

    security:
    keyFile: <PATH_TO_KEYFILE>
    replication:
    replSetName: rs0
    sharding:
    clusterRole: shardsvr
    net:
    port: 27017
    bindIp: localhost,<hostname(s)>

    Incluya opciones adicionales según corresponda para su implementación.

  6. Reinicie el primario como servidor de particiones.

    Ejecuta el siguiente comando en el host que contiene el principal:

    mongod --config <PATH_TO_CONFIG_FILE>
  1. Conéctese al primario.

    Utiliza mongosh para conectarse a uno de los secundarios.

    Si tu implementación utiliza la autenticación x.509, especifica estas mongosh opciones:

    Si tu implementación utiliza la autenticación x.509, especifica estas mongosh opciones:

    mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
  2. Degradar al primario.

    Ejecuta el siguiente comando:

    rs.stepDown()
  3. Verifique que la reducción esté completa.

    Ejecutar rs.status() para confirmar que el nodo al que estás conectado ha renunciado y ahora es un secundario:

    rs.status()
  4. Apague la versión principal anterior.

    Ejecute los siguientes comandos:

    use admin
    db.shutdownServer()

    Esperar que se complete el apagado.

  5. Edita el archivo de configuración del nodo:primario.

    En el archivo de configuración principal, establezca sharding.clusterRole en shardsvr:

    replication:
    replSetName: rs0
    sharding:
    clusterRole: shardsvr
    security:
    clusterAuthMode: x509
    net:
    port: 27017
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<hostname(s)>

    Incluya opciones adicionales según corresponda para su implementación, como net.tls.certificateKeyFilePassword si el archivo de clave de certificado TLS está cifrado con una contraseña.

  6. Reinicie el primario como servidor de particiones.

    Ejecuta el siguiente comando en el host que contiene el principal:

    mongod --config <PATH_TO_CONFIG_FILE>
8

Después de convertir el set de réplicas inicial (rs0) en una partición, agrégalo al clúster.

  1. Conéctese a mongos como el usuario administrativo de su clúster.

    La instancia mongos se ejecuta en el host mongodb6.example.net.

    Para conectar mongosh al mongos, ejecuta el siguiente comando:

    mongosh "mongodb://admin01@mongodb6.example.net:27017"

    Si tu implementación utiliza la autenticación x.509, especifica estas mongosh opciones:

    Si tu implementación utiliza la autenticación x.509, especifica estas mongosh opciones:

    mongosh "mongodb://admin01@mongodb6.example.net:27017" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>

    Este comando te autentica como el usuario admin01 que creaste en el clúster fragmentado. Después de introducir el comando, introduce la contraseña de tu usuario.

  2. Añade la partición.

    Para añadir una partición al clúster, ejecuta el método sh.addShard():

    sh.addShard( "rs0/mongodb0.example.net:27017,mongodb1.example.net:27017,mongodb2.example.net:27017" )

    Advertencia

    Una vez que la nueva partición esté activa, mongosh y otros clientes deben conectarse siempre a la instancia mongos. No se conecte directamente a las instancias mongod. Si tus clientes se conectan directamente a particiones, puedes crear inconsistencias en los datos o metadatos.

9

Después de añadir la primera partición a tu clúster, actualiza la cadena de conexión que utilizan tus aplicaciones a la cadena de conexión de tu clúster particionado. Luego, reinicie sus aplicaciones.

10

Implementa un nuevo set de réplicas llamado rs1. Los nodos del set de réplicas rs1 se encuentran en los siguientes hosts:

  • mongodb3.example.net

  • mongodb4.example.net

  • mongodb5.example.net

  1. Inicia cada nodo del set de réplicas.

    Para cada instancia de mongod en el set de réplicas, crea un archivo de configuración con las siguientes opciones:

    Opción
    Valor

    La ruta al archivo clave utilizado para su set de réplicas inicial.

    rs1

    shardsvr

    localhosty luego cualquier otro nombre de host en el que el mongod deba escuchar las conexiones de los clientes.

    security:
    keyFile: <PATH_TO_KEYFILE>
    replication:
    replSetName: rs1
    sharding:
    clusterRole: shardsvr
    net:
    bindIp: localhost,<hostname(s)>

    Incluya opciones adicionales según corresponda para su implementación.

    Para cada nodo, inicia un mongod con las siguientes opciones:

    Opción
    Valor

    rs1

    shardsvr

    x509

    requireTLS

    La ruta absoluta al archivo .pem que contiene tanto el certificado TLS como la clave.

    La ruta absoluta hacia el archivo .pem que contiene la cadena de certificados raíz de la Autoridad Certificadora.

    localhosty luego cualquier otro nombre de host en el que el mongod deba escuchar las conexiones de los clientes.

    replication:
    replSetName: rs1
    sharding:
    clusterRole: shardsvr
    security:
    clusterAuthMode: x509
    net:
    tls:
    mode: requireTLS
    certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY>
    CAFile: <CA_FILE>
    bindIp: localhost,<hostname(s)>

    Implemente el mongod con la configuración especificada:

    mongod --config <PATH_TO_CONFIG_FILE>

    Nota

    Cuando especificas la opción --shardsvr para una instancia de mongod, la instancia se ejecuta en el puerto 27018 por defecto.

  2. Inicia cada nodo del set de réplicas.

  3. Conectar a un miembro del set de réplicas.

    Utilice mongosh para conectar con uno de los miembros del set de réplicas. Por ejemplo:

    mongosh "mongodb://mongodb3.example.net:27018"
    mongosh "mongodb://mongodb3.example.net:27018" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>
  4. Inicia el set de réplicas.

    En mongosh, ejecute el método rs.initiate() para iniciar un set de réplicas que contenga el nodo actual:

    rs.initiate( {
    _id : "rs1",
    members: [
    { _id: 0, host: "mongodb3.example.net:27018" },
    { _id: 1, host: "mongodb4.example.net:27018" },
    { _id: 2, host: "mongodb5.example.net:27018" }
    ]
    } )

    El comando precedente requiere la excepción de localhost para realizar acciones administrativas sin autenticación.

    Importante

    Ejecuta rs.initiate() en solo una y únicamente una instancia mongod para el conjunto de réplicas.

  5. Agregar un usuario administrativo para el set de réplicas.

    Después de implementar el set de réplicas, utilice la excepción de localhost para crear el primer usuario del set de réplicas.

    1. Determinar el primario del set de réplicas.

      Para determinar el principal, ejecute rs.status():

      rs.status()

      En la salida del comando, el campo replSetGetStatus.members[n].stateStr indica qué nodo es el principal.

    2. Conéctate al primario del conjunto de réplicas.

      Conéctate al primario del set de réplicas con mongosh. Por ejemplo, si el primario es mongodb4.example.net, ejecuta este comando:

      mongosh "mongodb://mongodb4.example.net:27018"
    3. Crea un usuario administrativo.

      Ejecuta el siguiente método db.createUser() para crear un usuario llamado rs1Admin con el rol de userAdmin:

      use admin
      db.createUser(
      {
      user: "rs1Admin",
      pwd: passwordPrompt(),
      roles: [
      { role: "userAdmin", db: "admin" }
      ]
      }
      )

      Después de ejecutar el comando, la base de datos te pedirá que ingreses una contraseña para el usuario rs1Admin.

11

Añade el nuevo set de réplicas, rs1, al clúster.

  1. Conectar mongosh al mongos.

    Ejecute el siguiente comando desde la línea de comandos para conectarse a la instancia mongos que se ejecuta en el host mongodb6.example.net:

    mongosh "mongodb://admin01@mongodb6.example.net:27017/admin"
    mongosh "mongodb://admin01@mongodb6.example.net:27017/admin" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename>

    Este comando te autentica como el usuario admin01 que creaste en el clúster fragmentado. Después de introducir el comando, introduce la contraseña de tu usuario.

  2. Agrega la segunda partición.

    Después de conectarte a mongos, agrega el set de réplicas rs1 como partición al clúster con el método sh.addShard():

    sh.addShard( "rs1/mongodb3.example.net:27018,mongodb4.example.net:27018,mongodb5.example.net:27018" )
12

El paso final del procedimiento es fragmentar una colección en el clúster fragmentado.

  1. Determina la clave de partición.

    Determina la clave de partición para la colección. La clave de partición indica cómo MongoDB distribuye los documentos entre las particiones. Buenas claves de fragmento:

    • Tener valores que estén distribuidos de manera uniforme entre todos los documentos.

    • Agrupa los documentos que se acceden con frecuencia al mismo tiempo en fragmentos contiguos.

    • Permitir la distribución efectiva de la actividad entre particiones.

    Para obtener más información, consulta Elige una clave de partición.

    Este procedimiento usa el campo number como la clave de partición para la colección test_collection.

  2. Crear un índice sobre la clave de partición.

    Antes de fragmentar una colección no vacía, crea un índice en la clave de partición:

    use test
    db.test_collection.createIndex( { "number" : 1 } )
  3. Divida la colección en partición.

    En la base de datos test, particionar el test_collection. Especifica number como la clave de partición.

    sh.shardCollection( "test.test_collection", { "number" : 1 } )

    La próxima vez que se ejecute el balanceador, redistribuirá los fragmentos de documentos entre las particiones. A medida que los clientes insertan documentos en esta colección, el mongos enruta los documentos a la partición adecuada.

    Cuando el balanceador redistribuye fragmentos, puede tener un impacto negativo en el rendimiento de la aplicación. Para minimizar el impacto en el rendimiento, puede especificar cuándo se ejecuta el balanceador para que no se ejecute durante las horas pico. Para obtener más información, consulta Programar la ventana de balanceo.

Para más tutoriales y procedimientos sobre particionado, consulta estas páginas:

Volver

Convertir el clúster fragmentado en un set de réplicas

En esta página