[CS Study] Computer architecture - RAID

Frye 'de Bacon·2023년 12월 30일
0

Computer Science(CS)

목록 보기
39/40
post-thumbnail

RAID

개요

RAID는 복수 배열 저가/독립 디스크(Redundant Array of Inexpensive/Independent Disk)의 약어로 저장장치 여러 개를 묶어 고용량, 고성능 저장장치 1개와 같은 효과를 얻기 위해 개발된 기법이다.

저장 장치는 소모품으로서 장기간 사용하다 보면 물리적인 구동부가 있는 HDD는 물론, 전자적으로만 작동하는 SSD도 NAND 소자의 마모로 인해 읽기/쓰기 속도의 저하 혹은 그를 넘어 읽기/쓰기가 불가능한 불량 섹터가 발생하게 된다. 이 경우 불량 섹터의 데이터가 손상되는 것도 문제지만 이후 저장 장치에 저장되는 데이터의 무결성을 보장할 수 없으므로 장치를 통째로 폐기하게 된다.
RAID는 이처럼 저장 장치가 갑자기 고장 나는 경우를 대비하여 데이터의 가용성을 확보하기 위한 방법으로 사용되는 기법이며, 저장 장치의 고성능 구현을 목적으로도 사용된다.

본래는 저장 장치의 업그레이드 후 소위 '폐기하기엔 아깝고 단독으로 사용하기엔 성능이 부족한' 저장 장치를 재활용할 목적으로 사용된 기법이었으나(Inexpensive), 최근에는저장 장치의 성능이 향상되면서 독립적인(Independent) 디스크를 배열로 묶어 사용하는 기법으로 정의되는 추세이다.

RAID에서 사용되는 기술

  1. 스트라이핑(Striping)
    스트라이핑(Striping)은 데이터를 여러 조각으로 분산하여 여러 개의 디스크에 라운드 로빈(Round-Robin) 방식으로 기록하는 기술이다. 일종의 병렬 처리 기술로, 데이터를 하나의 디스크에서 불러오는 것보다 여러 디스크에 저장된 데이터 조각들을 동시에 불러와 모으는 편이 속도도 빠르고 각 디스크별로 가해지는 부하도 줄어들기 때문에 성능 면에서 이점을 얻을 수 있다.

    다만, 데이터의 조각을 저장하고 있는 디스크 중 하나라도 망가지면 해당 데이터의 무결성에 문제가 발생할 수 있다.

    스트라이핑을 통해 고성능 구현을 극도로 추구하는 RAID가 아래에서 설명할 RAID 0이다.

  1. 미러링(Mirroring)
    미러링(Mirroring)은 말 그대로 디스크를 거울에 비춘 것처럼, 동일한 데이터를 여러 개의 디스크에 동시에 저장하는 기술이다. 이 경우 디스크 하나가 망가져 폐기되더라도 다른 디스크에 동일한 데이터가 저장되어 있으므로 데이터를 온전히 보존할수 있다는 장점이 있다.

    다만 데이터의 성능이나 저장 공간 효율 측면에서는 이점이 없는 방법이며, 데이터의 가용성 측면에 중점을 두는 기술이라고 할 수 있다.

    미러링을 통해 데이터의 가용성을 극도로 추구하는 RAID 타입이 RAID 1이라고 할 수 있다.

  2. 패리티(Parity)
    패리티(Parity)는 RAID에서 사용하는 데이터 복구 수단으로서, 특정 알고리즘을 활용해 원본 데이터를 생성할 수 있는 추가 데이터를 말한다. 예를 들어 아래와 같은 RAID 5 구성의 경우 데이터별 패티리를 1개씩 생성하며, XOR 비트 연산이라는 계산법을 사용한다. 만약 데이터 A, B, C, D가 디스크 4개에 저장될 경우 우선 각 3개씩 나누어진 데이터를 XOR 연산으로 계산해 패티리를 생성한 뒤 이를 스트라이핑으로 저장한다.
    이 경우 2번 디스크가 망가지더라도 1, 3, 4번 디스크에 저장된 데이터 조각과 패리티를 이용하여 2번 디스크의 데이터 전체를 복구할 수 있다.


RAID의 종류와 특징

RAID 0

스트라이핑 기법만을 사용한 방식으로서, 아예 RAID 0을 스트라이핑이라고 부르기도 한다. 최소 2개 이상의 디스크가 필요하며, RAID를 구성하는 모든 디스크에 데이터를 분할하여 저장한다.

전체 디스크를 모두 동시에 사용하므로 성능은 단일 디스크 성능의 N배이며, 용량 역시 단일 디스크 용량의 N배가 된다.

다만 하나의 디스크라도 문제가 생길 경우 전체 RAID에 문제가 발생하게 되므로 안정성은 1/N이라고 할 수 있다.

