2026. 3. 5. 13:28ㆍ기타/Mongodb
MongoDB 디스크 공간 정리 (compact 작업 정리)
MongoDB에서 WiredTiger 스토리지 엔진을 사용할 때 삭제된 데이터로 인해 **디스크 공간 단편화(fragmentation)**가 발생할 수 있다. 이때 compact 명령어를 사용해 스토리지를 정리할 수 있다.
1. Secondary 노드 직접 접속
compact는 Primary가 아닌 Secondary 노드에서 실행해야 하므로,
특정 노드에 직접 접속할 수 있도록 directConnection 옵션을 사용한 connection string을 사용한다.
Compass를 사용해서 작업하면 한결 수월하다.
(민감 정보 제거 예시)
mongodb://<user>:<password>@<secondary-host>:27017/?replicaSet=<replica-set-name>&directConnection=true&tls=true
예시
mongodb://user:password@atlas-xxxxx-shard-00-01.xxxxx.mongodb.net:27017/?replicaSet=atlas-xxxxx-shard-0&directConnection=true&tls=true
directConnection=true 옵션을 사용하면 특정 Secondary 노드에 직접 접속할 수 있다.
2. 작업 전 상태 확인
compact 작업 전에는 Replica Set 상태와 replication 상태를 반드시 확인해야 한다.
아래 명령어들은 Primary 또는 Secondary 어느 노드에서든 실행 가능하지만 일반적으로 Primary에서 전체 상태 확인을 진행한다.
db.stats()
rs.status()
db.hello()
rs.printReplicationInfo()
rs.printSecondaryReplicationInfo()
rs.status().members.map(m => ({name: m.name, state: m.stateStr, health: m.health}))
각 명령어 용도
- db.stats()
DB의 data size / storage size / index size 확인 - rs.status()
Replica Set 전체 상태 및 노드 역할(PRIMARY / SECONDARY) 확인 - db.hello()
현재 접속 노드가 Primary인지 Secondary인지 확인 - rs.printReplicationInfo()
oplog 크기 및 replication window 확인 - rs.printSecondaryReplicationInfo()
Secondary replication lag 확인 - rs.status().members.map(m => ({name: m.name, state: m.stateStr, health: m.health}))
모든 노드의 name / state / health 요약 확인
3. Compact 실행
compact 명령어는 서비스 영향 최소화를 위해 Secondary 노드에서 실행한다.
db.runCommand({ compact: 'yourCollectionName' })
Primary에서 실행할 경우 해당 컬렉션 write가 block될 수 있고, force 옵션을 쓰라고 나오지만 무시하는게 좋다.
4. 작업 순서
운영 환경에서는 보통 아래 순서로 진행한다.
- Secondary 노드에서 compact 실행
- 작업 완료 후 stepdown / failover 진행하여 Primary 전환
- 기존 Primary가 Secondary가 되면 동일하게 compact 실행
이 방식으로 서비스 영향 없이 모든 노드를 순차적으로 정리할 수 있다.
5. 작업 시 주의사항
- Analytics Node는 다른 클라우드/VPC에 존재하는 경우가 있어
접속이 되지 않으면 IP Allowlist 추가가 필요할 수 있다. - MongoDB 디스크 공간 정리 완료 후 필요에 따라서는 Cluster Spec 변경 (스케일업 / 스케일다운) 작업이 필요할 경우
수 분 ~ 수 시간까지 소요될 수 있으므로- 로그 모니터링
- Replica 상태 모니터링
- 작업 상태 확인
- 작업이 장시간 진행되거나 문제가 발생하면
MongoDB Support 티켓을 열어 함께 진행하는 것이 안전하다.
참고 문서
https://www.mongodb.com/ko-kr/docs/manual/faq/storage/#how-do-i-reclaim-disk-space-in-wiredtiger-
https://www.mongodb.com/ko-kr/docs/manual/reference/command/compact/#mongodb-dbcommand-dbcmd.compact
'기타 > Mongodb' 카테고리의 다른 글
| robomongo ssh tunneling 접속 (0) | 2022.01.05 |
|---|