I followed the following guide to create a MongoDB replica-set on a single RHEL 8 VM. I used following commands as mentioned in that guide.
sudo mkdir -p /usr/local/var/mongodb/pki/
sudo su
openssl rand -base64 741 > /usr/local/var/mongodb/pki/replicaset-keyfile
chmod 400 /usr/local/var/mongodb/pki/replicaset-keyfile
Then, I created a node1.conf as described below.
storage:
  dbPath: /usr/local/var/mongodb/node1
net:
  bindIp: localhost
  port: 27011
security:
  authorization: enabled
  keyFile: /usr/local/var/mongodb/pki/replicaset-keyfile
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/node1/mongod.log
  logAppend: true
processManagement:
  fork: true
replication:
  replSetName: replicaset-example
After that I used following commands as instructed in the guide.
sudo mkdir -p /usr/local/var/mongodb/node1
sudo mkdir -p /usr/local/var/log/mongodb/node1
I did exactly the same thing for node2 and node3 as well.
Next step in that guide was sudo mongod -f node1.conf which didn't work because mongod hadn't been installed on the system. Therefore, I installed mongod using yum.
After this, the above command worked and I was able to configure a MongoDB replica-set on those three nodes.
However, after restarting the machine port 27011 was no longer active and I couldn't access the replica-set. Default port 27017 (which is mentioned in the config file created on mongodb yum installation) is active and I'm able to use MongoDB on that.
sudo mongod -f node1.conf (node2 and node3 as well), allows me to enter to the replica-set again. However, this has to be repeated after each shutdown.
How can I run the replica-set as a normal mongod service(s)?. A guide which would point me in the correct direction is also appreciated.
**Update
I tried adding a new service as guided in the below answer. However, I get this error.
Apr 12  localhost.localdomain systemd[1]: mongod_node2.service: Control process exited, code=dumped status=6
Apr 12 localhost.localdomain systemd[1]: mongod_node2.service: Failed with result 'core-dump'.
I changed Environment and PIDFile variables as instructed. Also, changed the ownership of the keyfile. I tried with and without adding ExecStartPre parts. Still the result is the same. I believe there couldn't be an issue with node1.conf file as it works fine with sudo mongod -f node1.conf command.
                        
First something general: You run all mongod processes on a single machine. In this case you need to set also the
processManagement.pidFilePath, e.g.otherwise all processes will use the same default file
/var/run/mongodb/mongod.pidand you have a conflict.Now, regarding your actual question:
Install it as a service. The easiest way is to check the existing service like this:
Make a copy of
/usr/lib/systemd/system/mongod.serviceto/etc/systemd/system/mongod_node1.serviceEdit the copied file and change it according to your preferences. Mainly you need to change lines
to
adding these lines would be also useful:
Then you can enable the service with
For manual start (if required) use
systemctl start mongod_node1Just some notes:
Do not edit service file
/usr/lib/systemd/system/mongod.servicedirectly. If you run an update of your MongoDB package, then the installer will revert the file to default.MongoDB is running under user
mongod, thus you must also change the ownership of the keyfile: