Overview
대규모 스토리지 시스템에서 ‘안정성’과 ‘효율성’을 동시에 잡는 일은 쉽지 않다. Ceph는 이 문제를 해결하기 위해 Replica와 Erasure Code라는 두 가지 데이터 보호 방식을 제공한다.
이 글에서는 특히 저장 효율이 뛰어난 Erasure Code의 설정 방법과 실습을 중심으로 설명하고, Replica와의 차이점도 명확히 짚어보겠다. 마지막엔 실습 중 마주칠 수 있는 오류 상황도 정리해 보겠다.

📅 관련 글
2022.07.29 - [Open Source Software] - Ceph 란?
2024.02.20 - [Open Source Software] - Cephadm-ansible이란?
2024.02.20 - [Open Source Software] - Rook-Ceph란?
Erasure Code란?
Erasure Code는 데이터를 여러 조각(k)으로 나누고, 복구용 조각(m)을 추가하여 전체 데이터를 `N = k + m` 개의 블록으로 나누어 저장하는 방식이다. 일부 블록이 손실되더라도 남은 블록으로 원본 데이터를 복구할 수 있는 구조이다.
예시
- k=3, m=2이면, 총 5개의 조각으로 저장되고 2개까지 손실돼도 복구가 가능하다.
Replica와 Erasure Code의 차이점
| 항목 | Replica 방식 | Erasure Code 방식 |
| 데이터 보호 방식 | 동일한 데이터를 여러 번 복제 | 데이터 분할 + 패리티 추가 |
| 저장 효율 | 매우 낮음 (3-Replica = 33%) | 매우 높음 (k=3, m=2 → 60%) |
| 복구 속도 | 빠름 (단순 복사) | 느림 (패리티 계산 필요) |
| CPU/연산 부하 | 낮음 | 높음 (패리티 연산 필요) |
| 적합한 환경 | 빠른 복구가 중요한 경우 | 저장 공간이 중요한 경우 |
Ceph에서 Erasure Code 구성 실습
1. Ceph 버전 확인
ceph --version
# 예: ceph version 18.2.1 reef (stable)
2. Erasure Code 프로파일 생성
ceph osd erasure-code-profile set ec-advance \
k=3 m=2 plugin=jerasure \
crush-failure-domain=rack
- `k`: 데이터 블록 수
- `m`: 패리티 블록 수
- `plugin`: 사용 알고리즘 (jerasure)
- `crush-failure-domain`: 장애 도메인 (rack, host 등)
3. Erasure Code Pool 생성
ceph osd pool create thanos-pool 128 erasure ec-advance
- 128: PG 수 (Production에서는 최소 64 이상 권장)
- ec-advance: 방금 만든 프로파일 이름
4. RGW 또는 RBD용 Pool로 설정
ceph osd pool application enable thanos-pool rgw
- rgw, rbd, cephfs 등 서비스에 따라 다름
5. 상태 확인
ceph -s
혹은 PG 상태 확인
ceph osd pool ls detail | grep thanos-pool
실습 중 발생할 수 있는 오류 및 원인
오류 1: `HEALTH_WARN - Degraded data redundancy`
HEALTH_WARN
Degraded data redundancy: 122 pgs undersized
원인
- OSD 수가 부족해서 Erasure Code 조합이 완성되지 않음
- k+m 개수만큼의 서로 다른 failure domain 필요
해결
- OSD 추가
- crush map 확인 → host, rack 단위로 적절히 분산되었는지 체크
오류 2: `1 pool(s) do not have an application enabled`
해결 방법
ceph osd pool application enable [pool이름] [rgw|rbd|cephfs]
erasure-pool 확인 예시
ceph osd erasure-code-profile get ec-advance
출력 예시
k=3
m=2
plugin=jerasure
technique=reed_sol_van
crush-failure-domain=rack
ceph df
출력 예시
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
thanos-pool 17 128 0 B 0 0 B 0 311 TiB
정리: 언제 Erasure Code를 선택할까?
| 선택 기준 | 권장 방식 |
| 스토리지 비용 최적화 | Erasure Code |
| 빠른 복구와 단순함 | Replica |
| 클러스터에 충분한 OSD가 있음 | Erasure Code |
| 소규모 테스트 환경 | Replica |
마무리
Ceph에서 Erasure Code는 저장 효율을 극대화하면서도 고가용성을 유지할 수 있는 탁월한 기능이다. 하지만 그만큼 구성 난이도도 있고, OSD 구조나 CRUSH 맵 이해도 필요하다.
- 운영 환경에서는 k+m에 맞춰 충분한 OSD 확보
- Replica보다 더 많은 계산이 필요하므로 CPU 자원 고려
- 적절한 failure domain 설정 (rack, host 등)
Reference
https://docs.ceph.com/en/latest/rados/operations/erasure-code/
'Storage' 카테고리의 다른 글
| Minio란? (Object Storage) (2) | 2024.08.26 |
|---|---|
| Rook-Ceph란? (0) | 2024.02.20 |
| Ceph 노드 제거 및 추가 방법(mon/mgr/osd) (0) | 2022.09.21 |
| Ceph 란? (0) | 2022.07.29 |