MongoDB 单机集群 - RHEL8

MongoDB cluster on a single machine - RHEL8

我按照以下 guide 在单个 RHEL 8 VM 上创建了一个 MongoDB 副本集。我使用了该指南中提到的以下命令。

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

然后,我创建了一个 node1.conf,如下所述。

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

之后,我按照指南中的说明使用了以下命令。

sudo mkdir -p /usr/local/var/mongodb/node1
sudo mkdir -p /usr/local/var/log/mongodb/node1

我对 node2node3 也做了同样的事情。

该指南的下一步是 sudo mongod -f node1.conf,但它不起作用,因为 mongod 尚未安装在系统上。因此,我使用 yum.

安装了 mongod

在此之后,上面的命令起作用了,我能够在这三个节点上配置一个 MongoDB 副本集。 然而,重启后机器端口 27011 不再活跃,我无法访问副本集。默认端口 27017(在 mongodb yum 安装时创建的配置文件中提到)是活动的,我可以在上面使用 MongoDB。

sudo mongod -f node1.conf(node2 和 node3 也是如此),允许我再次进入副本集。但是,每次关机后都必须重复此操作。

如何 运行 将副本集作为普通的 mongod 服务?。也感谢能为我指明正确方向的指南。

**更新

我尝试按照以下答案中的指导添加新服务。但是,我收到此错误。

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'.

我按照说明更改了 EnvironmentPIDFile 变量。此外,更改了密钥文件的所有权。我尝试添加和不添加 ExecStartPre 部分。结果还是一样。我相信 node1.conf 文件不会有问题,因为它可以与 sudo mongod -f node1.conf 命令一起正常工作。

首先是一般性的:您 运行 所有 mongod 进程都在一台机器上。在这种情况下,您还需要设置 processManagement.pidFilePath,例如

processManagement:
  pidFilePath: /var/run/node1/mongod.pid

否则所有进程将使用相同的默认文件/var/run/mongodb/mongod.pid并且您会发生冲突。

现在,关于您的实际问题:

将其安装为服务。最简单的方法是像这样检查现有服务:

$ systemctl status mongod
● mongod.service - MongoDB Database Server
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.mongodb.org/manual

复制 /usr/lib/systemd/system/mongod.service/etc/systemd/system/mongod_node1.service

编辑复制的文件并根据您的喜好进行更改。主要是你需要换行

Environment="OPTIONS=-f /etc/mongod.conf"
PIDFile=/var/run/mongodb/mongod.pid

Environment="OPTIONS=-f .../node1.conf"
PIDFile=/var/run/node1/mongod.pid

添加这些行也很有用:

ExecStartPre=/usr/bin/mkdir -p /usr/local/var/mongodb/node1
ExecStartPre=/usr/bin/chown mongod:mongod /usr/local/var/mongodb/node1
ExecStartPre=/usr/bin/chmod 0755 /usr/local/var/mongodb/node1
ExecStartPre=/usr/bin/mkdir -p /usr/local/var/log/mongodb/node1
ExecStartPre=/usr/bin/chown mongod:mongod /usr/local/var/log/mongodb/node1
ExecStartPre=/usr/bin/chmod 0755 /usr/local/var/log/mongodb/node1

然后您可以使用

启用该服务
systemctl enable mongod_node1

对于手动启动(如果需要)使用 systemctl start mongod_node1

一些注意事项:

不要直接编辑服务文件/usr/lib/systemd/system/mongod.service。如果您 运行 更新 MongoDB 软件包,则安装程序会将文件恢复为默认值。

MongoDB 在用户 mongod 下 运行ning,因此您还必须更改密钥文件的所有权:

 chown mongod:mongod /usr/local/var/mongodb/pki/replicaset-keyfile