RAID 끝판정리 (JBOD)

d3f4u1t·2024년 8월 18일

server engineer

목록 보기
1/6
post-thumbnail

들어가며

해당 글은 비전공자 및 IT업계에 발을 들이는 초심자도 이해하기 쉽도록 풀어 작성한 글 입니다
전공자의 지식으로 접근하였을 때에, 보다 적절치 않은 단어 사용이 존재할 수 있으나, 양해 바랍니다.
현재는 사용하지 않는 RAID 2, 3, 4 등은 제외하였습니다

RAID 구성 및 사용 이유

를 알아보기 전에, 귀찮으면 스킵해라.

우측 목차에서 바로 RAID 0 설명으로 가라...
이 설명 실무에서 안써서 나도 정의는 찾아서 적은거다

1. RAID란 무엇인가?

RAID는 다수의 디스크를 하나의 논리적 디스크처럼 사용하여 데이터를 저장하는 방식

각 RAID 구성은 데이터 보호, 성능 향상, 저장 용량 최적화 등 다양한 목표를 달성하기 위해 개발되었고, 현재 사용중이다

RAID 구성 방식은 하드웨어와 소프트웨어 방식으로 구현할 수 있으며, 주로 서버나 대규모 데이터 저장 장치에서 사용한다.

  • 고로, RAID 구성은, H/W적인 구성과, S/W적인 구성으로 나눌 수 있다.

RAID의 목표?
1. data 보호의 목적: 디스크 장애 시 데이터를 보호하여 손실을 방지.
2. 성능 향상: 여러 디스크에 병렬로 데이터를 읽고 쓰며 성능을 개선.
- 상기 [병렬]적인 읽기쓰기에 대해서는 본문에 설명되어 있음

2. RAID를 사용하는 이유

RAID를 사용하는 주된 이유에 대해 .araboja

a. 데이터 보호 및 신뢰성

디스크 고장은 하드웨어 시스템에서 발생할 수 있는 흔한 문제인데,
RAID는 데이터를 여러 디스크에 분산 저장하거나, 중복 저장함으로써 하나 이상의 디스크가 고장 나더라도 데이터 보호가 가능한것이 장점이다.

  • 예를 들어, RAID 1(미러링)은 동일한 데이터를 두 개 이상의 디스크에 복제하여 저장하기 때문에 한 디스크가 고장 나더라도 데이터 손실 방지가 가능하다.

b. 성능 향상

RAID는 여러 디스크에 데이터를 병렬로 읽고 쓰기 때문에 성능을 크게 향상시킬 수 있다는 장점이 있다

  • 특히 RAID 0(스트라이핑)과 같은 구성은 데이터를 여러 디스크에 분산 저장함으로써 읽기 및 쓰기 속도를 크게 개선할 수 있다.
  • 이러한 성능 향상은 데이터 처리 속도가 중요한 환경에서 유용하다

c. 스토리지 효율성

RAID는 여러 개의 물리적 디스크를 하나의 논리적 볼륨으로 묶어 관리하기 때문에, 큰 용량의 데이터를 효율적으로 저장할 수 있는 환경을 제공 가능하다

  • RAID 5와 같은 구성은 데이터 보호 기능을 제공하면서도 여러 디스크를 하나의 큰 스토리지 장치(저장 정치)로 사용할 수 있다

d. 가용성 및 안정성

서버나 데이터 센터 환경에서는 시스템 가용성과 안정성이 가장 중요한 요소 중 하나다.
RAID는 장애 발생 시에도 데이터 접근이 가능하도록 하여, 시스템의 가용성을 높이고, 안정적으로 운영 가능하다 .

  • 예를 들어, RAID 6은 두 개의 디스크가 동시에 고장 나더라도 데이터를 복구할 수 있는 기능을 제공

3. RAID 구성의 종류

RAID는 다양한 구성 방식이 존재한다.
각 방식은 각기 다른 방식에 사용된다. 해당 단락은 RAID의 대표적인 구성 방식에 대해 다룬다.

  • RAID 0 (스트라이핑)
  • RAID 1 (미러링)
  • RAID 5 (스트라이핑 + 패리티)
  • RAID 6 (이중 패리티)
  • RAID 10 (RAID 1+0)
  • JBOD (Just a Bunch Of Disks)

기본 개념들

