Ceph 내부 데이터 흐름 이해
5️⃣ Ceph 내부 데이터 흐름 이해
Ceph는 “확장성"과 “자율적 데이터 분산"을 핵심으로 하는 분산 스토리지 시스템입니다.
이번 장에서는 Ceph의 내부 데이터가 어떻게 저장되고 복제되는지, 데이터를 어떻게 배치하고 읽고 쓰는지에 대한 전체 흐름을 이해하는 것이 목표입니다.
1. CRUSH Map 이해 및 데이터 배치 원리
📌 CRUSH란?
CRUSH (Controlled Replication Under Scalable Hashing)
데이터가 어떤 OSD에 저장될지 결정하는 알고리즘.
중간 메타데이터 서버 없이 데이터를 “계산"으로 분산시킴.
📊 아키텍처 개념도
[Client / Pod]
|
v
[ CRUSH Algorithm ]
|
v
[ OSD1 ] [ OSD2 ] [ OSD3 ] ...
📂 CRUSH 계층 구조
CRUSH는 계층적 구조로 데이터를 배치합니다:
root
└── rack1
├── host1
│ ├── osd.0
│ └── osd.1
└── host2
└── osd.2
rack
→host
→osd
순의 계층- 데이터 복제는 다른 host에 위치한 OSD에 분산되도록 설정 가능
📌 CRUSH 예시
- 3개의 복제본 (replica) 정책이 설정된 경우:
- Primary : OSD.1
- Replica1 : OSD.3 (다른 host)
- Replica2 : OSD.5 (다른 rack)
2. Pool과 PG (Placement Group)
📦 Pool
- Pool은 논리적 데이터 그룹
- 하나의 Pool은 여러 개의 **PG(Placement Group)**로 구성됨
🎯 PG (Placement Group)
- PG는 CRUSH에 의해 OSD로 매핑되는 최소 단위
- 데이터는 Pool → PG → OSD로 매핑됨
🔄 구조 개념도
+---------+ +--------+ +-------+
| Pool | --> | PG | --> | OSD |
+---------+ +--------+ +-------+
📊 예시 흐름
- Pool:
mypool
- 설정:
128 PG
,replica=3
- 데이터
object_abc
→ PG 73 → CRUSH → OSD.2, OSD.5, OSD.7
3. Read/Write 과정에서 데이터 복제 흐름
✍️ Write 흐름 (복제 3개 기준)
- Client가 CRUSH 계산을 통해 Primary OSD 결정 (예: OSD.2)
- OSD.2는 다른 2개의 OSD(예: OSD.5, OSD.7)에 복제 전송
- 모든 OSD가 쓰기 완료 시
ack
반환
[Client]
|
v
[Primary OSD]
| \
v v
[Replica1] [Replica2]
✅ 모든 OSD가 쓰기를 완료해야 Client에 응답
📖 Read 흐름
- 기본적으로 Primary OSD에서 읽기를 수행
- 단, 특정 OSD 장애 시 Replica OSD에서 읽기 수행 가능 (failover)
4. 스토리지 확장 시 OSD 추가 반영 흐름
📈 OSD 추가 시 일어나는 일
- 새로운 OSD가 클러스터에 join
- CRUSH 맵이 자동 갱신
- PG ↔ OSD 매핑이 일부 변경됨
- Ceph가 자동으로 재밸런싱 수행 (backfill/rebalance)
🔁 자동 리밸런싱 흐름
[기존 PG] → [신규 OSD] ← 백필 (backfill)
- 클러스터 상태는 일시적으로
HEALTH_WARN
또는HEALTH_OK
withrebalancing
상태일 수 있음 - 운영 중에도 무중단 확장이 가능
📌 확장 시 유의 사항
backfill
중 I/O 성능 저하 발생 가능- 고용량 디스크를 추가할 경우 분산 효과가 커짐 → 전체 클러스터 성능 향상
📚 전체 데이터 흐름 요약 아키텍처
+--------+ +-------------------+
| Client | ---------> | CRUSH MAP |
+--------+ +---------+---------+
|
v
+---------+----------+
| PG (PlacementGroup)|
+---------+----------+
|
+--------------------+--------------------+
| | |
v v v
[OSD.1] [OSD.3] [OSD.5]
(Primary) (Replica 1) (Replica 2)
✅ 정리
개념 | 설명 |
---|---|
CRUSH Map | 중간 서버 없이 데이터 분산을 계산하는 알고리즘 |
Pool | 논리적 데이터 그룹 |
PG | Placement Group, Pool 내 최소 단위 |
OSD | 실제 데이터를 저장하는 디스크 |
Write 동작 | Primary → Replica들에 동시 전송 후 응답 |
확장 시 처리 | CRUSH 맵 갱신 + PG 재배치 → 자동 리밸런싱 |
마지막 수정일자