본문 바로가기

웹 개발

복수 배열 독립 디스크(Redundant Array of Independent Disks, RAID)

구글링을 하면 이미 잘 정리된 사이트 글들이 많은데 그 글들을 짜집기해서 다시 정리해보았습니다.

복수 배열 독립 디스크(Redundant Array of Independent Disks, RAID)

여러개의 디스크를 묶어 하나의 디스크 처럼 사용하는 기술입니다.

사용 목적

하나의 디스크를 사용하면 편한데 굳이 RAID라는 번거로운 기능을 쓰는 이유는 무엇일까요? 원인은 아무래도 하드디스크의 문제점과 한계에 있습니다.
하드디스크는 소모품으로 분류 됩니다. 시간이 지날 수록 성능이 떨어지고 고장이 날 우려가 있습니다. 만일 단일 디스크로 서버를 운영을 한다면 디스크에 장애가 발생할 시에 데이터가 손실될 우려가 있겠죠.
그 때문에 디스크 정보들은 절대적으로 백업이나 장애로부터 복구가 될 수 있어야합니다. RAID는 그러한 문제를 해결할 수 있는 방법이 될 수 있습니다.
또한 여러개의 디스크에서 데이터를 동시에 읽고 쓸 수 있게하여 성능 향상에도 목적이 있습니다.
이러한 개념으로 부터 나온게 RAID 입니다. RAID의 사용목적은 데이터의 안정성을 확보할 수 있어야 하며, 성능 향상을 기대 할 수도 있습니다.

작동 방법

하드웨어적인 방법은 RAID 카드라는 것을 이용해서 구성하거나 마더보드에 해당 기능이 내장되어 있습니다. RAID Controller라는 것이 별도로 있어서 디스크가 RAID 기능을 수행합니다. 소프트웨어적인 방법보다 훨씬 빠르다는 장점이 있지만 비용이 비싸다는 단점이 있습니다.

소프트웨어적인 방법은 OS에서 컨트롤 하는 방법입니다. 하드웨어에 비해서 비용이 저렴한 대신에 상대적으로 느린 속도로 동작하고, RAID 컨트롤러를 별도로 사용하는 하드웨어 방법과 달리 메모리와 CPU를 사용하기 때문에 전체적인 성능이 떨어질 가능성이 있습니다.

RAID의 종류

RAID는 여러 디스크를 하나의 디스크 처럼 사용한다고 했습니다. 그렇다면 어떠한 방식으로 디스크를 사용하는 것일까요? RAID에는 여러 종류의 방식이 있습니다.

RAID 0

 

RAID 0를 구성하기 위해서는 최소 2개 이상의 하드디스크가 필요합니다. 데이터는 각 디스크에 모두 분할되어 저장이 되며 이렇게 동시에 여러개의 하드디스크에 분할되어 저장하는 방식을 '스트라이핑(Stripping) 방식' 이라고 합니다.
여러대의 하드디스크에 동시에 쓰고 읽고를 할 수 있기 때문에 성능으로는 가장 빠르다고 할 수 있습니다.
그러나 이렇게 여러개의 디스크에 분할 저장을 하면 하나의 디스크에 문제가 생길시에 다른 디스크에 있는 데이터도 모두 못쓰게 되버린다는 단점이 있습니다.
성능을 극대화한 대신에 데이터의 안정성은 포기한 셈입니다.

RAID 1

 

RAID 1은 데이터 안정성을 극대화한 방법인데, 데이터를 기록할 때 다른 디스크에 똑같은 데이터를 기록하는 방법입니다.
즉 두개 이상의 디스크에 똑같은 데이터를 저장하는 방법입니다.
그 때문에 디스크 어느 하나에 문제가 발생하더라도 다른 디스크의 데이터를 이용하여 데이터 손상없이 빠르게 복구할 수 있습니다.
이러한 방식을 '미러링(Mirroring)'이라고 합니다. 다만 이러한 방식은 그 만큼 똑같은 용량의 디스크가 여러개 필요하기 때문에 비용이 높은 방법입니다.

RAID 2

 

현재는 사용되지 않는 방법이라고 합니다. RAID 0 처럼 여러개의 디스크에 저장하는 Stripping 방법을 사용하고 있는데, BIT 단위로 Stripping을 하고 에러 검출을 위한 '해밍 코드(Hamming Code)'를 사용합니다.
이런 에러 검출 코드를 ECC(Error Correction Code)라고 합니다.
일반적인 ECC의 경우는 단순히 오류 검출의 기능만 하고 자체적으로 오류를 해결하지는 못합니다.
해밍 코드는 자체적으로 에러 교정이 가능한 기술입니다. 대신에 그 만큼 담는 오류 체크 비트의 양도 많습니다.
스트라이핑된 디스크 N개가 있으면 해밍코드를 저장하는 디스크 N-1개로 구성되어 있습니다.
이런 방식의 단점은 데이터의 오류 복구는 가능하지만 ECC쪽 디스크에 장애가 발생할 경우 문제가 발생할 수 있습니다.

RAID 3, RAID 4

RAID 3, RAID 4 둘다 RAID 0와 같이 스프라이팅 방식을 사용하고 있습니다.
대신 오류 검출을 위한 '패리티(Parity)' 디스크를 하나 더 둔 것인데요. 패리티는 오류 검출을 위한 방법으로 비트의 짝수 홀수 갯수를 이용하여 전송된 데이터의 오류를 검사합니다.
RAID 3는 데이터를 Byte 단위로 나누어 디스크에 모두 동일하게 분산시키고, RAID 4는 데이터를 블록단위로 나누어 기록합니다.

이렇게 패리티 디스크를 따로 두는 것으로 비교적 저렴한 비용으로 안정성을 확보하면서 데이터 복구 및 분산 쓰기, 읽기를 할 수 있다는 장점이 있습니다.
다만 패리티 특성상 1개의 디스크 장애에서는 오류를 감지할 수 있지만, 2개 이상의 디스크에서는 정상적으로 오류 검출이 힘들다는 단점이 있습니다.
또한 패리티 디스크에 부하가 걸릴 경우에 전체적인 성능 저하가 발생합니다.

RAID 5

RAID 4의 방식을 개선한 방법입니다. 패리티를 저장하는 디스크를 따로 두지 않고 매번 다른 디스크에 저장하는 방식입니다.
패리티 디스크를 따루 두지 않아서 RAID 4의 단점인 성능 저하를 방지할 수가 있습니다.
마찬가지로 디스크1개의 오류까지 복구 가능합니다. RAID 0에 비해 용량이나 성능을 조금 낮추는 대신에 데이터 안정성을 높인 방법입니다.
안정성과 성능 모두 좋아 가장 많이 사용되는 방법이라고 합니다.

RAID 6

 

RAID 5와 동일한 방식에서 패리티 비트를 두개를 두어 최대 두개까지의 디스크 장애에서 복구될 수 있도록 하는 방식입니다.
성능을 줄이는 대신 데이터의 안정성을 더 높인 방법이라고 보면 됩니다.

RAID 01, RAID 10

 

RAID 0을 하나의 묶음으로 두고 RAID 1을 적용시킨 방법을 RAID 10, RAID 1을 하나의 묶음으로 두고 RAID 0을 적용시킨 방법을 RAID 10이라고 합니다.
즉, 미러링을 먼저 하느냐 스프라이팅을 먼저 하느냐의 차이가 있습니다.
RAID 01의 경우 디스크 하나에 문제가 발생시에 스트라이핑된 디스크 그룹 전체를 다시 복구해야하고, RAID 10의 경우는 미러링 그룹으로 묶인 디스크 하나만 복구를 할 수 있습니다.
복구 비용이 RAID 1-0이 더 적기 때문에 실제 운영상 RAID 10 방식이 더 유리하다고 합니다.

그외

RAID 05, RAID 50, RAID 03등 여러가지 방법을 섞은 Nested RAID 방식들이 있습니다.

간단 정리

RAID란?

여러개의 디스크를 묶어 하나의 디스크처럼 사용하는 방법

사용 목적