- 병렬적 구조 : 데이터를 여러 개의 디스크에 나누어 동시에 저장하거나 읽는 방식이다

  • 이렇게 하면 여러 디스크가 동시에 일하기 때문에, 더 빨리 데이터를 처리할 수 있다.(이를 스프라이핑 이라고 한다)
  • 예를 들어, 디스크 A, B가 있으면, A에 data를 모두 저장하고, B에 저장하는것이 아닌, A와 B에 동시에 저장하는 방식이기 때문에, 각 디스크의 쓰기 속도를 모두 사용 가능하다
  • 이 방식은 주로 성능을 높이고, 대용량 데이터를 빠르게 처리해야 하는 서버나 시스템에서 많이 사용된다.

- 읽기 성능 : 저장된 무언가를 불러오는 속도를 의미한다

  • 예를 들어, 컴퓨터 디스크의 읽기 속도가 빠르면 저장된 게임, 저장된 사진, 저장된 문서 등을 키는 속도가 빠르다.
  • 저장된 윈도우를 부팅하는 속도가 빠르다 등

- 쓰기 성능 : 새로운 무언가를 작성하는 속도를 의미한다

  • 예를 들어, 컴퓨터 디스크의 쓰기 속도가 빠르면 새로운 게임을 다운로드 하는 속도가 빠르다
  • 핸드폰에서 컴퓨터로 파일 N개를 옮기는 시간이 빠르다
  • 압축된 파일을 원래 파일로 변환하여 저장하는 작업인, 압축풀기 속도가 빠르다 (압축하기 작업도 변환하여 저장을 시키는 작업이니까 마찬가지로 쓰기속도에 영향을 받는다)

1. RAID 0 (스트라이핑)

RAID 0은 최소 2개의 디스크를 사용하여 데이터를 나누어 저장하는 방식이다.
각 디스크에 데이터의 일부를 병렬로 저장함으로써 읽기와 쓰기 성능을 크게 향상시킨다.

  • 예를 들어, 디스크 3개를 RAID 0구조로 묶으면, 각 디스크 3개의 읽기/쓰기 성능을 사용할수 있으므로 성능 향상이 된다 < 라고 표기한 것.
  • 위 사진과 같이, A라는 데이터를 저장하면, disk0에 A1, disk1에 A2 . . . 이런식으로 순차적으로 데이터가 저장된다
  • 그냥 디스크 2개를 사용하면, 2개의 디스크를 하나로 묶어 사용하는 식으로 이해하면 편하다.

하지만 데이터 중복 저장이 없기 때문에 한 디스크가 고장 나면 모든 데이터가 손실될 수 있는 위험이 있다

  • 사실상 안전성이 극악이기 때문에, 서버실에서는 거의 사용하지 않는다

  • 장점: 빠른 데이터 읽기/쓰기 성능.

  • 단점: 데이터 보호 없음. 디스크 하나만 고장 나도 전체 데이터 손실.

  • 사용 사례: 높은 속도가 필요한 캐시, 임시 파일 저장소.

여기서 잠깐.

'도대체 왜 디스크 하나가 망가졌는데, 모든 데이터가 손실나지?' 라고 생각하는 당신을 위해 작성한다
여기서 데이터는 A라고 표기하였는데, A라는것은 사실상 

0101000100000011... 과 같은 2진수 형태의 데이터일 뿐이다.

0101000100000011... 이라는 데이터를 A 라고 하고
우리의 데이터를 디스크 2개로 이루어진 RAID 0에 저장한다 하였을 때에, 
A1[0101], A2[0001], A3[0000], A4[0011] ...

이런 방식으로 나뉘게 된다. (반드시 4개의 2진수 데이터로 구성되는게 아닌, 예를 든 것이다)
사진과 같은 형태에서, 만약 디스크 1번이 고장나면, 우리는 A2와 A4의 정보를 잃게 되고, 
전체적으로 A1, A2, A3, A4를 합친 A라는 데이터를 이룰 수 없게 된다

그렇기 때문에, 하나의 디스크가 고장이 나면, 전체의 데이터가 날라간다고 의미한 것이다.

2. RAID 1 (미러링)

RAID 1은 최소 2개의 디스크에 동일한 데이터를 복제해 저장하는 방식이다. (이를 미러링이라고 한다)
하나의 디스크가 고장 나더라도 다른 디스크에 동일한 데이터가 있어 안전하게 복구가 가능하다.

  • 그냥 디스크 하나 더 꽂아서 복사한다고 생각하면 편하다..
    읽기 성능은 향상될 수 있으나 쓰기 성능은 개선되지 않는다
  • 장점: 높은 데이터 보호 수준. 디스크 고장 시 데이터 복구 가능.
  • 단점: 저장 공간 효율이 낮음(디스크 하나에 대한 백업으로 사용).
  • 사용 사례: 중요한 데이터 저장, 백업이 중요한 환경.

