Cómo instalar MongoDB en CentOS 7

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.

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:

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 5.0.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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo nano /etc/yum.repos.d/mongodb.org-5.0.repo
~$ sudo nano /etc/yum.repos.d/mongodb.org-5.0.repo
~$ sudo nano /etc/yum.repos.d/mongodb.org-5.0.repo

El contenido será el siguiente:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[mongodb-org-5.0]
name=Repositorio de MongoDB para CentOS 7
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
[mongodb-org-5.0] name=Repositorio de MongoDB para CentOS 7 baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
[mongodb-org-5.0]
name=Repositorio de MongoDB para CentOS 7
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

Guardados los cambios, actualizaremos las listas de paquetes:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo yum update
~$ sudo yum update
~$ sudo yum update

El paquete que necesitamos es mongodb-org, que podemos instalar con yum:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo yum install -y mongodb-org
~$ sudo yum install -y mongodb-org
~$ 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 aunque sí está habilitado para iniciar automáticamente con el arranque del sistema.

Puedes arrancar por primera vez el servicio mongod con systemctl:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo systemctl start mongod
~$ sudo systemctl start mongod
~$ sudo systemctl start mongod

Y si no quieres tener el servicio siempre disponible, es decir, que no inicie automáticamente con CentOS 7, lo podrías deshabilitar también con systemctl:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo systemctl disable mongod
~$ sudo systemctl disable mongod
~$ sudo systemctl disable mongod

Puedes comprobar en cualquier momento el estado del servicio MongoDB en CentOS 7 con el comando

systemctl status mongod
systemctl status mongod:

como instalar mongodb en centos 7

Comprobamos que el servicio está en ejecución, a la espera de conexiones. Podemos conectar localmente usando el cliente de consola mongosh:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ mongosh
Current Mongosh Log ID: 62583f87924276f5fd5a8050
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1
Using MongoDB: 5.0.7
Using Mongosh: 1.3.1
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting:
###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
###: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
###: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
------
test>
~$ mongosh Current Mongosh Log ID: 62583f87924276f5fd5a8050 Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1 Using MongoDB: 5.0.7 Using Mongosh: 1.3.1 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy). You can opt-out by running the disableTelemetry() command. ------ The server generated these startup warnings when booting: ###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted ###: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' ###: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never' ------ test>
~$ mongosh
Current Mongosh Log ID: 62583f87924276f5fd5a8050
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1
Using MongoDB:          5.0.7
Using Mongosh:          1.3.1

For mongosh info see: https://docs.mongodb.com/mongodb-shell/


To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.

------
   The server generated these startup warnings when booting:
   ###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
   ###: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
   ###: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
------

test>

cliente mongosh de mongodb en centos 7

Bastante información de golpe, ¿no?

Cómo configurar MongoDB en CentOS 7

Parte del texto que acabamos de ver al conectar localmente a MongoDB con el cliente habla sobre un servicio de telemetría que monitoriza nuestra actividad con fines estadísticos y de mejora del producto.

Si quieres desactivar este servicio, usa el siguiente comando:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
> disableTelemetry()
> disableTelemetry()
> disableTelemetry()

Podemos cerrar la conexión:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
> exit
> exit
> exit

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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
~$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
~$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

Y:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
~$ cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never
~$ cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

Vamos a editar la configuración del servicio para desactivar estos valores de THP en Fedora 35 antes de iniciar MongoDB:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo nano /usr/lib/systemd/system/mongod.service
~$ sudo nano /usr/lib/systemd/system/mongod.service
~$ sudo nano /usr/lib/systemd/system/mongod.service

Buscamos la parte de las directivas ExecStart, que será algo como esto:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
...
[Service]
...
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
...
... [Service] ... ExecStart=/usr/bin/mongod $OPTIONS ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb ...
...
[Service]
...
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
...

Y añadimos una nueva sentencia ExecStartPre:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
...
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/ena$
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
...
... ExecStart=/usr/bin/mongod $OPTIONS ExecStartPre=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/ena$ ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb ...
...
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/ena$
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
...

Guardamos y cerramos el archivo. Ahora debemos hacer que Systemd quede al corriente de los cambios que acabamos de realizar:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo systemctl daemon-reload
~$ sudo systemctl daemon-reload
~$ sudo systemctl daemon-reload

Ya podemos reiniciar el servicio MongoDB:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo systemctl restart mongod
~$ sudo systemctl restart mongod
~$ sudo systemctl restart mongod

Para ver si ha funcionado, podemos volver comprobar el valor de THP:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
~$ cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

Efectivamente, se han desactivado estos valores.

