我今天遇到了这个非常烦人的问题。
基本上,我已经使用 GCP Marketplace 产品设置了一个 MongoDB 数据库。它设置了一个主节点、辅助节点和一个仲裁节点。这太酷了。但它没有提供安全性。就像,一点都没有。所以很自然我必须自己设置它。好吧,现在 20 小时过去了,我挨了几记重拳,我仍然在努力让它运行起来。
基本上,这是我的部分配置:
security:
authorization: enabled
keyFile: '/etc/mongodKey'
如果我注释掉,keyFile
实例就会运行。但由于启用了安全性,它无法连接到任何其他节点。而且,我无法禁用它,你疯了吗?
但是关于 keyFile 的事情...据我所知,mongod
无法打开它,所以它无法启动。我想/etc
这不是一个放它的好地方吧?我试过其他文件夹,但无济于事。什么都不起作用。
我需要采取这种安全措施,因为我的同事需要使用 Robo 3T 连接数据库。因此删除外部 IP 地址是不可能的。
我做错了什么?请帮帮我,我快要抓狂了。
这是输出sudo service mongod status
:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2019-08-21 15:28:08 UTC; 4min 29s ago
Docs: https://docs.mongodb.org/manual
Process: 1024 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=1/FAILURE)
Main PID: 1024 (code=exited, status=1/FAILURE)
Aug 21 15:28:08 m-vm-0 systemd[1]: Started MongoDB Database Server.
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Main process exited, code=exited, status=1/F
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Unit entered failed state.
Aug 21 15:28:08 m-0 systemd[1]: mongod.service: Failed with result 'exit-code'.
编辑:
我检查了mongod.log
。是的,这是一个权限问题。我无法解决它。
我尝试过,sudo chmod 400 /etc/mongodKey
但什么也没做。请问,我应该把密钥文件放在哪里,以便 mongodb 可以读取它?这非常重要!
答案1
如果您使用名为“MongoDB”的 GCP MongoDB 市场部署,它允许您设置复制,请了解以下内容:
他们没有在初始配置中设置安全性,因此有两个选项:
- 关闭外部 IP
- 在中启用授权
mongod.conf
如果选择第一个解决方案,您将无法轻松地从任何其他外部源连接到数据库。
如果选择第二种解决方案,则需要执行以下操作:
生成密钥,整个过程可以在这里找到:https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/
复制文件内容
- 通过 SSH 连接到所有 Compute Engine 实例
- 选择目录
sudo touch <path to key>
sudo nano <path to key>
- 将生成的密钥粘贴到计算机上并保存
sudo chmod 600 <path to key>
sudo chown mongodb: <path to key>
- 更新您
mongod.conf
的/etc/mongod.conf
- 取消注释
security
,authorization
,keyFile
keyFile
提供密钥下的密钥文件路径- 停止所有实例并重新启动它们
现在 MongoDB 可以访问密钥文件了。
简直是噩梦。而且它chmod 400 <path to key>
并没有按照文档中所述为我工作。我不得不将其设置为chmod 600 <path to key>
。