内容

概要

前提条件

要件

使用するコンポーネント

ログデータの確認

データベースが起動しない場合は修復します

概要

このドキュメントでは、アンクリーンシャットダウン後に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