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 se producirá el 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ónValorconfigReplSetconfigsvrlocalhosty luego cualquier otro nombre de host en el que elmongoddeba 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.
Inicie los servidores de configuración
Implemente el
mongodcon la configuración especificada: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 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.
Secure servidor de configuración set de réplicas
Vuelve a configurar y reinicia el set de réplicas del servidor de configuración.
Reconfigura los servidores de configuración
Selecciona la pestaña de tu 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.localhosty luego cualquier otro nombre de host en el que elmongoddeba 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.certificateKeyFilePasswordsi el archivo de clave de certificado TLS está cifrado con una contraseña.Reiniciar MongoDB
Reinicia el
mongodcon la configuración que especificaste: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.
Especifica estas opciones en el
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.
localhosty luego cualquier otro nombre de host en el que elmongosdeba 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
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.localhosty luego cualquier otro nombre de host en el que elmongosdeba 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.
Implementa el mongos.
Implemente el
mongoscon la configuración especificada: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 set de réplicas se ejecuta en estos hosts:
mongodb0.example.net:27017mongodb1.example.net:27017mongodb2.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
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 tu implementación utiliza la autenticación x.509, especifica 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.Conéctese a un secundario.
Utiliza
mongoshpara conectarse a uno de los secundarios.mongosh "mongodb://<username>@<host>:<port>" Apaga 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> Repite los pasos de apagado y reinicio para el otro secundario.
Conéctese a un secundario.
Utiliza
mongoshpara conectarse a uno de los secundarios.Si tu implementación utiliza la autenticación x.509, especifica estas
mongoshopciones:mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Apaga 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> Repite 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 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.
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 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() Apague la versión principal anterior.
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, establezca
sharding.clusterRoleenshardsvr: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 tu implementación utiliza la autenticación x.509, especifica estas
mongoshopciones:Si tu implementación utiliza la autenticación x.509, especifica estas
mongoshopciones:mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Degradar al primario.
Ejecuta el siguiente comando:
rs.stepDown() 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() Apague la versión principal anterior.
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, establezca
sharding.clusterRoleenshardsvr: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 set de réplicas inicial (rs0) en una partición, agrégalo al clúster.
Conéctese a
mongoscomo el usuario administrativo de su clúster.La instancia
mongosse ejecuta 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 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,
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 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.
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
Inicia cada nodo del set de réplicas.
Para cada instancia de
mongoden el set de réplicas, crea un archivo de configuración con las siguientes opciones:OpciónValorLa ruta al archivo clave utilizado para su set de réplicas inicial.
rs1shardsvrlocalhosty luego cualquier otro nombre de host en el que elmongoddeba 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
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.localhosty luego cualquier otro nombre de host en el que elmongoddeba 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
mongodcon la configuración especificada:mongod --config <PATH_TO_CONFIG_FILE> Nota
Cuando especificas la opción
--shardsvrpara una instancia demongod, la instancia se ejecuta en el puerto27018por defecto.Inicia cada nodo del set de réplicas.
Conectar a un miembro del set de réplicas.
Utilice
mongoshpara 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> 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 precedente requiere 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.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.
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].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.
Ejecuta el siguiente método
db.createUser()para crear un usuario llamadors1Admincon el rol deuserAdmin: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 conectarte a
mongos, agrega el set de réplicasrs1como partición al clúster con el métodosh.addShard():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.
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
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 } ) Divida la colección en partició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 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.
Obtén más información
Para más tutoriales y procedimientos sobre particionado, consulta estas páginas: