Los clústeres fragmentados dividen los datos entre varios servidores en función de un Clave de fragmento. Un clúster fragmentado escala mejor que un conjunto de réplicas para implementaciones con grandes conjuntos de datos y operaciones de alto rendimiento.
Este tutorial convierte un único set de réplicas de tres nodos en un clúster con dos particiones. Cada partición en el nuevo clúster es un set de réplicas independiente de tres nodos.
Puede convertir a un clúster en la Interfaz de Usuario para las implementaciones alojadas en MongoDB Atlas.
Acerca de esta tarea
Algunos pasos en este tutorial provocarán tiempo de inactividad en su implementación. En cada paso individual se indica cuándo ocurrirá el tiempo de inactividad.
Este tutorial es para implementaciones que tienen la autenticación activada.
En este tutorial, especificará la configuración del servidor mediante archivos de configuración. Los archivos de configuración contienen configuraciones equivalentes a las de...
mongodymongosopciones de línea de comando.El clúster fragmentado que implementa con este tutorial contiene diez servidores:
Un servidor para el
mongos.Tres servidores para cada uno de los dos fragmentos del clúster (seis servidores en total).
Tres servidores para el set de réplicas del servidor de configuración.
Importante
No agregue árbitros a sus conjuntos de réplicas durante el proceso de conversión. Los árbitros cambian la preocupación de escritura predeterminada implícita de {w: majority} a {w: 1}.
Arquitectura de servidor
Este tutorial utiliza los siguientes servidores:
Nombre del host | Puerto | Descripción |
|---|---|---|
|
| Nodo de la partición inicial portadora de datos, |
|
| Nodo de la partición inicial portadora de datos, |
|
| Nodo de la partición inicial portadora de datos, |
|
| Nodo de la segunda partición que contiene datos, |
|
| Nodo de la segunda partición que contiene datos, |
|
| Nodo de la segunda partición que contiene datos, |
|
|
|
|
| Miembro del conjunto de réplicas del servidor de configuración. |
|
| Miembro del conjunto de réplicas del servidor de configuración. |
|
| Miembro del conjunto de réplicas del servidor de configuración. |
Los nombres de host utilizados en este tutorial son ejemplos. Reemplaza los nombres de host usados en los comandos de ejemplo por los nombres de host usados en las implementaciones.
Importante
Para evitar actualizaciones de configuración debido a cambios en las direcciones IP, utilice nombres de host DNS en lugar de direcciones IP. Es particularmente importante usar un nombre de host DNS en lugar de una dirección IP al configurar miembros de set de réplicas o miembros de clústeres particionados.
Utiliza nombres de host en lugar de direcciones IP para configurar clústeres en un horizonte de red dividido. A partir de MongoDB 5.0, los nodos que solo están configurados con una dirección IP no pasan la validación de inicio y no se inician.
Antes de comenzar
Para completar este tutorial, debe tener un set de réplicas que utilice autenticación por archivo de claves o un certificado X.509. Para implementar un set de réplicas seguro que utiliza uno de estos métodos de autenticación, consulte cualquiera de los siguientes:
Este tutorial usa los directorios de datos por defecto
/data/dby/data/configdb. Para utilizar diferentes rutas, configure el ajustestorage.dbPathen su archivo de configuración.MongoDB admite la transición en línea desde un set de réplicas a un clúster de 1 partición al permitir que los comandos se ejecuten directamente contra una partición. Sin embargo, una vez que el clúster tiene más de una partición, solo los comandos enumerados se pueden ejecutar directamente en el fragmento sin el rol exclusivo de mantenimiento
directShardOperations.
Pasos
Nota
A partir de MongoDB 8.0, solo puedes ejecutar ciertos comandos en nodos de clústeres fragmentados. Si intentas conectarte directamente a un nodo y ejecutar un comando no compatible, MongoDB devuelve un error:
"You are connecting to a sharded cluster improperly by connecting directly to a shard. Please connect to the cluster via a router (mongos)."
Para ejecutar un comando de base de datos no compatible directamente contra un nodo en un clúster fragmentado, debes conectarte a mongos o tener el rol de solo mantenimiento directShardOperations.
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,<ipaddress> 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
Se debe ejecutar
rs.initiate()en una sola instanciamongodpara el set 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,<ipaddress> 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 vincular su instancia a una dirección IP pública, debe proteger su clúster contra accesos no autorizados. Para obtener una lista completa de recomendaciones de seguridad, consulte la Lista de verificación de seguridad para implementaciones autogestionadas. Como mínimo, considere habilitar 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,<ipaddress> 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,<ipaddress> 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,<ipaddress> 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.
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,<ipaddress> 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,<ipaddress> 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.
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,<ipaddress> 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,<ipaddress> 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" )
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.
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.
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,<ipaddress> 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,<ipaddress> 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
Se debe ejecutar
rs.initiate()en una sola instanciamongodpara el set 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: