목차

소개

사전 요구 사항

요구 사항

사용되는 구성 요소

로그 데이터 검토

데이터베이스를 시작하지 않으면 복구합니다.

소개

이 문서에서는 Secure Network Analytics(이전의 Stealthwatch) Manager 어플라이언스가 부정하게 종료된 후 MongoDB를 복구하는 방법에 대해 설명합니다.

사전 요구 사항

요구 사항

이 문서에 대한 특정 요건이 없습니다.

사용되는 구성 요소

이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다.

이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 네트워크가 가동 중인 경우 모든 명령의 잠재적인 영향을 이해해야 합니다."

로그 데이터 검토

mongodb.log 파일을 검토하려면 less 명령을 사용합니다.

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

데이터베이스를 시작하지 않으면 복구합니다.

1단계. 몽고 상태 확인

lc-mongodb.service의 상태를 확인하려면 systemctl is-active lc-mongodb 명령을 실행합니다.

Mongo가 활성 상태인 경우 다음과 같은 결과가 나타납니다.

732smc:/# systemctl is-active lc-mongodb

active

732smc:/#

Mongo가 활성 상태가 아닌 경우 다음과 같은 결과가 나타납니다.

732smc:/# systemctl is-active lc-mongodb

inactive

732smc:/#

2단계. Mongo 서비스 중지

lc-mongodb 서비스가 활성 상태인 것으로 확인되면 /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

잠시 기다린 후 mongo가 중지된 상태로 유지되도록 합니다. 필요에 따라 /bin/systemctl status lc-mongodb.service 명령을 사용하여 서비스가 비활성 상태인지 확인합니다.

3단계. 수집 프로세스 ID(PID)

잠금 파일에 PID가 남아 있는지 확인합니다. cat /lancope/var/database/dbs/mdb/mongod.lock 명령을 실행합니다.

이 출력은 잠금 파일에 mongo 서비스의 PID가 포함되어 있음을 보여줍니다. 이 파일은 서비스가 활성 상태인 경우에만 데이터를 포함해야 합니다.

참고: PID가 반환되면 4단계에서 사용하므로 PID를 기록해 둡니다

732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock

14259

732smc:/#

이 출력은 잠금 파일에 PID가 없음을 보여줍니다. 프로세스가 활성 상태가 아닌 경우 이 파일은 비어 있어야 합니다. PID가 없는 경우 7단계로 진행합니다.

732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock

732smc:/#

4단계. PID 상태 확인

3단계에서 확인한 mongod.lock 파일에 PID가 포함되어 있으면 ps fuax를 실행합니다 | grep [1]4259 명령(3단계에서 PID로 [1]4259 변경)을 사용하여 PID가 있는지 확인한 다음 PID가 발견되면 중단합니다.

참고: 대괄호 표현식이 필요하지 않지만 출력에서 "grep" 명령이 제외됩니다.

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:/#

5단계. 잠금 파일 내용 지우기

>/lancope/var/database/dbs/mdb/mongod.lock 명령을 사용하여 잠금 파일의 내용을 지웁니다. 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:/#

6단계. MongoDB 시작 시도

/bin/systemctl start lc-mongodb.service 명령으로 lc-mongodb 서비스를 시작합니다. 프롬프트가 반환되면 /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:/#

프로세스가 활성 상태인 경우 몇 분 후에 다시 확인하여 활성 상태를 유지해야 합니다. 데이터베이스가 작동 상태로 유지되면 복구할 필요가 없습니다.  프로세스가 활성 상태를 유지하지 못할 경우 7단계로 진행하여 복구 프로세스를 시작합니다.

7단계. 복구 시작

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:/#

8단계. 복구된 MongoDB 시작 시도

서비스를 시작하려면 /bin/systemctl start lc-mongodb.service 명령을 실행합니다.  프로세스는 활성 상태로 유지되어야 하며 /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