Puntos clave: Configurar un clúster MongoDB implica instalar un servidor de configuración, un router de consultas y un servidor de fragmentos. El proceso incluye configurar cada servidor, asegurar una red adecuada y habilitar el fragmentado para la distribución de datos. Los pasos clave incluyen editar archivos de configuración, iniciar servicios y comprobar registros en busca de errores. Para instrucciones detalladas, siga los pasos proporcionados y los enlaces a recursos adicionales de MongoDB.
- Instala el servidor de configuración, el router de consultas y el servidor de shards.
- Permite el fragmentado para la distribución de datos a través del clúster.
Aquí mostramos cómo configurar un clúster de MongoDB. En la publicación anterior mostramos cómo instalarlo en una sola máquina.
Hay tres piezas son instala:
- Servidor de configuración
- Enrutador de consulta
- Servidor Shard, es decir, base de datos
Mirando el diagrama de abajo, el proceso mongos funciona como un router, lo que significa que indica a los clientes dónde buscar datos. Los datos están distribuidos por el clúster según el intercambio. El sharding están la asignación de registros a los servidores en función del valor hashado de algún índice. El servidor de configuración contiene información de configuración.
Servidor de configuración
Instala MongoDB
Técnicamente, Haz un MongoDB un clúster significa simplemente tres capas de la arquitectura MongoDB como procesos separados. te podría hacer esto con fines académicos en una sola máquina. Pero aquí utiliza dos.
Vamos a instalar el router y los servidores de configuración en 172.31.46.15 y el servidor de fragmentos en 172.31.47.43. Para simplificar, llamemos al primer servidor servidor de configuración y al segundo servidor servidor de base de datos.
No utilices apt-get para instalar MongoDB, ya que normalmente no están la versión actual. En su lugar, sigue los pasos siguientes. Ten en cuenta que esto instala mongod (servidor de configuración y shard), mongos (router) y cliente mongo como tres paquetes separados.
Abre los puertos del firewall 27017, 27018 y 27019 entre los dos servidores.
te necesitan los tres paquetes en el servidor de configuración pero solo mongodb-org-server en el servidor de base de datos. En Ubuntu, instala así.
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-server_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-server_4.0.5_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-shell_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-shell_4.0.5_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-mongos_4.0.5_amd64.deb
sudo dpkg -i mongodb-org-mongos_4.0.5_amd64.deb
Ten en cuenta que si te fallas en algún paso, elimina el servidor y luego borra la biblioteca de archivos de datos, /var/lib/mongodb. Si te no borras los archivos de datos al reinstalar te el software, mantendrá la configuración anterior y así restaurará cualquier error te cometido.
Inicia sesión en el servidor de configuración.
Para configurar los tres servidores repetiremos los mismos 4 pasos en cada servidor:
- Editar archivo de configuración
- Comienza del proceso
- Revisa el registro en busca de errores
- Inicia sesión en la shell para hacer más configuraciones
Ahora, en el servidor de configuración edita el archivo de configuración. Nota, para simplificar, Haz que cada archivo de configuración tenga un nombre descriptivo:
Inicia sesión en el servidor de configuración.
sudo vim /etc/mongodConfig.conf
Pega el texto a continuación. Primero, explicamos algunos de los campos:
Ruta: /var/log/mongodb/mongodConfig.log |
Para cada proceso le damos un nombre al registro que deja claro para qué proceso está. |
puerto: 27019 bindIp: 172.31.46.15 |
Por defecto, el servidor de configuración funcionará en el puerto 2019 en una configuración clusterizada. Aquí lo Haz explícito, así que no es necesario recordarlo. Además, la dirección IP está sin loopback. Eso están para que otros servidores puedan encontrar ese servidor. |
sharding: clusterRole: configsvr |
Sharding significa distribuir datos según algún esquema de hash. Aquí le decimos a MongoDB que este servidor es un servidor de configuración, en lugar de un servidor compartido. |
replicación: replNombreEstablecer: ConfigReplSet |
Esto significa replicar estos datos de configuración. Nosotros utilizamos funciones rs.() para añadir otras réplicas. Podemos utilizar cualquier nombre. |
Pega este texto en /etc/mongodConfig.conf:
Comienza el proceso:
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongodConfig.log
net:
port: 27019
bindIp: 172.31.46.15
sharding:
clusterRole: configsvr
replication:
replSetName: ConfigReplSet
Comienza el proceso:
sudo mongod --config /etc/mongodConfig.conf&
Revisa los registros en busca de errores:
sudo tail -100 /var/log/mongodb/mongodConfig.log
Inicia sesión en la carcasa:
mongo 172.31.46.15:27019
Activa la replicación con rs.initiate() y comprueba el estado con rs.status(). Fíjate que están detectados el nombre del conjunto de replicaciones que configuramos en el archivo de configuración, ConfigReplSet.
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "172.31.46.15:27019",
"ok" : 1,
"operationTime" : Timestamp(1548598138, 1),
"$gleStats" : {
"lastOpTime" : Timestamp(1548598138, 1),
"electionId" : ObjectId("000000000000000000000000")
},
"lastCommittedOpTime" : Timestamp(0, 0),
"$clusterTime" : {
"clusterTime" : Timestamp(1548598138, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
ConfigReplSet:SECONDARY> rs.status()
{
"set" : "ConfigReplSet",
Configura el router de consultas
Edita el archivo de configuración:
sudo vim /etc/mongoRouter.conf
Pega el texto a continuación. Aviso:
configDB: ConfigReplSet/172.31.46.15:27019 |
Esto indica al router de consulta dónde encontrar el servidor de configuración y sus conjuntos de réplica. |
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongoRouter.log
net:
port: 27017
bindIp: 172.31.46.15
sharding:
configDB: ConfigReplSet/172.31.46.15:27019
Comienza el servicio. Fíjate en la s en mongos. Este es el proceso del router de consultas.
sudo mongos --config /etc/mongoRouter.conf&
Revisa el registro y busca errores:
mongo 172.31.46.15:27017
Configura Shard
Inicia sesión en el servidor de bases de datos.
sudo vim /etc/mongodShard.conf
Pega el texto a continuación. Fíjate en que:
Comienza el proceso.
clusterRole: shardsvr |
Significa que será un servidor de fragmentos, en lugar de un servidor de configuración. |
replNombreDeConjunto: ShardReplSet |
Esto significa replicar los datos. En el servidor de configuración le dijimos que replicara la configuración. |
puerto: 27018 |
Por defecto, los servidores shard funcionan en el puerto 27018. Así que lo Haz explícito para no tener que recordarlo. |
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongodShard.log
net:
port: 27018
bindIp: 172.31.47.43
sharding:
clusterRole: shardsvr
replication:
replSetName: ShardReplSet
Comienza el proceso.
sudo mongod --config /etc/mongodShard.conf&
Revisa el registro por si hay errores.
Inicia sesión en la carcasa.
sudo tail -f /var/log/mongodb/mongodShard.log
Inicia sesión en la carcasa.
mongo 172.31.47.43:2018
Activa las replicaciones con rs.initiate() y luego comprueba el estado con rs.status(). Fíjate en el nombre ShardReplSet. Podríamos utilizar cualquier nombre siempre que utilizemos el mismo nombre en todos los shards del clúster.
rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "172.31.47.43:27018",
"ok" : 1,
"operationTime" : Timestamp(1548602253, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602253, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
ShardReplSet:SECONDARY> rs.status()
{
"set" : "ShardReplSet",
Añadir fragmento al clúster
Vuelve al servidor de configuración y conéctate al router:
mongo 172.31.46.15:27017
Pega todos los siguientes comandos en la carcasa:
sh.addShard( "ShardReplSet/172.31.47.43:27018")
{
"shardAdded" : "ShardReplSet",
"ok" : 1,
"operationTime" : Timestamp(1548602529, 4),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602529, 4),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Crea una base de datos llamada libros y luego Permite el sharding.
use books
switched to db books
sh.enableSharding("books")
{
"ok" : 1,
"operationTime" : Timestamp(1548602601, 6),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602601, 6),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Crea una colección.
db.createCollection("collection")
{
"ok" : 1,
"operationTime" : Timestamp(1548602659, 5),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602659, 5),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Crea un índice. Indexaremos el campo isbn en orden descendente.
Añade un registro.
db.collection.createIndex( { isbn: -1 } )
{
"raw" : {
"ShardReplSet/172.31.47.43:27018" : {
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
},
"ok" : 1,
"operationTime" : Timestamp(1548602670, 9),
"$clusterTime" : {
"clusterTime" : Timestamp(1548602670, 9),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Añade un registro.
db.collection.insertOne( { isbn: 100 } )
{
"acknowledged" : true,
"insertedId" : ObjectId("5c4dcd69e83741cb900b46f8")
}
Activa el fragmento para la colección.
sh.shardCollection("books.collection", { isbn : "hashed" } )
{
"collectionsharded" : "books.collection",
"collectionUUID" : UUID("0d10320b-3086-472e-a3ac-4be67fae21f9"),
"ok" : 1,
"operationTime" : Timestamp(1548603537, 12),
"$clusterTime" : {
"clusterTime" : Timestamp(1548603537, 12),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
Ahora verifica que los datos están distribuidos entre clústeres como se muestra a continuación. Por supuesto, solo tenemos un servidor de base de datos, así que solo muestra uno. En otra entrada del blog mostraremos cómo añadir más servidores.
db.collection.getShardDistribution()
Shard ShardReplSet at ShardReplSet/172.31.47.43:27018
data : 0B docs : 0 chunks : 2
estimated data per chunk : 0B
estimated docs per chunk : 0
Totals
data : 0B docs : 0 chunks : 2
Shard ShardReplSet contains NaN% data, NaN% docs in cluster, avg obj size on shard : NaNGiB
Guía de MongoDB
- Resumen de MongoDB: Empezando con MongoDB
- Cómo instalar MongoDB en Ubuntu y Mac
- Creación de una base de datos en MongoDB
- Comandos básicos de MongoDB Shell
- MongoDB Compass: Uso de la interfaz gráfica de Mongo
- Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
- Explicación de los operadores de proyección y proyección de MongoDB
- Explicación de las funciones agregadas de MongoDB
- Ordenación de MongoDB: método y ejemplos de sort()
- Uso de operadores de Push & Pull en MongoDB
- Cómo utiliza MongoDB $unwind
- 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
- Ejemplos de consultas de geolocalización de MongoDB
- Introducción a las transacciones de MongoDB
- Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
- Mejores comandos de MongoDB te necesitas saber
- Replicación de MongoDB: Una introducción completa
- Cómo configurar un clúster de MongoDB
- Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
- MongoDB Atlas: Configuración y uso de MongoDB gestionado
- Cómo ejecutar MongoDB como contenedor Docker
- Uso, gestión y requisitos de memoria de MongoDB
- Cómo utilizar Mongodump para copias de seguridad de MongoDB
- Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
- Cómo utilizar PyMongo
- Cómo utilizar Mongoose para MongoDB y NodeJS
- Chuletas de MongoDB
- MongoDB vs Cassandra: Comparación de bases de datos NoSQL
- PostgreSQL vs MongoDB: Comparando bases de datos
- MySQL vs MongoDB: Comparando bases de datos
- Certificaciones MongoDB: Una introducción
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.