하드디스크도 합체한다 - 레이드(RAID) 디스크 구성의 이해
유명한 바퀴벌레약 이름과 똑같은 ‘레이드(RAID)’ 디스크 어레이 기술 은 최근 들어 일반 사용자들에게 주목받고 있지만, 실은 서버나 스토리지 분야에서는 이미 십수 년 전부터 사용되던 중요한 기술이다.
디스크 어레이 (Disk Array)란 단어 그대로, 각각의 하드디스크를 굴비 엮듯 하나로 엮어 하나 (또는 그 이상)의 논리 드라이브로 구성하는 기술을 의미한다. 어려운가? 하긴 말하는 본인도 어렵다.
예를 들자. 1GB짜리 ‘야동’ 파일이 하나 있다. 이걸 하드로 복사하고 싶은데, 내 컴퓨터 디스크는 500MB, 300MB, 300MB짜리 3개로 되어 있어 어떤 디스크로도 1GB 파일을 복사할 수가 없다. 이런 경우를 일컬어 어처구니가 없다 고 한다(참고로 ‘어처구니’는 맷돌의 손잡이 부분을 뜻하는 순우리말이다. 맷돌을 사용하려는데 손잡이인 어처구니가 없다면… 정말 어처구니없는 상황인 것이다).
하여튼 위와 같은 경우에 3개의 디스크를 하나로 묶어 1.1GB짜리 단일 드라이브로 사용할 수 있도록 하는 게 디스크 어레이 기술, 나아가서는 레이드 다. 초기에는 'Redundant Array of Inexpensive Disks' 의 약자로 통용됐다. 우리말로 하면 '저가 디스크의 다중 배열' 정도의 의미로, 앞서 예로 든 저용량 디스크 여러 개를 연결해 하나의 디스크로 사용케 하는 기술이었다.
그러다 최근에는 'Redundant Array of Independent Disks(독립 디스크의 여분 배열)' 의 약자로 바뀌었다. 왜냐하면 하드디스크 용량이 점차 커지면서 저장 용량이 아닌, 데이터 보호 또는 디스크 성능 문제 때문에 적용하는 경우가 많아졌기 때문이다.
레이드 구성 설정 화면
자 그럼 이 레이드에 대해 차근차근 알아보도록 하자.
1. 레이드 구성 방식에 따른 분류 - 하드웨어적 레이드 vs 소프트웨어적 레이드
레이드 구성을 사용하기 위해서는 기본적으로 레이드 컨트롤러(제어기) 가 필요하다. 서버나 스토리지급에서는 별도의 어댑터 카드를 장착한다. 왜냐하면 레이드를 구성하고 데이터를 처리하는 데 부하가 많이 걸리기 때문이다. 이 때문에 레이드 컨트롤러에는 프로세서와 메모리 등이 따로 달려 있다. 이런 레이드 컨트롤러는 상당히 비싸다.
별도 어댑터 카드 형태가 아닌 메인보드에 내장 된 형태도 있다. 요즘 흔히 사용되는 S-ATA용 메인보드가 대개 기본적인 레이드를 지원하고 있다. 물론 제품에 따라 지원하지 않기도 하니 사전 확인이 필요하다.
이렇게 별도의 어댑터 카드나 내장 칩을 통해 레이드를 구성, 설정하는 형태를 ‘하드웨어적 레이드 구성’이라 한다. 이에 따라 레이드를 적용하기 위해서는 별도의 컨트롤러를 구매하거나, 이를 지원하는 메인보드를 준비해야 하겠다.
인텔 S-ATA 레이드 컨트롤러. 별것 아닌 듯 하지만 수십만 원을 호가한다
한편 소프트웨어적 레이드는 별도의 레이드 컨트롤러 없이 운영체계 지원만으로 구성하는 레이드 다. 대부분의 운영체계가 이를 지원하고, 특히 윈도우 서버 운영체계나 리눅스 ES/AS 등의 서버용 운영체계가 잘 지원하고 있다. 하지만 소프트웨어는 어디까지나 소프트웨어다.
하드웨어적 구성에 비해 성능향상 폭이 작고 안정성도 떨어진다. 따라서 소프트웨어 레이드는 ‘그냥 이런 게 있구나’하는 정도로만 이해하고, 실제로 적용/사용할 생각은 하지 않는 게 좋다. 특히 중요 업무나 서비스 등에 적용했다간 낭패를 볼 가능성이 매우 크니 주의 바란다.
리눅스에서 설정하는 소프트웨어 레이드
2. 레이드 레벨(Level)에 따른 분류 - 레이드 0, 레이드 1, 레이드 5 등
레이드는 앞서 말한 대로 여러 개의 디스크를 하나로 묶는 기술 이다. 이렇게 디스크를 하나로 연결하는 데는 몇 가지 방법이 있다. 레이드에서는 이를 레벨(Level) 이라 하고 있는데, 이 레벨에 따라 구성과 특징이 정확히 구분된다. 현재까지 공개된 레이드 레벨은 약 15가지 가 있다. 이 중 일반 사용자에게 유용한 레벨은 레이드 0, 레이드 1, 레이드 5, 레이드 1+0 정도다(나머지 레벨은 특정 서버나 스토리지 등의 기업용 솔루션에 적용된다).
레이드로 묶기 위해서는 우선 여러 개의 하드디스크를 준비해야 한다. 여기서 디스크란 물리적 디스크 , 즉 실제로 메인보드에 연결되는 하드웨어를 의미한다. 따라서 하나의 디스크를 논리적으로 나눈 '파티션'을 대상으로는 레이드를 구성할 수 없다.
그리고 레이드 컨트롤러 칩(메인보드 내장)이나 카드가 필요하다. 물론 앞서 언급한 대로 칩/카드가 없어도 운영체계 자체가 지원하는 소프트웨어 레이드도 적용할 수 있지만, 테스트 목적이 아닌 이상 절대 권장하지 않는다. 더욱 확실하고 안정적인 레이드 구성 및 운영을 위해서는 별도의 레이드 컨트롤러 카드를 장착하는 게 역시 바람직하다.
레이드 0 - 스트라이프 세트
레이드 0라고도 하고 '스트라이프 세트' 라고도 한다. 스트라이프(stripe)는 우리말로 '줄무늬'나 '줄'을 의미하는데, 그 의미 그대로 여러 개의 디스크를 한 줄로 엮어 하나의 드라이브로 만든다 는 소리다.
예를 들어 500GB 하드 두 개를 레이드 0로 묶으면 1TB짜리 드라이브 하나가 생성된다. 디스크가 몇 개라도 관계 없다. 묶는 대로 용량은 증가한다. 단, 500GB와 1TB 하드를 레이드 0로 묶을 경우 1.5TB가 되는 게 아니라 1TB가 됨을 기억하라. 즉 레이드로 묶이는 하드디스크 용량은 기본적으로 작은놈을 기준에 하향 조절된다(공식으로 풀자면 (500GB+1TB)-500GB=1TB가 되는 것이다).
레이드 0의 가장 큰 장점은 '데이터 입출력 속도의 향상' 이다. 데이터를 블록 단위(데이터 저장의 최소 단위)로 잘게 쪼개, 각각의 하드디스크 분산 전송하기 때문에 입출력 속도가 극대화 된다. 따라서 레이드 0는 데이터 입출력 속도가 높아야 하는 환경, 예를 들어 웹 서버나 스트리밍 서버, 그래픽 관련 환경 등에 주로 사용된다.
위 그림에서 보듯 데이터 하나가 여러 개의 블록으로 쪼개져 각 디스크로 분산 저장된다. 데이터를 불러들일 때도 분산 로드하기 때문에 속도가 빠를 수밖에 없다. 저렇게 데이터를 블록으로 쪼개 저장하고 합쳐서 불러오는 작업을 바로 레이드 컨트롤러에서 담당한다. 레이드 0에서는 그냥 쪼개기만 하면 되니, 데이터양이 많아도 레이드 컨트롤러에 걸리는 부하가 크지 않지만, 다른 레벨의 레이드에서는 상당한 부하가 발생한다.
이렇게 레이드 구성 설정에 따른 용량 낭비도 없고 입출력 성능이 특히 탁월하지만, 레이드 0는 결정적으로 '데이터 보호' 기능이 없다 (유식한 말로 '내결함성-Fault Tolerant' 기능을 제공하지 않는다고 한다). 아래 설명할 레이드 1, 레이드 5는 레이드 구성이나 디스크에 문제가 발생해도 데이터 손상이나 유실을 방지할 수 있는데, 레이드 0는 레이드 구성이 깨지거나 디스크에 에러가 생기면 데이터도 곧 황천길이다.
물론 아예 데이터를 살리지 못하는 건 아니다. 하드디스크 복구 업체 등에 의뢰하면 되지만, 레이드로 구성된 디스크는 일반 디스크 경우보다 복구 비용이 훨씬 비싸다.
레이드 1 - 미러링 세트
레이드 1은 간단명료한 구성이다. 디스크 하나의 구성을 그대로 다른 디스크에 복사해 두는 개념 이다. 즉 디스크와 디스크 사이에 '거울 (미러)'을 세운 것처럼 똑같이 만든다고 해서 붙은 이름이다(이와 유사하게, 특정 웹 사이트와 똑같이 많은 또 다른 사이트를 '미러링 사이트'라 한다).
그럼 왜 똑같이 만들겠는가. 그렇다. 데이터 보호 때문이다. 즉 평소에는 디스크 하나로 운영하다가 이 디스크에 문제가 발생하면 레이드 컨트롤러가 자동으로 미러 디스크를 작동시키는 원리다.
위 사진을 보면 데이터 하나가 두 개로 복사돼 각각 디스크에 저장되고 있다. 똑같은 데이터를 동일하게 저장하므로 저장 성능은 그대로지만 로딩 성능은 향상된다. 또한 구성도 단순하고 레이드 컨트롤러에 걸리는 부하도 적고, 데이터도 보호되는데 여기에도 또한 결정적 단점이 있다.
그림에서 보듯 데이터를 복사해서 다른 디스크에 넣어두게 되니, 디스크 용량을 50%밖에 사용하지 못한다 는 거다. 무슨 소리냐 하면, 500GB + 500GB 디스크를 레이드 1으로 구성했다면, 1TB 용량이 아닌 500GB만 사용할 수 있다는 뜻이다. 왜냐하면 나머지 500GB는 미러용 디스크로 작동되기 때문이다.
따라서 용량 이슈가 큰 환경이 아니라면, 안정한 데이터 보호를 위해 레이드 1 구성을 고려해 보는 것도 괜찮겠다. 특히나 요즘처럼 디스크 기본 용량이 커진 경우라면 더욱 그러하다. 당연하겠지만, 레이드 1을 구성하려면 짝수 개의 디스크가 준비 돼야 한다.
레이드 5 - 패리티가 있는 스트라이프 세트
레이드 5는 일반 사용자보다는 중대형 스토리지 환경에 가장 보편적으로 적용되는 레벨이다. 기본 방식은 앞서 본 레이드 0와 유사한 '데이터 쪼개기' 방식 을 따른다. 다만 데이터를 쪼개 각 디스크에 저장할 때 '패리티(Parity)' 라는 정보 데이터도 함께 실려 보낸다.
이 '패리티' 정보는 데이터 보호를 위한 일종의 안전장치인 셈인데, 특정 디스크에 저장된 데이터가 손상되거나 유실되면, 그다음 디스크에 저장된 패리티 정보를 토대로 손상/유실 데이터를 복구할 수 있다.
위 사진에서 보듯 데이터는 블록 단위로 쪼개져서 디스크에 저장되지만, 이때 '녹색' 데이터, 즉 패리티 정보 데이터가 함께 저장된다. 여기서 바로 옆 디스크의 정보를 기록하기 위해, 각 디스크에 번갈아 한 번씩 저장되게 된다. 방금 말한 대로, 특정 디스크에 문제가 발생하면 그 옆의 디스크에 저장된 패리티에서 정보를 참조해 데이터를 복구하는 것이다.
그래서 레이드 5를 '패리티가 있는 스트라이프 세트 -Stripe set with parity'라고도 한다(앞서 본 레이드 0는 '패리티가 없는 스트라이프 세트-Stripe set without parity'인 것이다).
레이드 5 역시 스트라이프 세트이다 보니 입출력 성능이 향상된다. 단 레이드 0만큼은 아니다. 왜? 바로 패리티 연산 때문이다. 데이터 입출력이 엄청난 환경에서 레이드 5 구성을 사용하려면, 사양이 제법 높은 고가의 레이드 컨트롤러를 사용해야 한다(카드 한 장에 50~100만 원 정도 한다).
그렇긴 해도 가장 확실하고 안전하게 데이터를 보존 할 수 있는 레이드 레벨로 인식되어, 데이터베이스 스토리지 구성에 일반적으로 적용되고 있다.
레이드 5 구성을 위해서는 디스크가 최소 3개 이상 은 되어야 한다. 즉 2개로는 레이드 5를 구성할 수 없다.
아울러 용량도 전체 용량의 70%, 즉 2/3밖에 사용하지 못한다. 나머지 1/3은 패리티 정보를 저장해야 하기 때문이다. 예를 들어 500GB + 500GB + 500GB 디스크를 레이드5로 묶으면 1TB 밖에 사용하지 못하는 것이다.
레이드 0, 레이드 1, 레이드 5 레벨 이외에도 여러 레벨이 있지만, 일반적으로 사용되는 건 이 3가지다. 다만 레이드 0+1 또는 1+0 레벨이 그나마 알려져 있는데, 앞서 레이드 0과 레이드 1의 특징을 결합한 것이라 보면 된다.
즉 스트라이프 세트로 구성하되 이를 그대로 미러링한다는 의미다. 가끔 사용하긴 하는데 그리 흔치는 않다. 레이드 적용 대비 디스크 낭비도가 높기 때문이겠다. 하지만 디스크 입출력 성능은 최강 이다.
자, 그럼 레이드 레벨로 디스크 어레이를 구성해 사용하다가 문제가 발생하면 어떻게 될까?
여기서 문제라 함은, 레이드 구성이 깨졌다거나(더러 발생하기도 한다) 디스크 자체에 불량(배드)이 생겼다거나, 레이드 컨트롤러에 이상이 발생했거나 하는 걸 말한다.
먼저 레이드 0는 방법 없다. 그냥 ‘OUT’이다. 운영체계를 깔았다면 당연히 부팅도 안 된다. 중요한 데이터가 있었다면 복구 업체에 비싼 돈 주고 의뢰하고 기도하는 수밖에 없다. 따라서 중요한 데이터를 처리하는 시스템이라면 절대로 레이드 0로 구성하면 안 된다.
앞서 잠깐 언급한 레이드 0+1이 이런 경우를 대비해 레이드 0 구성을 미러링(레이드 1) 해두는 방식이다.
다음으로 레이드 1 미러링은 일단 원본 디스크에 문제가 발생해도 시스템은 정상 작동 을 유지한다. 왜냐면 레이드 컨트롤러가 원본 디스크 이상에 이상이 있음을 감지하면, 자동으로 미러링 디스크로 이동하기 때문이다. 두 디스크는 똑같은 형태로 똑같은 데이터가 들어 있는 쌍둥이 디스크이니….
참고로 한 디스크에 문제가 발생하면 레이드 컨트롤러가 비프음을 울리거나 적색 LED로 표시해 준다.
레이드 5의 경우도 디스크 장애 시 시스템 작동을 유지 하는데, 동시에 2개 디스크에 문제가 발생했다면 역시 데이터는 영면하신다. 즉 최소 구성 디스크 개수가 3개이니 이 중 하나까지는 문제없고, 두 개 이상이면 역시 골로 가신다(인접 디스크에서 패리티 정보를 읽어와야 하는데 그럴 수 없으니까). 사실 두 개 디스크가 동시에 나갈 경우는 잘 없긴 하지만, 그렇다고 아예 없는 것도 아니니 염두에 두자.
이 때문에 레이드 5 구성 시에는 두 개 디스크 동시 장애를 대비해 여분의 디스크를 하나 더 연결해 두기도 한다. 이걸 레이드 5 + S(스페어-spare)라고 하는데, 레이드 5를 지원하는 레이드 컨트롤러 설정 화면을 보면 흔히 'S'로 표기된다. 예를 들어, 디스크 3개를 레이드 5로 묶으면서 나머지 하나를 '스페어'로 구성하면(스페어 디스크는 데이터 저장에 사용될 수 없다), 2개 디스크 장애 시 스페어 디스크가 자동 투입되어 시스템 다운을 방지하게 된다. 물론 이런 경우에는 즉시 장애 디스크를 교체해야 한다.
자, 문제/장애가 발생한 디스크를 새 제품(동일제품)으로 교체해 레이드 컨트롤러에 연결하면, 자동으로 원래의 레이드 레벨 설정으로 재구성(rebuild) 한다. 레이드 1이라면 디스크 내용을 그대로 복사해 전송할 것이고, 레이드 5라면 인접 디스크의 패리티 정보를 가지고 데이터를 복원, 저장하는 작업이 백그라운드로 진행된다(디스크 용량에 따라 며칠이 걸리기도 한다).
이 정도면 레이드의 기본적인 개념과 원리는 이해할 수 있을 거로 생각한다. 요즘 출시되는 S-ATA용 메인보드는 대게 레이드 0와 레이드 1 까지는 지원하는 편이다. 사실 개인 컴퓨터 환경이라면 데이터의 중요성보다는 ‘성능 향상’이 목적일 텐데, 디스크 2개를 레이드 0로 묶어 입출력 성능을 극대화 하는 것도 나름대로 효과 있는 ' 성능 튜닝법' 이다. 당연히 ‘여차하면 운영체계 다시 깐다’는 생각으로 중요 데이터는 별도 백업해야 하겠다.
알고 있는 대로, 요즘 CPU나 메모리 등의 비약적인 성능 발전에 비해 하드디스크는 십수 년째 거의 제자리걸음이다. 하드디스크 성능이 CPU나 메모리의 성능에 어느 정도 근접해 준다면, 실제로 사용자가 체감하는 성능 향상의 폭은 매우 커진다. 그만큼 디스크의 데이터 입출력 성능은 시스템 전체 성능과 직결하므로, 기회가 된다면 레이드 0 등 구성을 고려해봄 직하다.
글 / IT동아 이문규(munch@itdonga.com)