Introducción
Este documento describe cómo reparar MongoDB en el dispositivo Secure Network Analytics (anteriormente Stealthwatch) Manager después de un apagado no limpio.
Prerequisites
Requirements
No hay requisitos específicos para este documento.
Componentes Utilizados
Este documento no tiene restricciones específicas en cuanto a versiones de software y de hardware.
La información que contiene este documento se creó a partir de los dispositivos en un ambiente de laboratorio específico. Todos los dispositivos que se utilizan en este documento se pusieron en funcionamiento con una configuración verificada (predeterminada). Si su red está activa, asegúrese de comprender el impacto potencial de cualquier comando".
Revisar datos de registro
Utilice el comando less
para revisar el archivo 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
Repare la base de datos si no se inicia
Paso 1. Comprobar el estado de Mongo
Para verificar el estado de lc-mongodb.service, ejecute el comando systemctl is-active lc-mongodb
.
Si Mongo está en un estado activo, sus resultados se parecerían a:
732smc:/# systemctl is-active lc-mongodb
active
732smc:/#
Si Mongo no está en estado activo, sus resultados se parecerían a:
732smc:/# systemctl is-active lc-mongodb
inactive
732smc:/#
Paso 2. Detenga el servicio Mongo
Si se encontró que el servicio lc-mongodb está en un estado activo
, detenga el servicio con el 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
Espere unos momentos y asegúrese de que el mongo permanece en un estado detenido. Utilice el comando /bin/systemctl status lc-mongodb.service
según sea necesario para asegurarse de que el servicio está en un estado inactivo
.
Paso 3. Recopilar ID de proceso (PID)
Compruebe si el archivo de bloqueo aún contiene una PID. Ejecute el comando cat /lancope/var/database/dbs/mdb/mongod.lock
.
Esta salida muestra que el archivo de bloqueo contiene el PID del servicio mongo. Este archivo solo debe contener datos si el servicio está en estado activo.
Nota: Tome nota del PID si se devuelve uno, ya que se utiliza en el paso 4
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
14259
732smc:/#
Este resultado muestra que el archivo de bloqueo no contiene un PID. Este archivo debe estar vacío si el proceso no está en estado activo. Si no hay PID, vaya al paso 7.
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
732smc:/#
Paso 4. Comprobar estado de PID
Si el archivo mongod.lock registrado en el Paso 3 contenía un PID, ejecute el comando ps fuax
| grep [1]4259
(cambie el [1]4259 con su PID del paso 3) para comprobar la existencia del PID y, a continuación, elimine ese PID si lo encuentra.
Nota: La expresión de corchete no es necesaria pero resulta en la exclusión del comando "grep" en la salida.
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:/#
Paso 5. Borrar el contenido del archivo de bloqueo
Borre el contenido del archivo de bloqueo con el comando > /lancope/var/database/dbs/mdb/mongod.lock
. Verifique que el archivo esté ahora vacío con el 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:/#
Paso 6. Intente iniciar MongoDB
Intente iniciar el servicio lc-mongodb con el comando /bin/systemctl start lc-mongodb.service
. Una vez que se le devuelva el mensaje, verifique el estado del proceso con el /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:/#
Si el proceso se encuentra en estado activo, vuelva a comprobarlo en unos minutos para asegurarse de que permanece en estado activo. No es necesario reparar la base de datos si permanece en un estado en funcionamiento. Si el proceso no puede permanecer activo, vaya al paso 7 e inicie un proceso de reparación.
Paso 7. Iniciar reparación
Ejecute el 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:/#
Paso 8. Intente iniciar el MongoDB reparado
Ejecute el comando /bin/systemctl start lc-mongodb.service
para iniciar el servicio. El proceso debe permanecer en un estado activo y se puede verificar con el 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