RAID 10과 RAID 01 비교
이 두 RAID 레벨은 종종 엄청난 혼란을 야기하는데, 부분적으로는 두 용어가 서로 바꿔서 잘못 사용되기 때문이기도 하고, 단순히 잘못 이해되고 있기 때문이기도 합니다.
우선, 플러스 기호를 붙이거나 붙이지 않아도 된다는 점을 지적해야 합니다: RAID 10은 RAID 1+0이고 RAID 01은 RAID 0+1입니다. 이상하게도 RAID 10은 거의 플러스 기호를 붙여서 쓰지 않고, RAID 01은 거의 플러스 기호 없이 쓰지 않습니다. 스토리지 엔지니어들은 일반적으로 플러스 기호가 불필요하기 때문에 사용하지 않는다는 데 동의합니다.
이 두 RAID 레벨 모두 두 가지 서로 다른 단순 RAID 유형을 결합하여 만든 "복합" 레벨입니다. 둘 다 미러 기반의 비패리티 복합(중첩) RAID입니다. 두 레벨의 성능 특성은 본질적으로 동일합니다 – 미미한 오버헤드와 레이턴시, N은 배열의 드라이브 수이고 X는 배열에서 개별 드라이브의 성능일 때 NX의 읽기 속도와 (NX)/2의 쓰기 속도를 가집니다.
두 RAID 레벨의 차이점은 디스크 장애를 처리하는 방식입니다. 간략히 말하면 RAID 10은 거의 모든 합리적인 시나리오에서 극도로 안전합니다. 그러나 RAID 01은 배열 크기가 커질수록 상당히 위험해집니다.
RAID 10에서 단일 드라이브가 손실되면 RAID 0 스트라이프 내부의 단일 RAID 1 셋이 저하됩니다. 스트라이프 레벨에서는 저하가 발생하지 않으며 단 하나의 RAID 1 미러만 저하됩니다. 다른 모든 미러는 영향을 받지 않습니다. 즉, 위험에 노출되는 것은 이제 이중화 없이 보호 기능 없이 실행되는 단 하나의 드라이브뿐입니다. 다른 모든 미러링된 셋은 여전히 완전한 보호를 유지합니다. 따라서 우리의 노출은 데스크탑 컴퓨터에서 예상할 수 있는 것처럼 단 하나의 비보호 드라이브입니다.
저하된 RAID 10의 배열 복구는 가장 빠른 복구 시나리오입니다. 장애가 발생한 드라이브를 교체하면 해당 단일 미러만 재구축되는데, 이는 RAID 0 스트라이프 아래 RAID 1 레벨에서 발생하는 단순 복사 작업입니다. 즉, 전체 배열이 유휴 상태이면 미러링 프로세스가 최고 속도로 진행될 수 있으며 전체 배열은 이 과정이 진행되고 있다는 것조차 모릅니다. 드라이브 간 미러링은 매우 빠르고 효율적이며 신뢰할 수 있습니다. 이것은 이상적인 복구 시나리오입니다. 여러 미러가 동시에 저하되어 동시에 복구 중이라도 하나의 재구축이 다른 것에 영향을 미치지 않으므로 추가 영향이 없습니다. RAID 10의 위험과 복구 영향 모두 매우 잘 확장됩니다.
반면 RAID 01은 단일 드라이브를 잃으면 즉시 전체 RAID 0 스트라이프를 잃습니다. 일반적인 RAID 01 미러에는 두 개의 RAID 0 스트라이프가 있습니다. 즉, 전체 배열의 절반이 실패한 것입니다. 8개 드라이브 RAID 01 배열에 대해 이야기한다면, 단일 드라이브의 장애로 4개의 드라이브가 즉시 작동 불능 상태가 되고 사실상 실패한 것입니다(하드웨어를 교체할 필요는 없지만 드라이브의 데이터는 최신 상태가 아니므로 유용하게 사용하려면 재구축해야 합니다). 따라서 위험 관점에서, 전체 스트라이프의 장애로 볼 수 있습니다.
단일 디스크 장애 후 남은 것은 보호되지 않은 단 하나의 RAID 0 스트라이프뿐입니다. 이는 동등한 RAID 10 장애보다 훨씬 위험한데, 왜냐하면 위험에 노출된 드라이브가 하나의 격리된 하드 드라이브뿐이 아니라 최소 두 개, 잠재적으로 훨씬 더 많은 드라이브가 이 위험에 노출되기 때문이며 위험에 노출된 각 드라이브는 위험을 상당히 증폭시킵니다.
예를 들어, 가장 작은 RAID 10 또는 01 배열에는 4개의 드라이브가 있습니다. RAID 10에서 드라이브 하나가 실패하면, 배열을 재구축하기 전에 그 파트너 드라이브도 실패할 위험이 있습니다. 우리가 걱정하는 것은 그 드라이브 하나뿐이며, RAID 10 셋의 다른 모든 드라이브는 여전히 보호되고 안전합니다. RAID 01에서는 첫 번째 드라이브가 실패하면 RAID 0 셋의 파트너 드라이브가 즉시 쓸모없어져 사실상 실패한 것입니다. 남은 것은 두 개의 드라이브가 RAID 0만으로 보호 없이 실행되므로 RAID 10이 가졌던 것과 동일한 위험이 두 배로 존재합니다. 각 드라이브는 이전에 하나의 드라이브가 가졌던 것과 동일한 위험을 가집니다. 이는 최상의 시나리오에서도 우리의 위험을 훨씬 높게 만듭니다.
더 극적인 예를 위해 24개 드라이브 RAID 10과 RAID 01 배열을 살펴보겠습니다. 다시 RAID 10의 경우, 드라이브 하나가 실패하면 파트너 하나를 제외한 다른 모든 드라이브가 여전히 보호됩니다. 배열 크기의 증가는 추가 위험을 거의 추가하지 않습니다. 우리는 여전히 그 단 하나의 드라이브 실패만을 걱정합니다. 이와 대조적으로 RAID 01은 하나의 RAID 0 배열이 실패하여 단 한 번의 드라이브 장애로 12개의 디스크가 한번에 빠져나가고, 나머지 12개의 디스크는 어떤 보호도 없이 RAID 0 상태로 남게 됩니다. 12개 드라이브 중 하나가 실패할 확률은 단일 드라이브가 실패할 확률보다 분명히 훨씬 높습니다.
이것이 전체 그림은 아닙니다. 단일 RAID 10 디스크의 복구는 빠르며, 드라이브 간 직접 복사 작업입니다. 최소한의 리소스를 사용하고 단일 드라이브가 전체를 읽고 쓰는 데 필요한 시간만큼만 소요됩니다. RAID 01은 그렇게 운이 좋지 않습니다. 전체 배열의 작은 부분집합만 재구축하고 – 배열이 커져도 성장하지 않는 부분집합, 즉 4개 드라이브 RAID 10이나 40개 드라이브 RAID 10이나 장애 후 복구 시간이 동일한 – RAID 10과 달리, RAID 01은 전체 상위 배열의 절반 전체를 재구축해야 합니다. 4개 드라이브 배열의 경우 RAID 10의 두 배 재구축 작업이 필요하지만 24개 드라이브 배열의 경우 12배의 재구축 작업이 필요합니다. 따라서 RAID 01 재구축은 상당히 더 많은 위험에 노출되는 동안 더 오래 걸립니다.
RAID 01과 RAID 10의 성능 특성이 다르다는 꽤 지속적인 신화가 있지만, 그렇지 않습니다. 둘 다 사실상 제로 오버헤드 연산인 일반 스트라이핑과 미러링을 사용하며 처리 오버헤드가 거의 필요하지 않습니다. 둘 다 연결된 모든 디스크 장치에서 완전한 읽기 성능을 얻으며, 각각 미러링 작업으로 인해 쓰기 성능의 절반을 잃습니다(두 방향 미러를 가정할 때, 이는 두 배열 유형의 유일한 일반적인 사용입니다). RAID 01이나 RAID 10을 서로보다 빠르거나 느리게 만드는 요소가 단순히 존재하지 않습니다. 둘 다 매우 빠릅니다.
두 배열 유형의 특성을 고려할 때, RAID 10이 단일 배열 컨트롤러 내에 존재해야 하는 유일한 유형임이 분명합니다. RAID 01은 불필요하게 위험하며 아무런 이점도 없습니다. 동일한 용량 오버헤드를 사용하고, 동일한 성능을 가지며, 구현 비용도 같지만 RAID 10이 훨씬 더 신뢰할 수 있습니다.
그렇다면 왜 RAID 01이 존재하는 걸까요? 부분적으로는 무지나 혼란에서 비롯됩니다. 자체 복합 RAID 배열을 구현하는 많은 사람들이 RAID 01이 더 빠르다는 신화를 들었기 때문에 선택하며, RAID의 경우와 마찬가지로 왜 더 빠른지 조사하지 않고 신뢰성 및 기타 요소를 살펴보는 것을 잊어버립니다. RAID 01은 실수로 로컬 배열에만 구현됩니다.
그러나 RAID를 네트워크 레이어로 가져갈 때는 새로운 요소를 고려해야 하며, 드문 사촌인 RAID 61과 마찬가지로 RAID 01이 중요해질 수 있습니다. 네트워크 RAID 표기법을 통해 RAID의 로컬 레이어와 네트워크 레이어가 어디에 있는지를 나타냅니다. 이 경우 RAID 0(1) 또는 RAID 6(1)을 의미합니다. 괄호는 RAID 스택의 "최상위" 부분인 RAID 1 미러가 로컬 RAID 컨트롤러가 아닌 네트워크 연결을 통해 있음을 나타냅니다.
RAID 0(1)에서는 어떻게 보일까요? 각각 표준 RAID 0 배열이 있는 두 서버가 있고 이를 동기화하여 단일하고 신뢰할 수 있는 배열로 작동시키려면 DRBD(Linux 기반) 또는 HAST(FreeBSD 기반)와 같은 기술을 사용하여 각 서버의 로컬 스토리지에서 네트워크 RAID 1 배열을 만들 수 있습니다. RAID 1 배열은 높은 레이턴시, 낮은 대역폭의 LAN 연결을 통해 동기화 상태를 유지해야 하므로 이는 성능 오버헤드가 매우 크다는 것이 분명합니다. RAID 0(1)이 이 설정의 표기법입니다. 각 로컬 RAID 0 배열이 더 신뢰할 수 있는 RAID 6으로 대체된다면 전체 설정을 RAID 6(1)로 표기할 것입니다.
왜 네트워크를 통한 경우에는 RAID 01의 위험을 수용하고 로컬의 경우에는 수용하지 않을까요? 이것은 네트워크 링크의 특성 때문입니다. RAID 10의 경우, RAID 스택의 하위 레벨인 RAID 1 부분에 의존하여 보호하고 RAID 0이 위에 놓입니다. 이를 RAID 1(0)과 같은 네트워크 레벨에서 복제하면 각 호스트는 배열 데이터의 일부만을 나타내는 단일 미러를 가지게 됩니다. 배열의 어떤 노드에 문제가 생기거나 네트워크 연결이 실패하면 배열은 즉시 파괴되고 각 노드는 쓸모없고 불완전한 데이터만 남게 됩니다. 노드 장애의 높은 위험과 네트워크 연결 레벨에서의 위험이 네트워크 환경에서의 RAID 결정을 극도로 다르게 만드는 것입니다. 이 자체가 복잡한 주제입니다.
충분히 말하자면, 일반 RAID 배열 컨트롤러나 로컬 스토리지 및 소프트웨어 RAID를 사용할 때는 RAID 10만 사용하고 RAID 01은 절대 사용하지 마십시오.
