Cómo configurar un clúster de MongoDB

Cómo configurar un clúster de MongoDB

  • ITOps y DevOps
5 min de lectura Actualizado Mar 6, 2019

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:

  1. Servidor de configuración
  2. Enrutador de consulta
  3. 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:

  1. Editar archivo de configuración
  2. Comienza del proceso
  3. Revisa el registro en busca de errores
  4. 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

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.