Storage

Ceph Erasure Code 완벽 가이드: 설정, 실습, 그리고 Replica와의 비교

Somaz 2025. 9. 3. 08:35
728x90
반응형

Overview

대규모 스토리지 시스템에서 ‘안정성’과 ‘효율성’을 동시에 잡는 일은 쉽지 않다. Ceph는 이 문제를 해결하기 위해 ReplicaErasure Code라는 두 가지 데이터 보호 방식을 제공한다.

 

이 글에서는 특히 저장 효율이 뛰어난 Erasure Code의 설정 방법과 실습을 중심으로 설명하고, Replica와의 차이점도 명확히 짚어보겠다. 마지막엔 실습 중 마주칠 수 있는 오류 상황도 정리해 보겠다.

 

출처 : https://docs.ceph.com/en/latest/rados/operations/erasure-code/

 

 

 

 

📅 관련 글

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/

728x90
반응형

'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