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
我对 node2
和 node3
也做了同样的事情。
该指南的下一步是 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'.
我按照说明更改了 Environment
和 PIDFile
变量。此外,更改了密钥文件的所有权。我尝试添加和不添加 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
我按照以下 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
我对 node2
和 node3
也做了同样的事情。
该指南的下一步是 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'.
我按照说明更改了 Environment
和 PIDFile
变量。此外,更改了密钥文件的所有权。我尝试添加和不添加 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