3. RAID 5 (스트라이핑 + 패리티)

RAID 5는 최소 3개의 디스크를 사용하며, 데이터를 분산 저장하고 각 데이터 블록에 대해 패리티(Pariety) 블록을 생성해 다른 디스크에 저장한다.
한 디스크가 고장 나도 패리티 블록을 통해 데이터를 복구가 가능하다.

  • RAID 5는 성능과 데이터 보호 사이의 균형을 제공한다
  • 패리티 디스크만큼의 공간은 사용하지 못하는 공간이다.
    ( 4개의 디스크를 사용하면, 1개의 디스크 용량은 패리티 디스크로 사용되어, 해당 공간만큼 사용하지 못한다.)
  • 장점: 높은 읽기 성능, 저장 공간 효율성 향상, 디스크 하나 고장 시 복구 가능.
  • 단점: 쓰기 성능이 저하될 수 있음, 복구 시간이 길어질 수 있음.
  • 사용 사례: 성능과 데이터 보호가 모두 중요한 파일 서버, 데이터베이스 서버.

여기서 잠깐.

'도대체 패리티 블록이란것은 무엇이며, 이것으로 어떻게 데이터를 복구한다는 의미인가?'

자 다시, 여기서 말하는 데이터란 0101000100000011... 과 같은 2진수 형태의 데이터이다!
계속하여, 패리티 블록은 [XOR 연산]을 이용하여 데이터를 복구시킨다.

XOR 연산에 대해 간략히 알아보자면, 
두 개의 비트(0 혹은 1)가 입력될 때, 두 입력이 서로 다르면 1을, 같으면 0을 출력하는 논리 연산이다 
쉽게 말해, 두 입력이 서로 다를 때 참(True), 같을 때 거짓(False)을 반환하는 연산이다

위의 말은 무시하고, (⊕ 기호는 XOR 을 나타낸다)
0 ⊕ 0 = 0
0 ⊕ 1 = 1
1 ⊕ 0 = 1
1 ⊕ 1 = 0

라고 생각하면 된다. (자세한건 그냥 구글링해서 찾아라)
조금 보기 쉽게 표로 정리하자.

표1_디스크가 멀쩡할 경우

DISK 1DISK 2DISK 3DISK 4
A blockA1 = 0A2 = 0A3 = 0Parity 0 ⊕ 0 ⊕ 0 = 0
B blockB1 = 0B2 = 1Parity 0 ⊕ 1 ⊕ 0 = 1B4 = 0
C blockC1 = 0Parity 0 ⊕ 0 ⊕ 1 = 0C3 = 0C4 = 1
D blockParity 0 ⊕ 0 ⊕ 0 = 0D2 = 0D3 = 0D4 = 0

표2_디스크 3이 죽었을 경우

DISK 1DISK 2DISK 3(사망)DISK 4
A blockA1 = 0A2 = 0사망Parity 0 ⊕ 0 ⊕ 0 = 0
B blockB1 = 0B2 = 1사망B4 = 0
C blockC1 = 0Parity 0 ⊕ 0 ⊕ 1 = 0사망C4 = 1
D blockParity 0 ⊕ 0 ⊕ 0 = 0D2 = 0사망D4 = 0
우리는 3번 디스크가 사망했을 때에, 각 A, B, C, D 블럭마다 저장된 패리티 디스크를 이용하여 
디스크 3의 A3, Bp, C3, D3 을 복구할 수 있다

하나의 예로, 디스크 3번을 빼서 버리고 새로운 디스크를 넣었다고 하자.

[그렇다면, A3의 자리에 무엇이 있어야 Ap의 데이터 0이 나오는가?] 를 유추하여
[A3에 0이 있어야만, Ap에 0이 나올 수 있다] 
라는 방식으로 인해 디스크 하나가 죽어도 데이터를 보존 할 수 있는것이다.

해당 예시는 각 블록에 데이터가 1비트(0 or 1)만 있다고 가정하여 0번째 값만 XOR 연산을 한 것이고

