Ceph의 Erasure Coding이란?
Ceph는 객체 스토리지 시스템으로서 대규모 데이터 센터에서 사용되며, 분산 파일 시스템과 같은 다양한 데이터 스토리지 솔루션을 제공합니다. Ceph는 특히 데이터 보존성과 가용성을 보장하기 위해 Erasure Coding이라는 기술을 사용합니다. Erasure Coding은 데이터의 일부를 유실해도 원본 데이터를 복구하는 방법으로서 RAID와 비슷한 기능을 합니다. 하지만 RAID는 디스크에서 발생하는 싱글 포인트 오브 실패(SPOF) 문제로 인해 Ceph에서는 대안으로 Erasure Coding을 사용합니다.
Erasure Coding의 개요
Erasure Coding은 여러 장치나 노드에서 데이터 조각을 나누고, 노이즈를 추가하는 방식으로 데이터의 안정성을 확보하는 방법입니다. 예를 들어, 10GB의 데이터를 10개의 데이터 조각으로 나누고, 각 데이터 조각에 3개의 패리티 데이터를 추가하여 총 40GB의 데이터로 만듭니다. 이때, 어떤 노드에서 데이터 조각 2개와 패리티 데이터 1개가 유실된다면, 남은 8개의 데이터 조각과 2개의 패리티 데이터를 사용하여 원본 데이터를 복구할 수 있습니다.
Erasure Coding은 기본적으로 RAID와 비슷한 개념입니다. 그러나 Erasure Coding은 RAID와는 다르게 여러 장치나 노드에 데이터를 분산 저장하기 때문에, RAID와 달리 디스크의 단일 장치 오류(SPOF) 문제가 발생하지 않습니다.
Ceph에서의 Erasure Coding 구현
Ceph에서는 다양한 Erasure Coding 프로파일을 지원합니다. 이 프로파일은 데이터 조각의 크기, 패리티 조각의 수 등을 결정합니다. Ceph에서 가장 많이 사용되는 Erasure Coding 프로파일은 jerasure와 isa입니다.
jerasure
jerasure는 Reed-Solomon Erasure Coding 알고리즘을 사용합니다. 이 알고리즘은 데이터 조각과 패리티 조각의 크기를 동일하게 나누어 저장합니다. 예를 들어, 10GB의 데이터를 10개의 데이터 조각과 10개의 패리티 조각으로 나눈다면, 각각의 데이터 조각과 패리티 조각의 크기는 1GB가 됩니다. 이 경우, 5개 이상의 데이터 조각과 패리티 조각이 남아 있으면 원본 데이터를 복구할 수 있다
isa
isa는 Intel Storage Acceleration Library에서 사용하는 Erasure Coding 알고리즘입니다. 이 알고리즘은 데이터 조각의 크기를 조절하여 저장합니다. 예를 들어, 10GB의 데이터를 4개의 데이터 조각과 2개의 패리티 조각으로 나눈다면, 각 데이터 조각의 크기는 2.5GB가 됩니다. 이 경우, 3개 이상의 데이터 조각과 패리티 조각이 남아 있으면 원본 데이터를 복구할 수 있습니다.
Erasure Coding의 장단점
Erasure Coding은 데이터 보존성과 가용성을 보장하기 위해 사용됩니다. RAID와 달리 디스크의 단일 장치 오류(SPOF) 문제가 발생하지 않기 때문에, 대규모 데이터 센터에서 데이터의 안정성을 보장하기 위해 많이 사용됩니다. 또한, Erasure Coding은 데이터를 분산 저장하기 때문에 스토리지 공간을 효율적으로 사용할 수 있습니다.
하지만 Erasure Coding은 데이터를 복구하는 과정에서 오버헤드가 발생할 수 있습니다. 데이터 조각과 패리티 조각을 계산하는 과정이 매우 복잡하기 때문에, 복구 시간이 길어질 수 있습니다. 또한, Erasure Coding은 데이터를 여러 조각으로 분산 저장하기 때문에, 데이터의 접근 시간이 느려질 수 있습니다.
Ceph에서의 Erasure Coding 사용 방법
Ceph에서는 Erasure Coding을 사용하여 데이터의 안정성을 보장할 수 있습니다. Erasure Coding을 사용하려면, 먼저 Ceph 클러스터에 Erasure Coding 프로파일을 생성해야 합니다. 다음은 jerasure 프로파일을 생성하는 예시입니다.
ceph osd erasure-code-profile set jerasure \ k=4 \ m=2 \ plugin=jerasure \ technique=reed_sol_van
위 명령어에서 k는 데이터 조각의 수, m은 패리티 조각의 수를 나타냅니다. plugin은 사용할 Erasure Coding 알고리즘을 나타내며, technique는 해당 알고리즘에서 사용할 테크닉을 지정합니다.
이후에, Erasure Coding을 사용하여 데이터 풀(pool)을 생성할 수 있습니다. 다음은 erasure-pool이라는 이름의 Erasure Coding을 사용하는 데이터 풀을 생성하는 예시입니다.
ceph osd pool create erasure-pool 128 \ erasure jerasure \ k=4 \ m=2
위 명령어에서 128은 데이터 풀의 크기를 나타내며, erasure는 데이터 풀의 타입을 erasure는 데이터 풀을 Erasure Coding으로 생성한다는 것을 나타냅니다. jerasure는 사용할 Erasure Coding 프로파일을 지정합니다. k와 m은 이전 명령어에서 설정한 값과 일치해야 합니다.
이제, 데이터를 Erasure Coding을 사용하여 데이터 풀에 저장할 수 있습니다. 예를 들어, test-object라는 이름의 오브젝트를 Erasure Coding을 사용하여 erasure-pool 데이터 풀에 저장하는 명령어는 다음과 같습니다
rados -p erasure-pool put test-object <filename>
이 명령어에서 <filename>은 저장할 파일의 경로와 이름을 나타냅니다.
데이터를 복구하기 위해서는 rados 명령어를 사용하여 데이터를 복구할 수 있습니다. 예를 들어, test-object 오브젝트를 다른 파일로 복구하는 명령어는 다음과 같습니다.
rados -p erasure-pool get test-object <new-filename>
위 명령어에서 <new-filename>은 복구된 파일의 경로와 이름을 나타냅니다.
마치며
Erasure Coding은 대규모 데이터 센터에서 데이터의 안정성과 가용성을 보장하기 위해 많이 사용되고 있습니다. Ceph에서도 Erasure Coding을 사용하여 데이터를 안전하게 보관할 수 있습니다. 이 글을 통해 Erasure Coding의 원리와 Ceph에서의 사용 방법을 살펴보았습니다.
'Life with AI > Research with AI' 카테고리의 다른 글
[Ceph Storage] Ceph Administration Tool CLI 명령어 (0) | 2023.03.05 |
---|---|
[Ceph Storage] Rebalancing 기능 (0) | 2023.02.25 |
[Ceph Storage] CRUSH 알고리즘과 CRUSH Map (0) | 2023.02.23 |
[Ceph Storage] Failover의 종류와 방법 (0) | 2023.02.22 |
[Ceph Storage] Pool의 개념과 활용 (0) | 2023.02.22 |
댓글