소개
이 문서에서는 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