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