Table des matières

Introduction

Conditions préalables

Exigences

Composants utilisés

Consulter les données du journal

Réparer la base de données si elle ne démarre pas

Introduction

Ce document décrit comment réparer MongoDB sur l'appliance Secure Network Analytics (anciennement StealthWatch) Manager après un arrêt non nettoyé.

Conditions préalables

Exigences

There are no specific requirements for this document.

Composants utilisés

Ce document n'est pas limité à des versions de matériel et de logiciel spécifiques.

The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est actif, assurez-vous de comprendre l'impact potentiel de toute commande. »

Consulter les données du journal

Utilisez la commande less pour consulter le fichier 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

Réparer la base de données si elle ne démarre pas

Étape 1. Vérifier l'état Mongo

Pour vérifier l'état de lc-mongodb.service, émettez la commande systemctl is-active lc-mongodb.

Si Mongo est dans un état actif, vos résultats ressembleront à :

732smc:/# systemctl is-active lc-mongodb

active

732smc:/#

Si Mongo n'est pas dans un état actif, vos résultats ressembleront à :

732smc:/# systemctl is-active lc-mongodb

inactive

732smc:/#

Étape 2. Arrêter le service Mongo

Si le service lc-mongodb est à l'état actif, arrêtez-le à l'aide de la commande /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

Attendez quelques instants et assurez-vous que le mongo reste dans un état d'arrêt. Utilisez la commande /bin/systemctl status lc-mongodb.service si nécessaire pour vous assurer que le service est dans un état inactif.

Étape 3. Collecter l'ID de processus (PID)

Vérifiez si le fichier de verrouillage contient toujours un PID. Émettez la commande cat /lancope/var/database/dbs/mdb/mongod.lock.

Cette sortie montre que le fichier de verrouillage contient le PID du service mongo. Ce fichier ne doit contenir des données que si le service est dans un état actif.

Remarque : prenez note du PID s'il est renvoyé, comme il est utilisé à l'étape 4

732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock

14259

732smc:/#

Ce résultat montre que le fichier de verrouillage ne contient pas de PID. Ce fichier doit être vide si le processus n'est pas dans un état actif. En l'absence de PID, passez à l'étape 7.

732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock

732smc:/#

Étape 4. Vérifier l'état PID

Si le fichier mongod.lock vérifié à l'étape 3 contenait un PID, exécutez la commande ps fuax | grep [1]4259 (changez le [1]4259 avec votre PID à partir de l'étape 3) pour vérifier l'existence du PID et ensuite le tuer s'il est trouvé.

Remarque : l'expression entre crochets n'est pas obligatoire, mais entraîne l'exclusion de la commande « grep » dans le résultat.

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:/#

Étape 5. Effacer le contenu du fichier verrouillé

Effacez le contenu du fichier de verrouillage à l'aide de la commande > /lancope/var/database/dbs/mdb/mongod.lock. Vérifiez que le fichier est maintenant vide avec la commande 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:/#

Étape 6. Tentative de démarrage de MongoDB

Essayez de démarrer le service lc-mongodb avec la commande /bin/systemctl start lc-mongodb.service. Une fois que votre invite est retournée, vérifiez l'état du processus avec le /bin/systemctl status lc-mongodb.service | grep Active, commande.

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:/#

Si le processus est dans un état actif, vérifiez à nouveau dans quelques minutes pour vous assurer qu'il reste dans un état actif. Vous n'avez pas besoin de réparer la base de données si elle reste en état de fonctionnement.  Si le processus ne reste pas actif, passez à l'étape 7 et lancez un processus de réparation.

Étape 7. Lancer la réparation

Exécutez la commande 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:/#

Étape 8. Tentative de démarrage du MongoDB réparé

Exécutez la commande /bin/systemctl start lc-mongodb.service pour démarrer le service.  Le processus doit rester actif et peut être vérifié à l'aide de la commande /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