web-dev-qa-db-ja.com

dbPathがシンボリックリンクされている場合、MongoDBは実行されません

公式リポジトリからMongoDB4.0.4をインストールしました。私は これらの指示 に従いました。私のOSはCentOS7で、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
2
Steve

あなたはほぼ間違いなくここでSELinuxに遭遇しています。データディレクトリ/var/lib/mongo、より具体的にはSELinuxタイプmongod_var_lib_tのファイルとディレクトリへのアクセスを期待して許可しますが、おそらくこのタイプがないため、シンボリックリンクについては何も知りません。

シンボリックリンクのSELinuxタイプを変更すると、MongoDBがデータベースに再度アクセスできるようになる場合があります。

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

おそらくこの時点では完了していないことに注意してください。このようなシンボリックリンクをいじっている場合は、おそらくすべてのデータを他のディスクに置くようなことをするつもりです。その場合、 コンテキストを永続化する必要もあります(ここを参照)

3
Michael Hampton