디스크의 데이터 안정성을 높이기 위해서 사용한다

종류

  • RAID 0 : 데이터 안정성을 포기하는 대신 데이터를 여러 디스크에 동시에 읽고 쓰는 스트라이핑 방법
  • RAID 1 : 동일 데이터를 여러 디스크에 담는 미러링 방법
  • RAID 2 : 스트라이핑 방법에 해밍 코드 디스크들을 둔 방법
  • RAID 3 : 스프라이팅 방법에서 bit 단위로 분산 저장하며, 고정 패리티 디스크 하나를 둔 방법
  • RAID 4 : RAID 3에서 block 단위로 분산 저장 하는 방법
  • RAID 5 : RAID 4에서 고정 패리티 디스크를 버리고 여러 디스크에 저장 하는 방법
  • RAID 6 : RAID 5에서 패리티를 하나 더 추가한 방법
  • RAID 01 : RAID 0을 적용한 그룹에 RAID 1을 적용한 방법
  • RAID 10 : RAID 1을 적용한 그룹에 RAID 0을 적용한 방법
  • 그 외 여러 RAID를 혼합한 Nested RAID가 있음

용어 정리

스트라이핑 (Stripping)

  • 데이터를 여러 디스크에 분산 시켜 저장
  • 여러곳에 동시에 쓰고 읽을 수 있기 때문에 성능이 좋음

미러링(Mirroring)

  • 여러 디스크에 똑같은 데이터를 동시에 저장
  • 백업과의 차이: 미러링은 데이터의 변경을 계속 업데이트, 백업은 특정 시간에만 데이터를 저장

패리티 (Parity)

  • 데이터 오류 체크 및 복구를 하는 기술
  • 손상된 디스크 데이터를 복구

해밍 코드 (Hamming Code)

  • 에러의 위치까지 알면서 정정할 수 있음
  • 패리티 보다 더 많은 수의 오류에 대응 가능
  • 많은 수의 오류 체크비트가 추가됨

기대 효과

  • 대용량 단일 볼륨을 사용하는 효과
  • 디스크 용량 증설의 용이
  • 디스크 I/O 병렬화로 인한 성능 향상
  • 데이터 복제로 인한 안정성 향상

부록

Features RAID 0 RAID 1 RAID 5 RAID 6 RAID 10 RAID 50 RAID 60
Min # Drives 2 2 3 4 4 6 8
Data Protection No Protection Single-drive failure Single-drive failure Two-drive failure Up to one disk failure in each sub-array Up to one disk failure in each sub-array Up to one disk failure in each sub-array
Read Performance High High High High High High High
Write Peformance High Medium Low Low Medium Medium Medium
Read Performance (degraded) N/A Medium Low Low High Medium Medium
Write Peformance (degraded) N/A High Low Low High Medium Low
Capacity Utilization 100 % 50 % 67 – 94 % 50 – 88 % 50 % 67 – 94 % 50 – 88 %
Typical Applications high end workstation, data logging, real-time rendering, very transitory data OS, transaction databases data warehousing, web serving, archiving data archive, backup, high availability solutions, servers with large capacity requirements fast databases, application server large databases, file servers, application server data archive, backup, high availability solutions, servers with large capacity requirements

참고

위키백과

티스토리 - RAID란? RAID의 종류와 구성방식

RAID의 종류 및 개념

메모리의 종류(ECC, Unbeffered, Registered)

RAID 정리 2. RAID 구현 방법, 물리적 구성 방법 (하드웨어, 소프트웨어, 펌웨어 레이드)

해밍코드 [hamming code] 란?

Riad 0, Raid 1, Raid 10, Raid 01

[리눅스] RAID란? RAID의 종류와 구성방식

RAID LEVELs

'웹 개발' 카테고리의 다른 글

프록시  (0) 2021.03.14
정적 코드 분석, Static Code Analysis  (0) 2020.09.23
자바스크립트 - 콜 스택  (0) 2020.01.02
자바스크립트 - 호이스팅  (0) 2020.01.02
자바스크립트 - 함수 선언  (0) 2020.01.02