RAID (Redundant Array of Inexpensive/Independent Disk) 란, 여러 개의 저장 장치 (예> 하드디스크 드라이브 등) 를 묶어서 하나의 고용량/고성능 저장 장치 ‘처럼’ 사용하는 기술이라고 할 수 있습니다.
혹시 사용하던 저장 장치가 손상된 경험을 해보신 적이 있나요? 특히 하드디스크는 자기 표면으로 구성되어 있어 아주 오랜 시간 동안 혹사(?)를 시킨다면 물리적인 손상 (베드 섹터) 이 발생이 할 가능성이 큽니다. 이 경우 심하면 하드디스크 전체가 사용할 수 없게되는, 흔히 ‘하드디스크가 깨졌다’ 고하는 상태가 되며 중요한 데이터를 손실하게 됩니다.
그런데 만약 서버의 하드디스크에 금융/군사 목적의 아주 중요한 데이터가 저장되어 있었는데 위와 같은 하드디스크의 문제가 발생했다면? (실제로 대 용량의 데이터들이 자주 입/출력 되는 하드디스크에서는 종종 일어나는 일입니다.) 백업 이라도 미리 되어 있었다면 다행이지만, 매번 복구할 때 마다 서버 가동이 중단되어야 하고 또 관련 작업들이 많아질 수 밖에 없겠죠.
따라서 RAID 를 사용하게 되면, 여러 디스크를 하나의 디스크 처럼 사용하게 되는 특성상 문제가 있는 디스크만 교체하면 되고 그 동안 다른 저장 공간에는 영향 없이 저장 장치가 운영될 수 있습니다. 저장 공간을 추가하기 위해 디스크를 추가할 때도 마찬가지입니다. (가용성 확보) 또한 문제가 발생한 디스크 대신 나머지 디스크 들이 문제 없이 역할을 해줄 수도 있게 됩니다. (안정성 확보)
이러한 RAID 를 예전에는 남는 저장 장치들을 재활용하여 사용하는 것이 주 목적이었다면 (Inexpensive), 기술이 발전한 지금은 독립된 저장 공간 (Independent) 을 주 목적으로 RAID 를 구성/사용하고 있습니다.
RAID 의 구현 방법은 크게 소프트웨어 방식과 하드웨어 방식으로 나누고, RAID 의 종류는 0 에서 6 까지의 종류가 있으며 복합된 방식 (예> 0+1, 1+0) 으로도 나눌 수 있습니다. 각각의 구현 방법 (물리적인 구성 방법) 과 종류 (논리적인 구성 방법) 에 대해서 다음과 같이 자세히 알아보겠습니다.
[RAID 의 구현 방식]
1. 하드웨어 방식
말 그대로 별도의 물리적인 장치인 RAID 카드를 이용해서 RAID 를 구현하는 방법이며, 서버와 같은 장치의 메인보드 PCIe 슬롯에 RAID 컨트롤러 카드를 별도로 장착하는 방법이 대표적입니다. 이 카드는 RAID 를 컨트롤하기 위한 칩셋, 방열판, 캐시로 사용하기 위한 메모리 등이 있고 디스크 들을 연결하기 위한 슬롯 (SAS, mini-SAS 등) 이 있습니다. 또한 전력 장애시 메모리(캐시) 에 있는 내용이 유지될 수 있도록 배터리 (BBU : Battery Backup Unit) 이 달려있는 제품도 있습니다.
보통 운영체제로 진입하기 이전에 RAID 카드의 설정 페이지에서 RAID 를 관리합니다. (구성 후 부팅 시 운영체제에서는 구성이 완료된 RAID 볼륨만 표시) 즉, RAID 를 구성하고 있는 단일 디스크의 정보는 RAID 카드를 통해서만 알 수 있습니다.
하드웨어 방식의 장점은, 별도의 컨트롤러 칩셋이 RAID 를 관리하기 때문에 다른 방식 대비 성능이 좋습니다. (특히 별도의 패리티 연산이 필요한 RAID 5 나 RAID 6 의) RAID 를 구성 할 수 있는 최대 디스크 개수도 더 많습니다. 그리고 디스크를 제거하여 다른 PC 나 서버로 이동시키면 기존 운영하던 RAID 볼륨을 변경하지 않고 거의 그대로 유지 할 수 있습니다. 단점은 비용이 비교적 많이 들고, (저렴한 카드들도 있지만, 비싼건 100만원 단위도 넘음) RAID 를 구성하는 단일 디스크의 분석이 어렵습니다.
2. 펌웨어 방식
비용이 비싼 하드웨어 방식의 RAID 카드 대신, 기능을 간소화 한 RAID 칩을 메인보드에 탑재하여 펌웨어(드라이버) 로 RAID 를 구현하는 방법입니다. 메인보드를 통한 RAID 구성 이므로, 하드웨어 방식과 같이 운영체제에 진입하기 전 BIOS 에서 RAID 를 구성합니다. 따라서 운영체제와는 별개로 구성이 됩니다. (운영체제에 영향을 주지 않으며, 반대로 운영체제로 부터도 영향을 받지 않음 – 운영체제에서 별도의 컨트롤도 불가능) 단, 메인보드를 변경할 경우에는 (예> Intel 메인보드 -> AMD 메인보드) 기존의 RAID 를 계속해서 사용하기 어려울 수 있습니다.
예전에는 하드웨어 방식의 성능이 비교적 더 좋았으나, 최근에는 펌웨어의 성능도 많이 개선되었습니다. 전반적으로 가격이 하드웨어 방식에 비해 더 저렴하지만 소프트웨어 방식에 비해서는 더 비싸고, 성능은 소프트웨어 방식 보다는 더 높지만 하드웨어 방식에 비해서는 조금 낮다고 볼 수 있습니다.
3. 소프트웨어 방식
운영체제 내에서 말 그대로 소프트웨어를 통해 RAID 를 구성하는 방식입니다. 따라서 운영체제가 인식하고 있는 저장 장치들을 통해 RAID 를 구성하게 됩니다. (운영체제에서 인식이 안되는 공간은 구성 불가) 또한 메인보드를 변경 하더라도 RAID 는 그대로 유지할 수 있으나 운영체제를 변경하게 되면 그렇지 않습니다. (예> 윈도우 -> 리눅스. 단, 윈도우의 디스크 가져오기 기능을 사용할 경우 유지할 수 있음)
소프트웨어 및 운영체제로 관리되는 RAID 의 특징을 그대로 나타내는 방식입니다. 예를 들면, 다양한 방법으로 RAID 를 구성할 수 있고, 용량이 다른 두 제품의 경우 RAID 를 구성하고 남는 공간에 단일 파티션, 혹은 다른 RAID 방식을 구성할 수도 있습니다. 그리고 소프트웨어로 구성을 하는 것이기 때문에 하드웨어 방식 보다는 호환성이 비교적 더 좋습니다.
[RAID 의 종류]
1. RAID 0
RAID 0 는 구성된 모든 디스크에 데이터를 똑같이 분할하여 저장하는 방식입니다. 이 때문에 스트라이핑 (Striping) 이라고도 부릅니다. RAID 0 구성을 위해서는 최소 2개 이상의 디스크가 필요하며, 전체 디스크를 모두 사용 하므로 성능은 디스크의 개수가 5 개라고 한다면 단일 디스크 5배의 성능을 냅니다. (용량도 5배)
단, 모든 디스크를 하나의 디스크 처럼 인식하여 모두 사용 하므로 하나의 디스크라도 문제가 발생하면 전체 RAID 가 문제가 생기게 됩니다. 따라서 성능과 용량은 최대한으로 사용 가능하지만, 안정성은 매우 떨어지므로 권장하는 방식이 아닙니다.
2. RAID 1
RAID 1 은 각각의 디스크에 데이터를 똑같이 복제하는 방식입니다. 이 때문에 미러링 (Mirroring) 이라고도 부릅니다. 따라서 디스크가 여러개가 있더라도 단일 디스크를 사용할 때와 사용 가능한 용량은 똑같습니다. RAID 1 구성을 위해서는 최소 2개 이상의 디스크가 필요하며, 3개 이상인 경우 2개의 디스크로만 구성이 가능할 수도 있습니다. (컨트롤러에 따라 다름)
쓰기 작업을 할 때, 모든 디스크에 똑같은 데이터를 복제해야 하므로 단일 디스크 대비 복제/연산 등의 처리를 해야 하는 시간이 추가될 수 있습니다. 그러나 읽기 작업을 할 때는 모든 디스크에서 읽어 들이기가 가능하므로 디스크의 갯수의 배수만큼 성능이 나올 수 있습니다. 또한 디스크 마다 데이터가 복제되어 있으므로 안정성이 높습니다. (10개 구성된 RAID 에서 9개 디스크가 오류나도 정상 사용 가능) 다만 구성 특성상 비용이 많이 들어갈 수 밖에 없는 구조입니다.
3. RAID 2
RAID 2 는 테스트 목적으로 드물게 사용되며, 기록용 저장 공간과 복구용 저장 공간을 별도로 분리하여 구성하는 방식입니다. 특히 복구용 데이터들을 기록하기 위해 많은 저장 공간이 사용되어야 하므로 효율성이 좋지 않다고 볼 수 있기에 현재는 많이 사용 되지 않습니다. 좀 더 자세히 알아보면, Bit 단위의 스트라이핑 (Striping) 방식이며 에러 체크 및 수정을 할 수 있도록 별도의 Hamming Code 를 사용하고 있습니다.
4. RAID 3
RAID 2 와 비슷한 방식이지만, Byte 단위로 스트라이핑 (Striping) 을 하며 에러 체크 및 수정을 위해 패리티 (Parity) 용 디스크 1개를 별도로 사용합니다. (입/출력이 잦은 패리티 코드가 저장된 디스크의 수명이 짧아집니다.) 따라서 용량 및 성능이 단일 디스크 대비하여 전체 개수 대비 1개가 감소하는 구성입니다. 최소 3개 이상의 디스크로 구성 가능하며, 1개 디스크에 에러가 발생할 경우 복구가 가능하지만 2개 이상의 디스크 또는 패리티 디스크에 에러가 발생하는 경우에는 복구가 어렵습니다. RAID 3 또한 너무 작은 단위 (Byte) 로 쪼개져서 현재는 거의 사용하지 않습니다.
5. RAID 4
위에서 다룬 RAID 3 와 동일한 방식이지만, 블록 (Block) 단위로 스트라이핑 (Striping) 을 하는 것이 차이점입니다. 블록 단위로 저장할 경우, 파일이 작을 때는 한 번의 작업으로 데이터를 읽을 수 있으므로 비교적 더 나은 성능을 발휘하게 됩니다.
6. RAID 5
RAID 4 와 같이 블록 (Block) 단위로 스트라이핑 (Striping) 을 하지만, RAID 5 에서는 에러 체크 및 수정을 위한 패리티 정보를 매번 다른 디스크에 저장합니다. 따라서 단일 디스크 방식 대비 용량이나 성능이 전체 디스크 갯수 보다 1개 적은 갯수의 배수 만큼 증가합니다. 최소 3개 이상 디스크가 필요하며, 2개 이상의 디스크에 에러가 발생할 경우에는 복구가 불가능 해집니다.
7. RAID 6
RAID 5 에서 에러 검출 및 수정을 위한 패리티 블록을 추가하여 이중화 한 방식이며, 각 패리티 블록은 매번 각기 서로 다른 디스크에 저장합니다. 따라서, RAID 5 대비 성능/용량을 조금 줄이는 대신 안정성을 더 높인 방식이라고 할 수 있겠습니다. 따라서, 단일 디스크 방식 대비 용량이나 성능이 전체 디스크 갯수 보다 2개 적은 갯수의 배수 만큼 증가합니다. 최소 4개 이상 디스크가 필요하며, 3개 이상의 디스크에 에러가 발생할 경우에는 복구가 불가능 해집니다.
8. 중첩 RAID (Nested RAID)
위에서 다룬 일반적인 표준 RAID (Standard RAID) 구성 들을 여러개로 묶어 다시 RAID 로 묶어서 구현하는 방식입니다. 예를 들어, 2개의 RAID 0 를 RAID 1 방식으로 그룹핑 하거나 2개의 RAID 1 을 RAID 0 방식으로 그룹핑 할 수 있습니다.
– RAID 0+1
여러 디스크에 번갈아 가며 저장하는 RAID 0 방식의 RAID 들을 상위에서 여러 디스크에 복제하여 저장하는 방식의 RAID 1 방식으로 다시 그룹핑 하는 방법입니다.
– RAID 1+0
여러 디스크에 복제하여 저장하는 RAID 1 방식의 RAID 들을 상위에서 여러 디스크에 번갈아 가며 저장하는 방식의 RAID 0 방식으로 다시 그룹핑 하는 방법입니다.
– RAID 5+0
블록 (Block) 단위로 스트라이핑 (Striping) 을 하며 에러 체크 및 수정을 위한 패리티 정보를 매번 다른 디스크에 저장하는 RAID 5 방식을 바탕으로, 여러 디스크에 번갈아 가며 저장하는 방식의 RAID 0 방식으로 RAID 5 디스크 들을 다시 그룹핑 하는 방법입니다. RAID 5+0 방식은 최소 6개 이상의 디스크가 필요합니다. RAID 5+0 방식은, 단일 RAID 구성 방식 대비 좀 더 나은 내장애성과 성능을 동시에 보장 하기도 합니다. 데이터들을 분산하여 저장하고 관리해주는 RAID 0 방식 덕분에 랜덤 엑세스의 경우에도 비교적 더 나은 속도를 보장하게 해주고, RAID 5 는 패리티 덕분에 내장에성 확보에도 도움이 되기 때문입니다. 특히 위 구성을 예로, 디스크가 최대 3개까지 장애가 발생해도 새 디스크로 교체 후 (Hot Spare) 리빌드 작업을 통해 디스크 구성의 원상 복구가 완료되면 데이터의 손실을 방지할 수 있습니다. (위 디스크들 중 아무거나 3개의 디스크에 장애가 발생할 경우, 복구를 위한 데이터 참조 디스크를 찾아 가보면 이해가 쉽습니다.)
– RAID 6+0
이중화 된 패리티 블록 들이 각기 다른 디스크에 저장되는 RAID 6 방식의 디스크 들을 RAID 0 방식으로 각 RAID 6 그룹들의 디스크에 분산하여 저장하는 방식입니다. RAID 6+0 은 최소 8개 이상의 디스크가 필요합니다.
– RAID 10+0
다른 디스크에도 똑같이 데이터를 저장하는 RAID 1 을 기반으로, 각기 다른 RAID 1 에 데이터를 분산하여 저장하는 RAID 0 방식으로 그룹핑 한 디스크 들을 다시 RAID 0 방식을 통해 전체적으로 데이터들을 분산하여 저장하는 방식입니다.
지금 까지 RAID 의 구현 방식과 종류에 대해 알아보았습니다. 필자의 경험에 비추어 봤을 때 중요한 것은, 저장 공간을 필요 및 설계에 따라 적합한 RAID 를 사용하면 되지만 이 후 RAID 의 종류나 구성에 따라 고장난 (Failure) 디스크 가 발생했을 때 빠르게 교체를 해주는 것입니다. 예를 들어, RAID 의 구성에 따라 어떤 상황에서는 디스크가 2개 이상 고장이 났을 때, 데이터 복구가 어려워질 수 있습니다. (RAID 구성 및 디스크 깨짐) 따라서 이 점을 유의하여 RAID 를 사용하고 유지/보수하는 것이 중요하겠습니다.
#Steven