Podremos comprobar que el servicio ya no nos lanza estas alertas al iniciar la conexión:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ mongosh
Current Mongosh Log ID: 6258426e96de8049208c5875
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1
Using MongoDB: 5.0.7
Using Mongosh: 1.3.1
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
------
The server generated these startup warnings when booting:
###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------
test>
~$ mongosh Current Mongosh Log ID: 6258426e96de8049208c5875 Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1 Using MongoDB: 5.0.7 Using Mongosh: 1.3.1 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ ------ The server generated these startup warnings when booting: ###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted ------ test>
~$ mongosh
Current Mongosh Log ID: 6258426e96de8049208c5875
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.3.1
Using MongoDB:          5.0.7
Using Mongosh:          1.3.1

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting:
   ###: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

test>

Acceso con contraseña a MongoDB en CentOS 7

Puede que te interese disponer de usuarios que accedan con contraseña al servicio MongoDB. Si es así debemos activar la autenticación en mongod.conf:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo nano /etc/mongod.conf
~$ sudo nano /etc/mongod.conf
~$ sudo nano /etc/mongod.conf

Buscamos la directiva security:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
...
#security:
...
... #security: ...
...
#security:
...

Está desactivada, así que la activaremos eliminando el carácter # al inicio de línea y a continuación añadiremos una subdirectiva authorization:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
...
security:
authorization: enabled
...
... security: authorization: enabled ...
...
security:
  authorization: enabled
...

No utilices tabulaciones en el archivo mongod.conf, ya que provocarán errores. En su lugar, utiliza espacios en blanco.

Guardamos los cambios, cerramos el archivo y reiniciamos el servicio MongoDB:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo systemctl restart mongod
~$ sudo systemctl restart mongod
~$ sudo systemctl restart mongod

Conectamos de nuevo al servicio con el cliente mongosh:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ mongosh
~$ mongosh
~$ mongosh

Conectamos a la base de datos admin:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
> use admin
> use admin
> use admin

Y creamos un usuario con contraseña y rol de administración:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
> db.createUser({user: "instalador", pwd: "XXXXXXXX", roles: [{role: "root", db: "admin"}]})
> db.createUser({user: "instalador", pwd: "XXXXXXXX", roles: [{role: "root", db: "admin"}]})
> db.createUser({user: "instalador", pwd: "XXXXXXXX", roles: [{role: "root", db: "admin"}]})

Ya podemos salir del cliente:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
> exit
> exit
> exit

Ahora, si accedemos con el usuario que acabamos de crear, se nos solicita la contraseña:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ mongosh -u instalador
Enter password: ********
...
>
~$ mongosh -u instalador Enter password: ******** ... >
~$ mongosh -u instalador
Enter password: ********
...
>

Acceso remoto a MongoDB en CentOS 7

Para acceder remotamente al servicio MongoDB en CentOS 7 debemos editar la configuración del servicio:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo nano /etc/mongod.conf
~$ sudo nano /etc/mongod.conf
~$ sudo nano /etc/mongod.conf

Buscaremos la directiva bindIp (importan las mayúsculas):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
...
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.
...
... 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. ...
...
  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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
...
bindIp: 0.0.0.0
...
... bindIp: 0.0.0.0 ...
...
  bindIp: 0.0.0.0
...

Guardados los cambios, habrá que reiniciar el servicio mongod:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo systemctl restart mongod
~$ sudo systemctl restart mongod
~$ sudo systemctl restart mongod

Cómo configurar el firewall

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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo firewall-cmd --permanent --add-service=mongodb
~$ sudo firewall-cmd --permanent --add-service=mongodb
~$ sudo firewall-cmd --permanent --add-service=mongodb

Aplicamos los cambios recargando la configuración del firewall:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ sudo firewall-cmd --reload
~$ sudo firewall-cmd --reload
~$ sudo firewall-cmd --reload

Ahora podremos conectar desde otro sistema que tenga instalado el cliente mongosh añadiendo como parámetro la dirección de la máquina CentOS 7 en la que hemos instalado el servicio MongoDB, e indicando también el usuario con el que vamos a conectar:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
~$ mongosh --host centos7.local.lan -u instalador
~$ mongosh --host centos7.local.lan -u instalador
~$ mongosh --host centos7.local.lan -u instalador

como configurar mongodb en centos 7

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 en tu sistema gracias a nuestra pequeña guía de instalación y configuración? Si es así y te apetece agradecérnoslo puedes hacerlo dejando tan solo 1 $ de propina en PayPal para una CocaCola:

O, si te sientes especialmente agradecido, puedes invitarnos a un café:

¡Gracias!

Valora esta entrada

5/5 - (3 votos)

Deja un comentario