InfluxDB는 하나의 서버가 "데이터를 안전하게 저장하고 읽는 것" 을 책임지는 시스템입니다.
이를 위해 index 파일, WAL 파일, TSM 데이터 파일, meta 정보 등을 디스크 상의 물리적 파일들로 관리합니다.
생각해봅시다.
🏛️ 1. 데이터베이스 = 도서관
책들이 = 실제 데이터 파일들 (.tsm)
책을 빌리고 기록하는 장부 = 메타 정보 (meta.db)
빌리기 전 임시 메모장 = WAL (Write Ahead Log)
책 위치 색인 카드 = index
🧍♂️ 2. InfluxDB 인스턴스 = 도서관 사서
InfluxDB가 하나의 인스턴스로 실행되면,
마치 한 명의 사서가 도서관의 모든 책과 기록을 정확히 알고 관리하는 상황이에요.
사서는:
책을 대출하면 기록을 남기고
책을 정리하면서 색인(index) 도 갱신하고
임시 메모장(WAL) 에 적었다가 나중에 정식 기록부에 옮기기도 하죠
💥 그런데, 사서가 두 명이라면?
두 명의 사서가 동시에 같은 도서관 장부를 들고, 서로 모르게 작업을 시작하면 어떤 일이 벌어질까요?
| 상황 | 문제점 |
|---|---|
| 두 사서가 같은 책을 동시에 빌려준다고 기록함 | → 중복되거나 충돌된 기록 |
| 한 명은 색인을 업데이트하고, 다른 한 명은 옛날 색인으로 찾음 | → 데이터 일관성 오류 |
| 동시에 메모장을 바꾸다가 서로 내용 덮어씀 | → WAL 손상 및 복구 실패 |
| 누가 언제 무엇을 기록했는지 알 수 없게 됨 | → 시스템이 무너짐 |
InfluxDB는 내부적으로 다음을 전제로 설계되어 있습니다:
"이 데이터 디렉토리는 나 혼자만 사용한다"
그래서 락 파일(LOCK)을 만들어 두고, 다른 인스턴스는 접근하지 못하게 해야 정상
하지만 두 인스턴스를 강제로 실행하면 락이 무시되거나 공유 자원에 대한 충돌이 생기게 되고,
index 깨짐, WAL flush 충돌, meta.db 손상 등으로 이어져
데이터가 영구적으로 망가질 수 있습니다.
| 항목 | 설명 |
|---|---|
| InfluxDB는 파일 기반의 DB | 내부 파일 시스템을 신뢰성 있게 관리함 |
| 동시에 두 인스턴스가 실행되면 | 같은 파일을 두 개의 손이 덮어쓰는 꼴 |
| 결과 | index 오염, WAL 꼬임, meta 손상 → 데이터 파괴 |
| 해결 | 한 번에 하나의 인스턴스만 실행, 테스트는 디렉토리 복사로 나눠서 실행 |