Mongodb shardingの構成サーバーをセットアップしようとしています。 /var/log/mongodb/mongod-config.log
にログを記録するように設定された特定の構成ファイルを作成しました。
mongod --config <path-to-config-file>
を実行すると、次のエラーが発生します。
`F CONTROL [main] Failed global initialization: FileNotOpen: Failed to open
"/var/log/mongodb/mongod-config.log"`
同じコマンドをSudo
を指定して実行すると、コマンドは実行されますが、出力がありません。
しかし、設定ファイルで指定されたポート(27019)でmongo Shellを起動しようとすると、次のようになります。
MongoDB Shell version v3.6.4
connecting to: mongodb://127.0.0.1:27019/test
2018-05-01T03:13:13.399+0000 W NETWORK [thread1] Failed to connect to
127.0.0.1:27019, in(checking socket for error after poll), reason: Connection
refused
2018-05-01T03:13:13.400+0000 E QUERY [thread1] Error: couldn't connect to
server 127.0.0.1:27019, connection attempt failed :
connect@src/mongo/Shell/mongo.js:251:13
@(connect):1:6
exception: connect failed
私はここで以前のいくつかの投稿を見てきましたが、1つは 同じ問題 でした。解決策はありませんが、もう一度やり直して、解決策があるかどうかを確認したいと思います。
何かを見逃したのか、問題が何かはわかりません...
それで、私は自分自身の質問を理解しました。
まず、問題は、構成サーバーに別のポート27019を使用していたため、ファイアウォールからそのポートを開く必要があったことです。
次に、設定ファイルのdbPathを/var/lib/mongodb
から/data/db
に変更しました。これは、mongodbがデータを保存するためのデフォルトパスだからです。
後で必ずSudo service mongod restart
を実行してください。
これで、特定の構成ファイルでmongodを起動できました。
Sudo mongod --config <path-to-config-file>
重要なのは、Sudo
を含めることです。それは問題を解決しました:
F CONTROL [main] Failed global initialization: FileNotOpen: Failed to open
"/var/log/mongodb/mongod-config.log"
コマンドを実行した後、mongodが仮想マシン(vm)で起動したことがわかり、次のようにして、別のマシンから上記のvmのmongoシェルに接続できます。
mongo <ip_address_of_said_vm>:27019
独自のディレクトリに独自のlogFileを作成する必要があります。既存のmongod.log
は使用できません。 MongoDBインストールに付属のmongod.log
ファイルに書き込もうとすると、Failed to OpenおよびAccess is Deniedが表示されます。
WindowsラップトップでMongoを実行している場合は、次のようなコマンドで開始する必要があります。
mongod --dbpath "C:\Program Files\MongoDB\Server\4.2" --logpath "C:\MongoData\data.log"
ここで、C:\MongoData\data.log
は、新しいディレクトリに作成した空のファイルです。
デフォルトでは、MongoDBはこのパス/var/log/mongodb/mongodb.log
にログファイルを作成します。ログファイルが見つからない場合は、MongoDB構成ファイルを確認してください。
logpath
/etc/mongod.conf
または/yourMongoDBpath/mongod.conf
のMongoDB構成ファイルを確認します。
/etc/mongod.conf
$ cat /etc/mongod.conf#mongod.conf
データを保存する場所。
注:root以外のユーザーとしてmongodbを実行する場合(推奨)、たとえば、親ディレクトリがmongodbユーザーによって変更できない場合は、このディレクトリの権限を手動で作成および設定する必要がある場合があります。
dbpath=/var/lib/mongodb
ログする場所
logpath=/var/log/mongodb/mongod.log
...
例
ここでは、dbpath
とlogpath
を含む1つのmongod.conf
ファイルについて言及しています。そして、mongod
サーバーとmongo
シェルを起動する方法をここに示します。
sharding:
clusterRole: configsvr
replication:
replSetName: repltest
security:
keyFile: /var/mongodb/pki/replkeyfile
net:
bindIp: localhost,192.168.103.100
port: 26001
systemLog:
destination: file
path: /var/mongodb/db/csrs1/mongod.log
logAppend: true
processManagement:
fork: true
storage:
dbPath: /var/mongodb/db/csrs1
~
次に、--godでmongodを起動するには、次のようなコマンドを使用します。
/var/mongodb/db/csrs1$ mongod -f csrs1.conf
子プロセスをフォークし、サーバーが接続できるようになるまで待機します。フォークされたプロセス:2101子プロセスが正常に開始され、親が終了しました
モンゴシェルを起動するには
mongo --port 26001
Debian9 64ビットサーバーでmongodbサービスを開始しようとしたときにも、同じ問題に直面しました。状態を確認しながら以下の情報を確認できました。
:~# systemctl status mongod.service
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/etc/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2019-02-22 14:52:17 CET; 11s ago
Docs: https://docs.mongodb.org/manual
Process: 20914 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=1/FAILURE)
Main PID: 20914 (code=exited, status=1/FAILURE)
Feb 22 14:52:17 server-test systemd[1]: Started High-performance, schema-free document-oriented database.
Feb 22 14:52:17 server-test mongod[20914]: 2019-02-22T14:52:17.650+0100
F CONTROL [main] Failed global initialization: FileNotOpen: Failed to open "/var/log/mongodb/mongod.log"
Feb 22 14:52:17 server-test systemd[1]: mongod.service: Main process exited, code=exited, status=1/FAILURE
Feb 22 14:52:17 server-test systemd[1]: mongod.service: Unit entered failed state.
Feb 22 14:52:17 server-test systemd[1]: mongod.service: Failed with result 'exit-code'.
各開始コマンドの結果の詳細情報も"/var/log/daemon.log"
で取得しています。問題の手掛かりの1つである"Failed global initialization: FileNotOpen: Failed to open "/var/log/mongodb/mongod.log"
の情報を見ることができました。チェック中に、mongod.logファイルがルートの所有権の下にあり、サービスがユーザー「mongodb」の下で開始されていることがわかりました。したがって、以下の修正を適用しました。
fix1: - chown mongodb:mongodb /var/log/mongodb/mongod.log
もう一度開始しようとすると、今回は「daemon.log」に新しいエラーを示すサービスが表示されました
mongod.service: Main process exited, code=exited, status=100/n/a
mongod.service: Unit entered failed state.
このエラーは、mongodbファイルの保存場所に問題があり、そのファイルにアクセスできないために発生しました。
fix2. chown -R mongodb:mongodb /var/lib/mongodb/*
添付のスクリーンショットを参照してください。これでサービスを開始できます。
Windows OSでも同じ問題がありました。問題はファイルの許可でした。次に、「C:\ Program Files\MongoDB\Server\4.2\log」の「mongod.log」ファイルに書き込み権限がありませんでした。次に、ファイルの「プロパティ」に「セキュリティ」と「書き込み」の権限を入れます。