如果 dbPath 是符号链接,MongoDB 将无法运行

如果 dbPath 是符号链接,MongoDB 将无法运行

我已经从官方仓库安装了 MongoDB 4.0.4。我遵循这些说明。我的操作系统是 CentOS 7,SELinux 处于强制模式。如果我使用dbPath指向另一个目录的符号链接的值,则会在日志中收到以下错误:

exception in initAndListen: Location28596: Unable to determine status of lock file in the data directory /var/lib/mongo_test: boost::filesystem::status: Permission denied: "/var/lib/mongo_test/mongod.lock", terminating

如果我将其更改dbPath为任何其他未符号链接的目录,它将正常工作。

这是我当前的测试设置,它会出现错误:

# ln -s /var/lib/mongo /var/lib/mongo_test

# chcon -u system_u -t mongod_var_lib_t -h /var/lib/mongo_test

# cat /etc/mongod.conf | grep -v '^$\|^\s*\#'
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
storage:
  dbPath: /var/lib/mongo_test
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27017
  bindIp: 127.0.0.1

# ls -alZ /var/lib/ | grep mongo
drwxr-xr-x. mongod    mongod    system_u:object_r:mongod_var_lib_t:s0 mongo
lrwxrwxrwx. root      root      system_u:object_r:mongod_var_lib_t:s0 mongo_test -> /var/lib/mongo

# namei -l /var/lib/mongo_test/mongod.lock
f: /var/lib/mongo_test/mongod.lock
dr-xr-xr-x root   root   /
drwxr-xr-x root   root   var
drwxr-xr-x root   root   lib
lrwxrwxrwx root   root   mongo_test -> /var/lib/mongo
dr-xr-xr-x root   root     /
drwxr-xr-x root   root     var
drwxr-xr-x root   root     lib
drwxr-xr-x mongod mongod   mongo
-rw------- mongod mongod mongod.lock

答案1

您几乎肯定会在这里遇到 SELinux。虽然它期望并允许访问数据目录/var/lib/mongo,或者更具体地说是具有 SELinux 类型的文件和目录mongod_var_lib_t,但它对您的符号链接一无所知,因为它可能没有这种类型。

如果您更改符号链接的 SELinux 类型,您可能会发现 MongoDB 能够再次访问数据库。

chcon -h -t mongod_var_lib_t /var/lib/mongo_test

请注意,此时您可能还没有完成。如果您像这样弄乱符号链接,您可能打算将所有数据放在其他磁盘上。在这种情况下,您还需要使上下文持久化(参见此处)

答案2

我发现使用符号链接存在问题。符号链接指向不同的文件系统,而 mongodb(用户)没有权限浏览符号链接引用的文件夹。
因此,在 ubuntu 上进行标准安装后,/var/log/mongodb 被更改为符号链接

例如:

$ ll /media/ziggy/
drwx------  5 ziggy ziggy  4096 Oct 28 21:49 XFS_DB/

但我之前已经检查过了:

$ ll /var/log/mongodb
lrwxrwxrwx 1 mongodb mongodb 38 Oct 28 21:58 /var/log/mongodb -> /media/ziggy/XFS_DB/mongodb/log/

所以这似乎没有意义...当然用户 mongodb 对该文件夹和文件 mongodb.log 具有 rwx 访问权限...但它无法通过符号链接找到它,因为 mongodb 无法搜索媒体的基本文件夹。

事后看来这很愚蠢,但搜索结果并未找到任何有用的东西。

作为主人(ziggy),我可以开始

mongod --config /etc/mongodb.conf 

但如果我启动服务就会失败

sudo systemctl start mongod

失败并显示消息“无权更新 mongodb.log”

相关内容