Introduzione
In questo documento viene descritto come ripristinare MongoDB sull'appliance Secure Network Analytics (in precedenza Stealthwatch) Manager dopo un arresto anomalo.
Prerequisiti
Requisiti
Nessun requisito specifico previsto per questo documento.
Componenti usati
Il documento può essere consultato per tutte le versioni software o hardware.
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi".
Verifica dati registro
Utilizzare il comando less
per esaminare il file 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
Ripristina il database se non viene avviato
Passaggio 1. Controlla lo stato di Mongo
Per controllare lo stato di lc-mongodb.service, usare il comando systemctl is-active lc-mongodb
.
Se Mongo è in stato attivo, i risultati saranno simili a quelli riportati di seguito:
732smc:/# systemctl is-active lc-mongodb
active
732smc:/#
Se Mongo non è in uno stato attivo, i risultati saranno simili a quelli riportati di seguito:
732smc:/# systemctl is-active lc-mongodb
inactive
732smc:/#
Passaggio 2. Interrompere il servizio Mongo
Se il servizio lc-mongodb è in stato attivo
, arrestarlo con il comando /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
Attendere qualche minuto e assicurarsi che il mongo rimanga in stato di arresto. Utilizzare il comando /bin/systemctl status lc-mongodb.service
per verificare che il servizio sia in stato inactive
.
Passaggio 3. Raccogli ID processo (PID)
Verificare se il file di blocco contiene ancora un PID. Eseguire il comando cat /lancope/var/database/dbs/mdb/mongod.lock
.
Questo output mostra che il file di blocco contiene il PID del servizio mongo. Questo file deve contenere dati solo se il servizio è in stato attivo.
Nota: prendere nota del PID, se ne viene restituito uno, in quanto viene utilizzato al punto 4
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
14259
732smc:/#
Questo output mostra che il file di blocco non contiene un PID. Questo file deve essere vuoto se il processo non si trova in uno stato attivo. Se non è presente alcun PID, passare al punto 7.
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
732smc:/#
Passaggio 4. Controlla stato PID
Se il file mongood.lock archiviato nel passaggio 3 conteneva un PID, eseguire il fax ps
| grep [1]4259
(modificare [1]4259 con il PID dal passaggio 3) per verificare l'esistenza del PID e successivamente terminare il PID se viene rilevato.
Nota: l'espressione tra parentesi non è necessaria, ma determina l'esclusione del comando "grep" nell'output.
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:/#
Passaggio 5. Cancella contenuto file di blocco
Cancellare il contenuto del file di blocco con il comando > /lancope/var/database/dbs/mdb/mongod.lock
. Verificare che il file sia vuoto con il comando 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:/#
Passaggio 6. Tentativo di avvio di MongoDB
Provare ad avviare il servizio lc-mongodb con il comando /bin/systemctl start lc-mongodb.service
. Quando il prompt viene restituito, controllare lo stato del processo selezionando /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:/#
Se lo stato del processo è attivo, verificare di nuovo tra qualche minuto per assicurarsi che rimanga attivo. Se il database rimane in uno stato funzionante, non è necessario ripristinarlo. Se il processo non rimane attivo, andare al passo 7 e avviare un processo di riparazione.
Passaggio 7. Avvia ripristino
Eseguire il comando 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:/#
Passaggio 8. Tentativo di avviare il database MongoDB ripristinato
Eseguire il comando /bin/systemctl start lc-mongodb.service
per avviare il servizio. Il processo deve rimanere in uno stato attivo e può essere controllato con il comando /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