En este artículo explicaremos cómo instalar MongoDB en CentOS 7 paso a paso, un servicio de bases de datos NoSQL cada vez más popular en el desarrollo web, que podrás hacer funcionar en tu servidor o VPS CentOS en unos instantes.
Contenido
Antes de instalar MongoDB en CentOS 7
Si quieres seguir esta breve guía de instalación de MongoDB en CentOS 7 sólo tienes que comprobar que cumples estos mínimos requerimientos:
- Una instalación actualizada de CentOS 7.
- Acceso a consola con un usuario con permisos de sudo, o el mismo root.
- Conexión a Internet.
Cómo instalar MongoDB en CentOS 7
Si quieres instalar MongoDB en CentOS 7 comprobarás que los únicos paquetes disponibles pertenecen al repositorio EPEL y corresponden a la versión 2.6, bastante obsoletos teniendo en cuenta que las últimas versiones oficiales son las 4.2.x (en el momento de redactar este tutorial).
Por ello es mejor instalar el repositorio oficial de MongoDB en CentOS 7 para tenerlo como fuente de estos paquetes y futuras actualizaciones.
Empezaremos creando un nuevo archivo de repositorio:
~$ sudo nano /etc/yum.repos.d/mongodb.org-4.2.repo
El contenido será el siguiente:
[mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
Guardados los cambios, actualizaremos las listas de paquetes:
~$ sudo yum update
El paquete que necesitamos es mongodb-org, que podemos instalar con yum:
~$ sudo yum install -y mongodb-org
Tras la descarga e instalación del paquete mongodb-org y sus dependencias se crea un nuevo servicio en CentOS 7, mongod.service o mongod, que no queda en ejecución ni tampoco habilitado.
Puedes arrancar por primera vez el servicio mongod con systemctl:
~$ sudo systemctl start mongod
Y si quieres tener el servicio MongoDB siempre disponible y que inicie automáticamente con CentOS 7, lo habilitaremos también con systemctl:
~$ sudo systemctl enable mongod
Puedes comprobar en cualquier momento el estado del servicio MongoDB en CentOS 7 con el comando systemctl status mongod
:
Comprobamos que el servicio está en ejecución, a la espera de conexiones. Podemos conectar localmente usando el cliente de consola mongo:
~$ mongo MongoDB shell version v4.2.1 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("754942ba-b362-413a-9508-04dae156f746") } MongoDB server version: 4.2.1 Server has startup warnings: ... I CONTROL [initandlisten] ... I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. ... I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. ... I CONTROL [initandlisten] ... I CONTROL [initandlisten] ... I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. ... I CONTROL [initandlisten] ** We suggest setting it to 'never' ... I CONTROL [initandlisten] ... I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. ... I CONTROL [initandlisten] ** We suggest setting it to 'never' ... I CONTROL [initandlisten] --- Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring() --- >
Bastante información de golpe, ¿no?
Cómo configurar MongoDB en CentOS 7
La última parte de todo el texto que acabamos de ver al conectar localmente a MongoDB con el cliente habla sobre un servicio que monitoriza nuestra actividad con fines estadísticos y de mejora del producto.
Si quieres activar este servicio, usa el siguiente comando:
> db.enableFreeMonitoring()
Pero si prefieres no activar ese servicio y que no aparezcan más estos avisos e información, lanza este comando:
> db.disableFreeMonitoring()
Cómo desactivar THP o Transparent Huge Pages en CentOS 7
Por otro lado nos econtramos con un par de alertas sobre THP o «Transparent Huge Pages«, en el que los valores de enabled y defrag son ambos always cuando lo recomendable por rendimiento es que fueran never:
~$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
Y:
~$ cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never
Vamos a crear un servicio que desactive estos valores de THP:
~$ sudo nano /etc/systemd/system/disable-thp.service
El contenido será algo como esto:
[Unit] Description=Desactivación de Transparent Huge Pages (THP) [Service] Type=simple ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enable$ [Install] WantedBy=multi-user.target
Ahora haremos que nuestro servicio esté disponible de inmediato:
~$ sudo systemctl daemon-reload
Como cualquier otro servicio podemos iniciarlo manualmente:
~$ sudo systemctl start disable-thp
Para ver si ha funcionado, podemos volver a comprobar los valores de THP:
~$ cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
Y:
~$ cat /sys/kernel/mm/transparent_hugepage/defrag always madvise [never]
Efectivamente, se han desactivado estos valores.
Para que MongoDB actulice esta información es necesario reiniciar el servicio mongod:
~$ sudo systemctl restart mongod
Podremos comprobar que el servicio ya no nos lanza estas alertas al iniciar la conexión:
~$ mongo MongoDB shell version v4.2.1 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("7dbb8058-ab5d-4de5-a19b-1202b8481332") } MongoDB server version: 4.2.1 Server has startup warnings: ... I CONTROL [initandlisten] ... I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. ... I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. ... I CONTROL [initandlisten] >
Si la máquina CentOS 7 va a hacer un uso intensivo y permanente de MongoDB, entonces será buena idea habilitar el servicio que desactiva THP:
~$ sudo systemctl enable disable-thp
Acceso remoto a MongoDB en CentOS 7
Para acceder remotamente al servicio MongoDB en CentOS 7 debemos editar la configuración del servicio:
~$ sudo nano /etc/mongod.conf
Buscaremos la directiva bindIp (importan las mayúsculas):
... bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. ...
Tal y como describe el comentario, sustituyendo el valor 127.0.0.1 por 0.0.0.0 dejará de ser un servicio local para convertirse en un servicio al que pueda conectarse remotamente:
... bindIp: 0.0.0.0 ...
Guardados los cambios, habrá que reiniciar el servicio mongod:
~$ sudo systemctl restart mongod
Cómo configurar el firewall de CentOS 7 para MongoDB
Si tienes activado el firewall de CentOS 7, como ocurre por defecto, necesitarás añadir una regla para el puerto 27017 TCP en el que espera conexiones MongoDB:
~$ sudo firewall-cmd --permanent --add-service=mongodb
Aplicamos los cambios recargando la configuración del firewall:
~$ sudo firewall-cmd --reload
Ahora podremos conectar desde otro sistema que tenga instalado el cliente mongo añadiendo como parámetro la dirección de la máquina CentOS 7 en la que hemos instalado el servicio MongoDB.
Conclusión
Ahora que sabes cómo instalar y configurar MongoDB en CentOS 7 ya puedes empezar a trabajar con este servicio de bases de datos NoSQL en tu servidor o VPS.
Si te ha surgido alguna duda, pregunta, sugerencia, etc. puedes dejar un comentario.
¡Apoya este sitio!
¿Ya tienes el servicio funcionando gracias a esta guía de instalación y configuración de MongoDB en CentOS 7? Si es así y te apetece agradecérnoslo, cualquier mínima contribución ayuda al mantenimiento de este sitio y creación de nuevos tutoriales de CentOS 7 y MongoDB. ¡Gracias!