010101... 각 데이터 블록마다 저장된 0번째, 1번째, 2번째 ... xor 연산을 이용하여 
패리티 블록을 형성하고, 망가진 디스크 교체 이후 
해당 데이터를 연산(패러티 블록 data와 xor 연산)을 통해 살려낸다

패리티 블록은 [연산을 수행하는 데이터가 담긴 블록(영역)]이며,
죽은 디스크를 새 디스크로 바꾼 이후, 패리티 디스크와의 XOR 연산을 통해 복구하는것을 
보통 [Rebuild] 라고 한다.

때문에, 2개 이상의 디스크가 죽으면 데이터는 손실된다

4. RAID 6 (이중 패리티 방식)

RAID 6은 RAID 5의 확장판으로, 패리티 블록을 두 개씩 생성해 두 개의 디스크가 동시에 고장 나도 데이터를 복구할 수 있도록 한다.
RAID 6은 RAID 5보다 안정성이 높지만, 더 많은 디스크 공간을 패리티에 할애해야 한다.

  • RAID 5가 1개의 디스크 공간(패리티 디스크 만큼의 용량)을 사용하지 못하는 것 처럼, n개의 디스크로 RAID 6을 구성하면, n-2개만큼의 저장공간을 사용할 수 있다
  • RAID 6는  XOR 연산이 아닌,  Reed-Solomon 연산을 활용한다
  • 장점: 두 개의 디스크 고장에도 데이터 복구 가능.
  • 단점: 쓰기 성능 저하, 패리티 블록 때문에 저장 공간 비효율성 증가.
  • 사용 사례: 매우 중요한 데이터를 다루는 환경, 고가용성이 필요한 데이터 센터.

여기서 잠깐.

[Reed-Solomon란 무엇인가?] 라고 생각하는 당신.. 아쉽지만 해당 영역까지 설명하면
더 이상 비전공자나 초심자들을 위한 문서가 아니게 되기 때문에, 
해당 기술에 관심이 있는 분은 하기 Velog를 참고하시길 바랍니다.

Reed-Solomon란 무엇인가?

5. RAID 10 (RAID 1+0, 미러링 + 스트라이핑)

RAID 10은 RAID 1과 RAID 0을 결합한 방식으로, 데이터를 먼저 미러링(복제)한 이후, 각 미러링된 데이터를 스트라이핑하여 성능과 데이터 보호를 동시에 제공합니다.
때문에 최소 4개의 디스크가 필요하며, 고성능과 높은 안정성을 동시에 추구할 수 있는 구성이지만, 저장 공간 효율이 떨어지는 단점이 있다

  • 이미지 상으로도 저장 공간 효율이 떨어지는것이 보이니, 부차적으로 설명하지는 않겠다
  • 그럼에도 데이터 유실나면 끝나는 여의도쪽 데이터센터(금융권 등)에서는 종종 사용하는것을 볼 수 있다(필자가 일한 경험이다)
  • 장점: 고성능과 높은 데이터 보호 제공.
  • 단점: 저장 공간 비효율성, 많은 디스크 필요.
  • 사용 사례: 고성능과 고안정성이 필요한 엔터프라이즈 서버, 대규모 데이터베이스.

6. RAID 01 (RAID 0+1, 스트라이핑 + 미러링)

RAID 01은 RAID 0과 RAID 1을 결합한 방식으로, 먼저 데이터를 스트라이핑(분산 저장)한 후, 그 스트라이핑된 데이터 배열을 미러링하여 성능과 데이터 보호를 동시에 가진다는 장점이 있다
이 구성은 최소 4개의 디스크가 필요하며, 성능 향상과 데이터 보호를 모두 추구할 수 있지만, 저장 공간 효율이 떨어지는 단점이 존재한다

  • RAID 01은 성능과 데이터 보호를 동시에 제공하지만, 저장 공간 효율이 떨어지고 데이터 손실에 취약할 수 있으므로, 더 높은 신뢰성과 효율성을 원하는 경우 RAID 10 같은 다른 RAID 구조를 권장한다
  • 장점: 성능 향상(스트라이핑)과 데이터 보호(미러링) 제공.
  • 단점: 저장 공간 비효율성, 하나의 RAID 0 배열에서 여러 디스크가 동시에 고장 나면 데이터 손실 위험.
  • 사용 사례: 성능과 데이터 보호를 동시에 제공해야 하는 환경, 예를 들어 성능이 중요한 중소기업 서버나 비즈니스 애플리케이션에서 사용되는 경우도 존재함