성능을 극도로 추구한 방식으로, 안정성이 극히 떨어져 일반적인 서버 환경에서는 거의 사용되지 않는 RAID level이다.

RAID 1

미러링 기법만을 사용한 방식으로, 마찬가지로 RAID 1을 미러링이라고도 한다. 역시 최소 2개 이상의 디스크가 필요하며, RAID를 구성하는 모든 디스크에 데이터를 '복제'하여 기록한다.

모든 디스크에 데이터를 복제하므로 실제 디스크 용량은 단일 디스크 용량과 동일하며, write 작업 시 데이터를 복제하여 기록하므로 단일 디스크의 write 성능보다 떨어질 수 있다. 읽기 작업 시에도 전체 디스크에서 데이터를 읽어오므로 단일 디스크와 동일한 성능이 나온다.

다만 안정성을 극도로 추구한 방식이므로, 극단적으로 N-1개의 디스크가 고장 나더라도 데이터의 사용이 가능하다.

안정성이 중요한 시스템에서 사용할 수 있으나, 성능 대비 비용의 문제로 거의 사용되지않는 RAID level이다.

RAID 2

데이터를 bit 단위로 스트라이핑하여 저장하고, 에러 수정을 위해 Hamming code를 사용한다. m+1개의 데이터 디스크와 m개의 패리티 디스크로 구성하며(N = (m+1)+m), 따라서 최소 3개 이상의 디스크로 구성 가능하다. 패리티 디스크에 ECC(Error Correction Code)를 저장한다.

스트라이핑 방식임에도 에러의 체크 및 수정이 가능하나, ECC가 저장되는 패리티 디스크가 손상될 경우 문제가 발생할 수 있으며 패리티 정보를 하나의 하드 드라이브에 저장하는 RAID 4의 등장으로 현재는 사용되지 않는 RAID level이다.

RAID 3 / RAID 4

RAID 0, RAID 1의 단점을 보완하기 위해 등장한 RAID level으로 두 방식을 RAID 구성 방식은 거의 동일하다. 기본적으로 RAID 0과 같이 스트라이핑 방식을 이용해 성능을 높이고 디스크 용량도 온전히 사용할 수 있도록 한다. 그리고 여기에 에러 체크 및 수정을 위한 패리티 정보를 별도의 디스크에 저장한다. 따라서 최소 3개 이상의 디스크로 구성 가능하다.

두 방식의 차이는 RAID 3는 데이터를 바이트 단위로 나누어 디스크에 동등하게 분산 기록하고, RAID 4는 데이터를 블록 단위로 나누어 기록한다는 것이다. RAID 3의 경우 드라이브 동기화가 필수적이므로 많이 사용되지 않고 상대적으로 RAID 4가 더 많이 사용된다.

다만 패리티 코드를 단일 디스크에 저장하므로 패리티 디스크의 사용량이 높아 해당 디스크의 수명이 저하되며, 이러한 단점을 개선한 RAID 5가 나오면서 사용이 크게 줄어든 RAID level이다.

RAID 5

블록 단위로 데이터를 스트라이핑하여 저장하는 것은 RAID 4와 동일하나, Error correction을 위한 패리티를 모든 디스크에 나누어 저장함으로써 RAID 4의 단점을 개선한 방식이다. 3개 이상의 디스크로 구성 가능하며, 용량 및 성능이 단일 디스크 대비 N-1배 증가한다.

1개의 디스크에서 에러가 발생할 경우 복구가 가능하며, 2개 이상의 디스크 에러 시 복구가 불가능하다.

RAID 0에서 성능과 용량을 조금 희생하는 대신 안정성을 높인 RAID level로서, 현재 가장 많이 사용되는 RAID level이다.

RAID 6

RAID 5에서 성능과 용량을 조금 더 낮추고 안정성을 더 높인 RAID level이다. 기본적인 구조는 RAID 5와 동일하나, 패리티를 1개의 디스크가 아니라 2개의 디스크에 저장한다는 차이가 있다. 따라서 최소 4개의 디스크로 구성 가능하며, 용량 및 성능이 단일 디스크 대비 N-2배 증가한다. 그리고 2개의 디스크 에러 시에도 복구가 가능하다.

RAID 5 대비 안정성을 조금 더 중요시하는 서버에서 주로 사용한다.

Nested RAID

중첩 RAID는 Standard RAID, 즉 RAID 0 ~ RAID 6을 여러 개 중첩하여 사용하는 방식을 말한다. 예를 들어 2개의 RAID 0을 RAID 1로 다시 묶거나(RAID 0+1 / RAID 01), 2개의 RAID 1을 RAID 0으로 묶는 식(RAID 1+0 / RAID 10)이다.


참고 자료

profile
AI, NLP, Data analysis로 나아가고자 하는 개발자 지망생

0개의 댓글