概要
このドキュメントでは、アンクリーンシャットダウン後にSecure Network Analytics(以前のStealthwatch)ManagerアプライアンスでMongoDBを修復する方法について説明します。
前提条件
要件
このドキュメントに特有の要件はありません。
使用するコンポーネント
このドキュメントの内容は、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。ネットワークが稼働中の場合は、コマンドの潜在的な影響について確実に理解してください」
ログデータの確認
less
コマンドを使用して、mongodb.logファイルを確認します。
732smc:~# less /lancope/var/mongodb/log/mongodb.log
2021-06-21T14:54:43.029+0000 I CONTROL ***** SERVER RESTARTED *****
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] MongoDB starting : pid=87057 port=27017 dbpath=/lancope/var/database/dbs/mdb/ 64-bit host=ussecrapstwsmc1
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] db version v3.0.15
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] git version: b8ff507269c382bc100fc52f75f48d54cd42ec3b
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] build info: Linux 3555b2234f08 4.9.0-2-amd64 #1 SMP Debian 4.9.13-1 (2017-02-27) x86_64 BOOST_LIB_VERSION=1_49
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] allocator: tcmalloc
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] options: { config: "/etc/mongodb/mongodb.conf", net: { port: 27017 }, processManagement: { fork: true }, storage: { dbPath: "/lancope/var/database/dbs/mdb/" }, systemLog: { destination: "file", logAppend: true, path: "/lancope/var/mongodb/log/mongodb.log" } }
2021-06-21T14:54:43.050+0000 W - [initandlisten] Detected unclean shutdown - /lancope/var/database/dbs/mdb/mongod.lock is not empty.
2021-06-21T14:54:43.063+0000 I STORAGE [initandlisten] **************
old lock file: /lancope/var/database/dbs/mdb/mongod.lock. probably means unclean shutdown,
but there are no journal files to recover.
this is likely human error or filesystem corruption.
please make sure that your journal directory is mounted.
found 2 dbs.
see: http://dochub.mongodb.org/core/repair for more information
*************
2021-06-21T14:54:43.063+0000 I STORAGE [initandlisten] exception in initAndListen: 12596 old lock file, terminating
2021-06-21T14:54:43.063+0000 I CONTROL [initandlisten] dbexit: rc: 100
データベースが起動しない場合は修復します
ステップ 1:Mongoステータスの確認
lc-mongodb.serviceのステータスを確認するには、systemctl is-active lc-mongodb
コマンドを発行します。
Mongoがアクティブ状態の場合、結果は次のようになります。
732smc:/# systemctl is-active lc-mongodb
active
732smc:/#
Mongoがアクティブ状態でない場合、結果は次のようになります。
732smc:/# systemctl is-active lc-mongodb
inactive
732smc:/#
ステップ 2:Mongoサービスの停止
lc-mongodbサービスがアクティブ
状態であることが判明した場合は、/bin/systemctl stop lc-mongodb.service
コマンドを使用してサービスを停止します。
732smc:/# /bin/systemctl stop lc-mongodb.service
732smc:/# /bin/systemctl status lc-mongodb.service | grep Active
Active: inactive (dead) since Thu 2022-04-07 12:33:49 UTC; 1s ago7
しばらく待って、mongoが停止状態になっていることを確認します。必要に応じて/bin/systemctl status lc-mongodb.service
コマンドを使用して、サービスが非アクティブ
状態であることを確認します。
ステップ 3:プロセスID(PID)の収集
ロックファイルにまだPIDが含まれているかどうかを確認します。cat /lancope/var/database/dbs/mdb/mongod.lock
コマンドを発行します。
この出力は、ロックファイルにmongoサービスのPIDが含まれていることを示しています。このファイルには、サービスがアクティブ状態の場合にのみデータを含める必要があります。
注:PIDが返された場合は、ステップ4で使用されるPIDをメモします
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
14259
732smc:/#
この出力は、ロックファイルにPIDが含まれていないことを示しています。プロセスがアクティブ状態でない場合は、このファイルを空にする必要があります。PIDがない場合は、ステップ7に進みます。
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
732smc:/#
ステップ 4:PIDステータスの確認
ステップ3でチェックしたmongod.lockファイルにPIDが含まれている場合は、ps fuax
| grep [1]4259
コマンド(ステップ3のPIDで[1]4259を変更)を実行してPIDの存在を確認し、見つかった場合はPIDを強制終了します。
注:ブラケット式は必須ではありませんが、出力で「grep」コマンドが除外されます。
732smc:/# ps faux | grep [1]4259
mongodb 14259 0.3 0.4 516180 71520 ? Sl 12:38 0:03 /lancope/mongodb/bin/mongod --fork --config /etc/mongodb/mongodb.conf
732smc:/# kill -9 14259
732smc:/#
ステップ 5:ロックファイルの内容をクリアする
> /lancope/var/database/dbs/mdb/mongod.lock
コマンドを使用して、ロックファイルの内容をクリアします。cat /lancope/var/database/dbs/mdb/mongo.lock
コマンドを使用して、ファイルが空になっていることを確認します。
732smc:/# > /lancope/var/database/dbs/mdb/mongod.lock
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
732smc:/#
手順 6:MongoDBの起動を試みます
/bin/systemctl start lc-mongodb.service
コマンドを使用して、lc-mongodbサービスの開始を試みます。プロンプトが返されたら、/bin/systemctl status lc-mongodb.service
| grep Active
コマンドを使用します。
732smc:/# /bin/systemctl start lc-mongodb.service
732smc:/# /bin/systemctl status lc-mongodb.service | grep Active
Active: active (running) since Thu 2022-04-07 12:38:37 UTC; 27s ago
732smc:/#
プロセスがアクティブ状態の場合は、数分後にもう一度チェックして、プロセスがアクティブ状態のままであることを確認します。データベースが正常に機能している場合は、データベースを修復する必要はありません。 プロセスがアクティブなままにならない場合は、ステップ7に進み、修復プロセスを開始します。
手順 7:修復の開始
sudo -u mongodb /lancope/mongodb/bin/mongod —dbpath /lancope/var/database/dbs/mdb —repair
コマンドを発行します
732smc:/# sudo -u mongodb /lancope/mongodb/bin/mongod --dbpath /lancope/var/database/dbs/mdb/ --repair
732smc:/#
ステップ 8:修復されたMongoDBを起動します
/bin/systemctl start lc-mongodb.service
コマンドを実行して、サービスを開始します。 プロセスはアクティブ状態のままにする必要があり、/bin/systemctl status lc-mongodb.service
コマンドで確認できます。
732smc:/# /bin/systemctl start lc-mongodb.service
732smc:/# /bin/systemctl status lc-mongodb.service | grep Active
Active: active (running) since Thu 2022-04-07 12:38:37 UTC; 27s ago