7. RAID 50 (RAID 5 + 스트라이핑)

RAID 50은 RAID 5와 RAID 0을 결합한 방식으로, 여러 RAID 5 배열을 스트라이핑하여 구성한다.

  • 이 방식은 RAID 5의 데이터 보호 기능을 유지하면서도 RAID 0의 성능 향상을 추가로 가능한 장점이 있다.
    최소 6개의 디스크가 필요하며, 높은 성능과 데이터 보호를 동시에 요구하는 환경(사용자 개인정보DB 구축, 금융, 공공, 민관 data server 등)
  • 장점: 높은 성능과 데이터 보호, 효율적인 저장 공간 사용.
  • 단점: 복잡한 구성, 많은 디스크 필요.
  • 사용 사례: 성능과 안정성을 동시에 중시하는 대규모 스토리지 시스템.

8. JBOD (Just a Bunch Of Disks)

JBOD는 RAID의 한 종류로 간주되지는 않지만, 여러 개의 독립된 디스크를 하나의 논리적 볼륨으로 묶는 방식이다
JBOD에서는 각 디스크가 개별적으로 작동하며, 특정 디스크가 고장 나더라도 나머지 디스크의 데이터는 유지된다

  • JBOD는 단순히 여러 디스크를 하나의 대용량 저장 장치처럼 사용하고자 할 때 유용하다
  • 일반적으로 기업들이 낮은 등급 data를 관리하거나, 임시 대용량 저장소, 테스트배드, 데이터 백업용으로 사용한다
  • 장점: 디스크 고장 시 나머지 디스크는 정상적으로 작동, 비용 효율적.
  • 단점: 데이터 보호 기능 없음, 성능 향상 없음.
  • 사용 사례: 대용량 저장 공간이 필요한 환경에서 저렴하게 디스크 추가.

여기서 잠깐.

단순히 JBOD 구조 이미지를 보았을 때에, 'RAID 0과 같은 개념이 아닌가?' 라고 생각할 수 있다.
그렇지 않다.

두 구조의 차이로는 RAID 0은 데이터를 병렬적으로 저장하는 반면,
JBOD는 각 디스크가 독립적으로 작동한다. 즉, 스트라이핑에 대한 개념이 없다.

조금 다른말로, [각 데이터 블록을 병렬적으로 저장하는 것], 이 아닌, 
[각 데이터 블록을 순차적으로 쌓는 구조]라고 이해하면 조금 더 편할듯 하다

RAID 100GB 디스크 3개 : 300GB 디스크 1개로 인식
JBOD 100GB 디스크 3개 : 100GB 디스크 3개로 인식

고로, A 데이터는 A데이터를 저장하는 디스크에 마운트 되므로, 
특정(예를 들어 A) data를 다루고 싶을 때에, A 디스크 영역만 접근하면 된다는 장점도 있다
 - 해당 디스크 Fault(고장)시에는 다른 구조와 달리, 
   [해당 디스크에 담겨있는 data 영역을 직접 언마운트(umount)] 이후 디스크가 교체되어야 한다
 - 만약 해당 umount 작업을 하지 않은 상태로, 디스크가 교체된다면.. 
   data가 유실되는 끔직한 경험을 할 수 있다 
   (필자가 엔지니어로 근무했을 당시, IDC측에서 실제로 일어났던 일이다..)


간단히, JBOD는 데이터 보호 기능이 없고,
데이터 보호는 일반적으로 미러 서버를 구성하여 관리하곤 한다

마무리

RAID는 다양한 구성을 통해 데이터 보호와 성능을 향상시킬 수 있는 유용한 기술이다

각 RAID 수준은 특정한 사용 목적에 맞게 설계되었으며, 비용, 성능, 안정성 요구사항에 따라 적절한 구성을 선택해야 한다
또한 JBOD 같은 대안도 적절한 상황에서 유용하게 활용될 수 있다
데이터 손실의 위험을 줄이고자 한다면, RAID를 적절히 구성하는 것과 함께 정기적인 백업이 필수적이라는 점을 기억하자..


이렇게 RAID와 관련된 다양한 기술에 대해 살펴보았습니다.
자신에게 적합한 RAID 구성을 선택하여 데이터를 안전하게 보호하고, 시스템의 성능을 최적화해 보시기 바랍니다.

사실 레이드를 구성할 정도에 사용되는 서버용 디스크는 jonna비싸다..

profile
DevOps / IaaS, SaaS provider

0개의 댓글