Introduction
Este documento descreve como reparar o MongoDB no dispositivo Secure Network Analytics (anteriormente Stealthwatch) Manager após um desligamento não limpo.
Prerequisites
Requirements
Não existem requisitos específicos para este documento.
Componentes Utilizados
Este documento não se restringe a versões de software e hardware específicas.
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. Se a sua rede estiver ativa, certifique-se de que você compreende o impacto potencial de qualquer comando."
Revisar dados de log
Use o comando less
para revisar o arquivo 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
Reparar o Banco de Dados se ele não for iniciado
Etapa 1. Verificar status do Mongo
Para verificar o status de lc-mongodb.service, emita o comando systemctl is-ative lc-mongodb
.
Se o Mongo estiver em um estado ativo, seus resultados serão semelhantes a:
732smc:/# systemctl is-active lc-mongodb
active
732smc:/#
Se o Mongo não estiver em um estado ativo, seus resultados serão semelhantes a:
732smc:/# systemctl is-active lc-mongodb
inactive
732smc:/#
Etapa 2. Pare o serviço Mongo
Se o serviço lc-mongodb estiver em um estado ativo, interrompa o serviço com o 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
Aguarde alguns instantes e certifique-se de que mongo permaneça em um estado parado. Use o comando /bin/systemctl status lc-mongodb.service
conforme necessário para garantir que o serviço esteja em um estado inativo
.
Etapa 3. Coletar ID do Processo (PID)
Verifique se o arquivo de bloqueio ainda contém um PID. Emita o comando cat /lancope/var/database/dbs/mdb/mongod.lock
.
Esta saída mostra que o arquivo lock contém o PID do serviço mongo. Este arquivo só deverá conter dados se o serviço estiver em um estado ativo.
Observação: anote o PID se ele for devolvido, pois ele é usado na Etapa 4
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
14259
732smc:/#
Esta saída mostra que o arquivo de bloqueio não contém um PID. Este arquivo deve estar vazio se o processo não estiver em um estado ativo. Se não houver PID, vá para a Etapa 7.
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
732smc:/#
Etapa 4. Verificar status de PID
Se o arquivo mongod.lock marcado na Etapa 3 contiver um PID, execute o comando ps fuax
comando | grep [1]4259
(altere o [1]4259 com seu PID da etapa 3) para verificar a existência do PID e, em seguida, elimine-o se for encontrado.
Observação: a expressão de colchete não é necessária, mas resulta na exclusão do comando "grep" na saída.
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:/#
Etapa 5. Limpar conteúdo do arquivo de bloqueio
Limpe o conteúdo do arquivo de bloqueio com o comando > /lancope/var/database/dbs/mdb/mongod.lock
. Verifique se o arquivo está vazio agora com o 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:/#
Etapa 6. Tentativa de iniciar o MongoDB
Tente iniciar o serviço lc-mongodb com o comando /bin/systemctl start lc-mongodb.service
. Quando seu prompt for retornado, verifique o status do processo com /bin/systemctl status lc-mongodb.service
comando | grep Ative
.
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 o processo estiver em um estado ativo, verifique novamente em alguns minutos para garantir que ele permaneça em um estado ativo. Você não precisará reparar o banco de dados se ele permanecer em um estado de funcionamento. Se o processo não permanecer ativo, vá para a etapa 7 e inicie um processo de reparo.
Passo 7. Iniciar reparo
Execute o 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:/#
Etapa 8. Tentativa de iniciar o MongoDB reparado
Execute o comando /bin/systemctl start lc-mongodb.service
para iniciar o serviço. O processo deve permanecer em um estado ativo e pode ser verificado com o 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