Contenido

Introducción

Prerequisites

Requirements

Componentes Utilizados

Revisar datos de registro

Repare la base de datos si no se inicia

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