Overview
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.
Considerations
Los pasos individuales en estos procedimientos indican cuándo ocurrirá un tiempo de inactividad.
Importante
Estos procedimientos provocan cierto tiempo de inactividad para tu implementación.
Requisitos previos
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 .
Procedimientos
Implementar el set de réplicas del servidor de configuración
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.netmongodb8.example.netmongodb9.example.net
Configurar los servidores de configuración
Configura una instancia de
mongoden cada host del servidor de configuración. Especifica estas opciones en el archivo de configuración para cada instanciamongod:OpciónValorconfigReplSetconfigsvrlocalhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones demongodcliente.replication: replSetName: configReplSet sharding: clusterRole: configsvr net: bindIp: localhost,<hostname(s)> Incluya opciones adicionales según corresponda para su implementación.
Inicie los servidores de configuración
Implemente el con la configuración
mongodespecificada:mongod --config <PATH_TO_CONFIG_FILE> Los servidores de configuración usan el directorio de datos por defecto
/data/configdby el puerto por defecto27019.Conectar con uno de los servidores de configuración.
Utilice
mongoshpara conectarse a uno de los servidores de configuración. Por ejemplo:mongosh "mongodb://mongodb7.example.net:27019" 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 instanciamongodpara el conjunto de réplicas.
Restaurar usuarios y roles existentes a la nueva configuración
Restaure los usuarios y roles existentes que tenía cuando ejecutó mongodump.
mongorestore ./adminDump --nsInclude "admin.*" --host <configPrimaryURI>
El comando precedente utiliza la excepción de localhost para realizar acciones administrativas sin autenticación.
El resultado de 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.
Secure servidor de configuración set de réplicas
Reconfigure y reinicie el conjunto de réplicas del servidor de configuración.
Reconfigurar los servidores de configuración
Seleccione la pestaña para su mecanismo de autenticación:
Reinicie una instancia de
mongoden cada uno de estos hosts:mongodb7.example.netmongodb8.example.netmongodb9.example.net
Especifica estas opciones en el archivo de configuración para cada instancia de
mongod:OpciónValorLa 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
mongoden cada uno de estos hosts:mongodb7.example.netmongodb8.example.netmongodb9.example.net
Especifica estas opciones en el archivo de configuración para cada instancia de
mongodademás de las opciones que ya configuraste:OpciónValorx509requireTLSLa ruta absoluta al archivo
.pemque contiene tanto el certificado TLS como la clave.La ruta absoluta hacia el archivo
.pemque contiene la cadena de certificados raíz de la Autoridad Certificadora.localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones demongodcliente.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.certificateKeyFilePasswordsi el archivo de clave de certificado TLS está cifrado con una contraseña.Reiniciar MongoDB
Reinicie el con la configuración
mongodespecificada:mongod --config <PATH_TO_CONFIG_FILE> --shutdown mongod --config <PATH_TO_CONFIG_FILE>
Implemente el mongos
El mongos proporciona la interfaz entre las aplicaciones cliente y el clúster fragmentado.
Cree un archivo de configuración para el mongos.
Especifique estas opciones en su
mongosarchivo de configuración:OpciónValorconfigReplSetseguidos 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.
localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones demongoscliente.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.
Especifique estas opciones en su
mongosarchivo de configuración:OpciónValorconfigReplSetseguidos de una barra/y al menos uno de los nombres de host y puertos del servidor de configuración.x509requireTLSLa ruta absoluta al archivo
.pemque contiene tanto el certificado TLS como la clave.La ruta absoluta hacia el archivo
.pemque contiene la cadena de certificados raíz de la Autoridad Certificadora.localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones demongoscliente.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.
Implementa el mongos.
Implemente el con la configuración
mongosespecificada:mongos --config <PATH_TO_CONFIG_FILE>
Reinicia el conjunto de réplicas inicial como una partición
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 conjunto de réplicas se ejecuta en estos hosts:
mongodb0.example.net:27017mongodb1.example.net:27017mongodb2.example.net:27017
Para clústeres fragmentados, debe configurar el rol para cada instancia mongod del shardsvr fragmento. Para especificar el rol del servidor, configure el valor en sharding.clusterRole el mongod archivo de configuración.
Nota
Conéctate a un nodo de tu set de réplicas inicial.
Utilice
mongoshpara conectarte a uno de los miembros de tu set de réplicas inicial.mongosh "mongodb://<username>@mongodb0.example.net:27017" Si su implementación utiliza509 autenticación x., especifique estas
mongoshopciones:Por ejemplo:
mongosh "mongodb://<username>@mongodb0.example.net:27017" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> 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].stateStrcampo indica cuál nodo es el principal y cuáles nodos son secundarios.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
CannotVerifyAndSignLogicalTimehasta 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.Conectarse a un secundario.
Utiliza
mongoshpara conectarse a uno de los secundarios.mongosh "mongodb://<username>@<host>:<port>" Apague el secundario.
Ejecute los siguientes comandos:
use admin db.shutdownServer() Edite el archivo de configuración del secundario.
En el archivo de configuración del secundario, establecer
sharding.clusterRoleashardsvr: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.
Reinicie el secundario como servidor de particiones.
Ejecute el siguiente comando en el host que contiene el secundario:
mongod --config <PATH_TO_CONFIG_FILE> Repita los pasos de apagado y reinicio para el otro secundario.
Conectarse a un secundario.
Utiliza
mongoshpara conectarse a uno de los secundarios.Si su implementación utiliza509 autenticación x., especifique estas
mongoshopciones:mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Apague el secundario.
Ejecute los siguientes comandos:
use admin db.shutdownServer() Edite el archivo de configuración del secundario.
En el archivo de configuración del secundario, establecer
sharding.clusterRoleashardsvr: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.certificateKeyFilePasswordsi el archivo de clave de certificado TLS está cifrado con una contraseña.Reinicie el secundario como servidor de particiones.
Ejecute el siguiente comando en el host que contiene el secundario:
mongod --config <PATH_TO_CONFIG_FILE> Repita los pasos de apagado y reinicio para el otro secundario.
Reinicia el primario con la opción --shardsvr.
Advertencia
Este paso requiere cierto tiempo de inactividad para las aplicaciones conectadas a la parte principal del conjunto 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.
Conéctese al primario.
Usa
mongoshpara conectarte al primario:mongosh "mongodb://<username>@<host>:<port>" Degradar al primario.
Ejecuta el siguiente comando:
rs.stepDown() Verifique que el paso hacia abajo se haya completado.
Ejecutar
rs.status()para confirmar que el nodo al que estás conectado ha renunciado y ahora es un secundario:rs.status() Cerrar las antiguas primarias.
Ejecute los siguientes comandos:
use admin db.shutdownServer() Esperar que se complete el apagado.
Edita el archivo de configuración del nodo:primario.
En el archivo de configuración principal,
sharding.clusterRoleestablezcashardsvren: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.
Reinicie el primario como servidor de particiones.
Ejecuta el siguiente comando en el host que contiene el principal:
mongod --config <PATH_TO_CONFIG_FILE>
Conéctese al primario.
Utiliza
mongoshpara conectarse a uno de los secundarios.Si su implementación utiliza509 autenticación x., especifique estas
mongoshopciones:Si su implementación utiliza509 autenticación x., especifique estas
mongoshopciones:mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Degradar al primario.
Ejecuta el siguiente comando:
rs.stepDown() Verifique que el paso hacia abajo se haya completado.
Ejecutar
rs.status()para confirmar que el nodo al que estás conectado ha renunciado y ahora es un secundario:rs.status() Cerrar las antiguas primarias.
Ejecute los siguientes comandos:
use admin db.shutdownServer() Esperar que se complete el apagado.
Edita el archivo de configuración del nodo:primario.
En el archivo de configuración principal,
sharding.clusterRoleestablezcashardsvren: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.certificateKeyFilePasswordsi el archivo de clave de certificado TLS está cifrado con una contraseña.Reinicie el primario como servidor de particiones.
Ejecuta el siguiente comando en el host que contiene el principal:
mongod --config <PATH_TO_CONFIG_FILE>
Agregar el set de réplicas inicial como una partición
Después de convertir el conjunto de réplicas inicial (rs0) en un fragmento, agréguelo al clúster fragmentado.
Conéctese a
mongoscomo el usuario administrativo de su clúster.La instancia
mongosse está ejecutando en el hostmongodb6.example.net.Para conectar
mongoshalmongos, ejecuta el siguiente comando:mongosh "mongodb://admin01@mongodb6.example.net:27017" Este comando te autentica como el usuario
admin01que creaste en el clúster fragmentado. Después de introducir el comando, introduce la contraseña de tu usuario.Añade el fragmento.
Para agregar un fragmento al clúster, ejecute el
sh.addShard()método: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,
mongoshy otros clientes deben conectarse siempre a la instanciamongos. No se conecte directamente a las instanciasmongod. Si tus clientes se conectan directamente a particiones, puedes crear inconsistencias en los datos o metadatos.
Actualiza tu cadena de conexión de la aplicación
Después de agregar el primer fragmento a su clúster, actualice la cadena de conexión que usan sus aplicaciones con la cadena de conexión de su clúster fragmentado. Luego, reinicie sus aplicaciones.
Implementar un segundo conjunto de réplicas
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.netmongodb4.example.netmongodb5.example.net
Inicie cada miembro del conjunto de réplicas.
Para cada instancia en el conjunto de réplicas, cree un archivo de configuración con estas
mongodopciones:OpciónValorLa ruta al archivo clave utilizado para su set de réplicas inicial.
rs1shardsvrlocalhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones demongodcliente.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
mongodcon las siguientes opciones:OpciónValorrs1shardsvrx509requireTLSLa ruta absoluta al archivo
.pemque contiene tanto el certificado TLS como la clave.La ruta absoluta hacia el archivo
.pemque contiene la cadena de certificados raíz de la Autoridad Certificadora.localhost, seguido de cualquier otro nombre de host en el que debe escuchar conexiones demongodcliente.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 con la configuración
mongodespecificada:mongod --config <PATH_TO_CONFIG_FILE> Nota
Cuando especifica la
--shardsvropción para una instancia, la instancia se ejecuta en elmongodpuerto27018de forma predeterminada.Inicie cada miembro del conjunto de réplicas.
Conectar a un miembro del set de réplicas.
Utilice para conectarse a uno de los miembros del conjunto de réplicas. Por
mongoshejemplo:mongosh "mongodb://mongodb3.example.net:27018" mongosh "mongodb://mongodb3.example.net:27018" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Inicia el set de réplicas.
En
mongosh, ejecute el métodors.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 anterior requiere la excepción localhost para realizar acciones administrativas sin autenticación.
Importante
Ejecuta
rs.initiate()en solo una y únicamente una instanciamongodpara el conjunto de réplicas.Agregar un usuario administrativo para el set de réplicas.
Después de implementar el conjunto de réplicas, utilice la excepción localhost para crear el primer usuario del conjunto de réplicas.
Determinar el conjunto de réplicas primario.
Para determinar el primario,
rs.status()ejecute:rs.status() En la salida del comando, el campo
replSetGetStatus.members[n].stateStrindica qué nodo es el principal.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 esmongodb4.example.net, ejecuta este comando:mongosh "mongodb://mongodb4.example.net:27018" Crea un usuario administrativo.
Ejecute el siguiente método para crear un usuario
db.createUser()llamadors1Admincon eluserAdminrol: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.
Agrega el segundo set de réplicas al clúster como una partición
Añade el nuevo set de réplicas, rs1, al clúster.
Conectar
mongoshalmongos.Ejecute el siguiente comando desde la línea de comandos para conectarse a la instancia
mongosque se ejecuta en el hostmongodb6.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
admin01que creaste en el clúster fragmentado. Después de introducir el comando, introduce la contraseña de tu usuario.Agrega la segunda partición.
Después de conectarse a, agregue el conjunto de
mongosréplicasrs1como un fragmento al clúster con elsh.addShard()método:sh.addShard( "rs1/mongodb3.example.net:27018,mongodb4.example.net:27018,mongodb5.example.net:27018" )
Fragmenta una colección
El paso final del procedimiento es fragmentar una colección en el clúster fragmentado.
Determina la clave de partición.
Determine la clave de fragmento para la colección. La clave de fragmento indica cómo MongoDB distribuye los documentos entre fragmentos. Claves de fragmento adecuadas:
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
numbercomo la clave de partición para la coleccióntest_collection.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 } ) Fragmentar la colección.
En la base de datos
test, particionar eltest_collection. Especificanumbercomo 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
mongosenruta los documentos a la partición adecuada.Cuando el balanceador redistribuye fragmentos, puede afectar negativamente el rendimiento de la aplicación. Para minimizar el impacto en el rendimiento, puede especificar cuándo se ejecuta el balanceador para que no lo haga durante las horas punta. Para obtener más información, consulte Programar la ventana de balanceo.
Obtén más información
Para obtener más tutoriales y procedimientos de fragmentación, consulte estas páginas: