복수 배열 독립 디스크(Redundant Array of Independent Disks 혹은 Redundant Array of Inexpensive Disks)는 여러 개의 하드디스크에 일부 중복된 데이터를 나눠서 저장하는 기술이다. 

여러 개의 디스크를 하나로 묶어 하나의 논리적 디스크로 작동하게 하는데, 하드웨어적인 방법과 소프트웨어적인 방법이 있다. 하드웨어적인 방법은 운영체제에 이 디스크가 하나의 디스크처럼 보이게 한다. 소프트웨어적인 방법은 주로 운영체제 안에서 구현되며, 사용자에게 디스크를 하나의 디스크처럼 보이게 한다.

초기에는 HDD 업그레이드 후 폐기하기엔 아깝고 그렇다고 쓰기에는 성능이 떨어져서 계륵과 같은 HDD를 재활용할 목적으로 사용했다. 그래서 초기에는 Inexpensive로 사용하였는데 현재는 Independent 의미로 사용한다.

RAID는 저장장치의 가용성과 성능 향상에 의미를 두고 있다. 단순히 데이터 백업의 용도로 사용되는 기술이 아니다. 디스크의 고장나도 고장난 디스크만 교체해주면 서버 정지 하지 않아도 복구가 가능하다. 이런 기능을 보고 백업에 의미만 생각하지 않았으면 좋겠다. 요즘 같은 경우는 미러링 서버나 다른 데이터 백업 솔루션을 마련해 둔다.


1. RAID 0 - Striping, 스트라이핑(부르는 사람 맘인듯하다...난 스트리핑이라고 부름...)

여러 개의 멤버 하드디스크를 병렬로 배치하여 거대한 하나의 디스크처럼 사용한다. 데이터 입출력이 각 멤버 디스크에 공평하게 분배되며, 디스크의 수가 N개라면 입출력 속도 및 저장 공간은 이론상 N배가 된다. 다만 멤버 디스크 중 하나만 손상 또는 분실되어도 전체 데이터가 파손되며, 오류검출 기능이 없어 멤버 디스크를 늘릴수록 안정성이 떨어지는 문제가 있다. 따라서 장착된 하드디스크의 개수가 RAID-5 구성 조건에 충족되지 않는 등의 불가피한 경우가 아니라면 절대로 RAID 0으로 구성하지 않는 걸 추천한다.

 

2. RAID 2 - Mirroring

RAID로 묶인 디스크끼리 같은 데이터를 기록한다. RAID로 묶인 디스크 중 하나만 살아남으면 데이터는 보존되며 복원도 1:1 복사로 매우 간단하기 때문에, 서버에서 끊김 없이 지속적으로 서비스를 제공하기 위해 사용한다.

디스크를 늘리더라도 저장 공간은 증가하지 않으며, 대신 가용성이 크게 증가하게 된다. 상용 환경에서는 디스크를 2개를 초과해서 쓰는 경우가 드물지만, 극한 환경에서는 3개 이상의 디스크를 사용하기도 한다. 읽기 성능이 향상되기도 하지만 쓰기를 시도할 때에는 약간의 성능 저하가 뒤따른다.

 

3. RAID 2~4

오류정정부호(ECC)를 기록하는 전용의 하드디스크를 이용해서 안정성을 확보한다. RAID 2는 비트 단위에 Hamming code를 적용하며, RAID 3, 4는 각각 바이트, 워드 단위로 패리티를 저장한다. 하나의 멤버 디스크가 고장나도 ECC를 이용하여 정상적으로 작동할 수 있지만, 추가적인 연산이 필요하여 입출력 속도가 매우 떨어진다. 예를 들어서 디스크 1에 3, 디스크 2에 6을 저장하면 디스크 3에는 1+2의 값인 9를 저장한다. 이렇게 저장하면 디스크 1이 사라지더라도 디스크 2의 6의 값을 읽고, 디스크 3의 9의 값에서부터 디스크 1의 값 3을 읽을 수 있기 때문에 저장소 하나가 파손되더라도 데이터를 읽을 수 있는 것이다. 용량을 약간 희생하지만 하드 하나만 뻑가도 망할 수 있는 일부 레이드 시스템에 비해 매우 높은 가용성과 저장용량 효율을 보인다.

모든 I/O에서 ECC 계산이 필요하므로 입출력 병목 현상이 발생하며, ECC 기록용으로 쓰이는 디스크의 수명이 다른 디스크들에 비해 짧아지는 문제가 있어 현재는 사용하지 않는다.

 

4. RAID 5 

 

RAID 0처럼 데이터를 블록 단위로 디스크에 저장을 하는데 에러로 인한 손실 방지 패리티가 같이 저장된다, RAID 1처럼 디스크 1개가 고장이나도 고장난 디스크만 교체하면된다. 그런데 디스크가 두 개 이상 고장 나면 데이터가 모두 손실된다. 데이터베이스 서버 등 큰 용량과 무정지 복구 기능을 동시에 필요로 하는 환경에서 주로 쓰인다.

주의할점

(1) RAID 0보단 안전하다는 인식과 달리 오히려 많은 량(보통 8개 이상)의 디스크를 스토리지로 묶으면, 패리티 연산오류 발생 확률이 높아져서 인해 RAID 0으로 묶은 것보다 깨질 확률이 높아진다고 한다. 그러므로 대단위로 스토리지를 만드려면 RAID 6 또는 RAID 1+0을 권한다. 다만, 이는 레이드 대상 HDD가 7개 이하일 경우에는 해당되지 않는다.

(2) 고장난 장비를 교체하려다 고장 없는 하드디스크를 뽑는다면 RAID 전체가 망가진다. 동일 상황에서 RAID 6는 문제가 없다.

(3) 한 개의 디스크가 고장 났을 경우 고장난 하드를 교체하면 복구가 가능하지만 2개 이상의 디스크 고장이 나면 복구가 불가능하다.

즉 RAID 0에서 성능과 용량을 조금씩 줄이는 대신 안정성을 높인 레벨이라고 볼 수 있다.

 

RAID 6

RAID 5와 원리는 같다. 서로 다른 방식의 패리티 2개를 동시에 사용한다. 성능과 용량을 희생해서 가용성을 높인 셈. N개의 디스크를 사용하면 (N-2)배의 저장 공간을 사용할 수 있다. 비용이 RAID 5보다 더 비싸고, 디스크도 기본 4개 이상 확보해야 하므로 초기 구축 비용이 비싸다. 하드디스크를 대단위로 물려야 하고, 가용성의 필요성이 RAID 5보다 높아야 하는 상황에서 쓰인다.

 

6. Nested RAID

(1) RAID 0+1 

RAID 0로 구성된 하드디스크들을 RAID 1로 미러링 한다. 하드디스크 2개를 RAID 0로 구성 한 후 다른 하드디스크 2개에 RAID 1 미러링을 합니다. 이럴 경우 같은 데이터가 저장된 디스크 0 , 2 또는 디스크 1 , 3 가 같이 고장 또는 다운이 된다면 복구 할 수 없다. 

 

(2) RAID 1+0

 RAID 1로 미러링 된 디스크를 RAID 0으로 구성한다. RAID 0+1에 비해 디스크 장애 발생 시 복구가 수월하다.

 

더 많은 Nested RAID 가 있지만 그 부분은 내가 하지 않을 것 같아 직접 찾아보기 바란다.

+ Recent posts