(Last Updated On: January 5, 2019)

In this guide, we will cover the steps to install MongoDB 4 on RHEL 8 / CentOS 8. MongoDB is an open source NoSQL database system written in C++ designed to ensure scalability, high performance, and availability.

MongoDB common use case is storage and management of Big Data-sized collections of literal documents like text documents, email messages, XML documents, and many others.

Install MongoDB 4 on RHEL 8 / CentOS 8

MongoDB 4 is available on MongoDB yum repository. Add the repository to your RHEL 8 server by running below commands:

cat >/etc/yum.repos.d/mongodb-org-4.0.repo<<EOF
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF

You need to run the commands above as root user. Once the repo has been added, install mongodb-org package.

$ sudo yum install mongodb-org
Updating Subscription Management repositories.
Updating Subscription Management repositories.
MongoDB Repository 1.7 kB/s | 7.2 kB 00:04
Last metadata expiration check: 0:00:01 ago on Sat 05 Jan 2019 11:48:23 AM EAT.
Dependencies resolved.
Package Arch Version Repository Size
Installing:
mongodb-org x86_64 4.0.5-1.el7 mongodb-org-4.0 5.8 k
Installing dependencies:
mongodb-org-mongos x86_64 4.0.5-1.el7 mongodb-org-4.0 12 M
mongodb-org-server x86_64 4.0.5-1.el7 mongodb-org-4.0 21 M
mongodb-org-shell x86_64 4.0.5-1.el7 mongodb-org-4.0 13 M
mongodb-org-tools x86_64 4.0.5-1.el7 mongodb-org-4.0 32 M
make x86_64 1:4.2.1-9.el8 rhel-8-for-x86_64-baseos-beta-rpms 498 k
compat-openssl10 x86_64 1:1.0.2o-3.el8 rhel-8-for-x86_64-baseos-beta-rpms 1.1 M
Transaction Summary
Install 7 Packages
Total download size: 80 M
Installed size: 247 M
Is this ok [y/N]: y

The installation of the above package will install the following dependency packages:

mongodb-org-server – This provides MongoDB daemon mongod
mongodb-org-mongos – This is a MongoDB Shard daemon
mongodb-org-shell – This provides a shell to MongoDB
mongodb-org-tools – MongoDB tools used for export, dump, import e.t.c

You can verify installation of above packages, e.g.

$ rpm -qi mongodb-org-server 
Name : mongodb-org-server
Version : 4.0.5
Release : 1.el7
Architecture: x86_64
Install Date: Sat 05 Jan 2019 11:58:55 AM EAT
Group : Applications/Databases
Size : 62410848
License : AGPL 3.0
Signature : RSA/SHA1, Wed 19 Dec 2018 10:14:04 PM EAT, Key ID 68818c72e52529d4
Source RPM : mongodb-org-4.0.5-1.el7.src.rpm
Build Date : Wed 19 Dec 2018 10:09:03 PM EAT
Build Host : ip-10-122-20-146.ec2.internal
Relocations : /usr
URL : http://www.mongodb.org
Summary : MongoDB database server
Description :
MongoDB is built for scalability, performance and high availability, scaling from single server deployments to large, complex multi-site architectures. By leveraging in-memory computing, MongoDB provides high performance for both reads and writes. MongoDB’s native replication and automated failover enable enterprise-grade reliability and operational flexibility.
MongoDB is an open-source database used by companies of all sizes, across all industries and for a wide variety of applications. It is an agile database that allows schemas to change quickly as applications evolve, while still providing the functionality developers expect from traditional databases, such as secondary indexes, a full query language and strict consistency.
MongoDB has a rich client ecosystem including hadoop integration, officially supported drivers for 10 programming languages and environments, as well as 40 drivers supported by the user community.
MongoDB features:
JSON Data Model with Dynamic Schemas
Auto-Sharding for Horizontal Scalability
Built-In Replication for High Availability
Rich Secondary Indexes, including geospatial
TTL indexes
Text Search
Aggregation Framework & Native MapReduce
This package contains the MongoDB server software, default configuration files, and systemd service files.

Configure MongoDB on RHEL 8

When the packages are installed, you can start customizing and configuring MongoDB before starting the service.

Label MongoDB port

If you have SELinux in enforcing mode, you may need to label port 27017

sudo semanage port -a -t mongod_port_t -p tcp 27017

Allow mongo port on the firewall

If you have firewalld running on your server and would like MongoDB service to be accessible over the network, open it on the firewall:

sudo firewall-cmd --add-port=27017/tcp --permanent
sudo firewall-cmd --reload

You can also limit access based on source address

sudo firewall-cmd --permanent --add-rich-rule "rule family="ipv4" \
source address="10.10.20.0/24" port protocol="tcp" port="27017" accept"

Use secondary disk for MongoDB data

You can always use a dedicated disk / virtual disk to store MongoDB data. This can be configured like below

Step 1: Partition secondary disk for MongoDB data:

# lsblk  | grep vdb
vdb 252:16 0 50G 0 disk

Step 2: Create a GPT partition table for the secondary disk, it can be more than onde disk

sudo parted -s -a optimal -- /dev/vdb mklabel gpt
sudo parted -s -a optimal -- /dev/vdb mkpart primary 0% 100%
sudo parted -s -- /dev/vdb align-check optimal 1

Step 3: Create LVM volume, this will make it easy to extend the partition

sudo pvcreate  /dev/vdb1
sudo vgcreate vg11 /dev/vdb1
sudo lvcreate -n data -l 100%FREE vg11

Step 4: Create XFS filesystem on the Logical Volume created

sudo mkfs.xfs /dev/mapper/vg11-data

Step 5: Create a mount point and mount the partition

echo "/dev/mapper/vg11-data /data xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mkdir /data
sudo mount -a

Step 6: Create a folder for MongoDB data

sudo mkdir /data/mongo
sudo chown -R mongod:mongod /data/mongo
sudo chmod -R 775 /data/mongo

Step 7: Confirm that the partition mount was successful:

df -hT | grep  /data/mongo

Step 8: Change MongoDB data store location on /etc/mongod.conf

storage:
dbPath: /data/mongo 
journal:
  enabled: true

Start MongoDB Service

When all is set, start and set mongod service to start on boot.

sudo systemctl enable --now mongod

If the service was started successfully, it should show running status.

$ systemctl status mongod.service 
● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2019-01-05 12:12:28 EAT; 4s ago
Docs: https://docs.mongodb.org/manual
Process: 2163 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
Process: 2161 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 2160 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 2158 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Main PID: 2166 (mongod)
Memory: 70.1M
CGroup: /system.slice/mongod.service
└─2166 /usr/bin/mongod -f /etc/mongod.conf
Jan 05 12:12:27 localhost.localdomain systemd[1]: Starting MongoDB Database Server…
Jan 05 12:12:27 localhost.localdomain mongod[2163]: about to fork child process, waiting until server is ready for connections.
Jan 05 12:12:27 localhost.localdomain mongod[2163]: forked process: 2166
Jan 05 12:12:28 localhost.localdomain mongod[2163]: child process started successfully, parent exiting
Jan 05 12:12:28 localhost.localdomain systemd[1]: Started MongoDB Database Server.

For Authentication, check our guide on How to configure MongoDB 4 authentication.