오라클

RAID(Redundant Array of Inexpensive Disks)

OEasy 2006. 11. 2. 11:42
BULLETIN CATEGORY 
BULLETIN TOPIC
: UNIX  
: RAID(Redundant Array of Inexpensive Disks)

  상대적으로 가격(Cost)이 싼 여러 개의 Disk를 이용하여 Data의 Reliability를 높이고 Performance(Speed)를 향상시키고자 하는 기술 또는 개념을 말한다.    

1. RAID 0     

  일련의 Data를 여러 개의 Disk에 일정한 크기로(In Sector) 나누어서 저장하는 기법이다. (Striping)  이 기법으로 Read/Write의 Speed를 향상시킬 수 있다.    
  그것은 Disk I/O에 있어 하나하나의 디스크가 완전히 Sequential하게 Access되는 것이 아니라, 하나의 디스크 작동이 끝나기 전에 다음 디스크를 구동 시킬 수 있어 하나의 디스크 Block I/O Time과 Rotational Delay Time((2n -1)/2n) 만 감수하면 된다.    

  이 Delay Time은 2 sector 이상의 데이타를 하나의 디스크에 저장함으로써 발생하게 될 Sequential Time (N*One Disk I/O Time)보다 짧아서 Striping의 효과를 갖게 된다. 그러나 디스크 데이타의 Parity를 계산하여 저장하는 디스크를 따로 배정하지 않았으므로Disk Data Failure의 경우 복구 방법이 없다.    

2.  RAID 1     

  저장되는 데이타의 신뢰성을 확보하기 위하여 데이타를 동시에 2개의 공간에 저장한다. 이렇게 해서 2개의 데이타를 Mirroring 시켜 Data Error를 검사한다. 그러나 또 하나의 데이타 복사본이 있으므로 해서 2배의 디스크 용량을 차지하게 되어 디스크가 싼것을 감안하더라도 비용면에서 불리하다.    
  Disk Data Input에 있어서 2개 디스크에 Parallel Write가 가능하며, Disk Data Output에 있어서는 2개의 데이타 중 어느 하나의 데이타에 임으로 접근 할 수 있어 Access Time은 하나의 Disk일 경우 보다 오히려 줄일 수 있다.    

    

3. RAID 2     

  Data Error Check 를 위하여 Hamming Code 기법을 이용한다. "N개"의 디스크에 데이타가 분산 저장될 경우 데이타는 바이트 단위로 분산 저장되면 N+1번째 바이트는 또다시 첫번째 디스크에 저장된다. Hamming Code 기법을 구현하므로 N개의 Bytes를 저장하고 있는 N개의 디스크에 대해 M(=1+N0.5 )개의 Parity Disk가 구성된다.    

I/O 수행 시 M+N개의 디스크가 동시에 구동 되며, 여러 Bit에 동시에 Error가 발생하더라도 Hamming Algorithm은 M개의 Disk Data를 이용하여 Error의 복구가 가능하다.    

 그러나 M/(N+M)의 Disk Redundancy가 발생한다.  또한 Disk Drive 자체가 Error Check가 가능한 경우, 이러한 Hamming Algorithm과 M개의 여분의 Disk는 비현실적이 된다.    

    

       
4. RAID 3     

  RAID 3은 parity disk로 하나의 disk를 할당한다. 디스크 I/O할 데이타의 크기가 K byte일 경우, N개의 disk에 나누어져 하나의 디스크에 K/N byte씩 저장된다.    
  Disk Write의 경우, K Byte가 K/N Byte로 나누어져 N개의 디스크에 동시에 (Concurrently) Write되고 N+1번째 디스크에는 Parity Bit들이 저장된다    
  Disk Read의 경우 디스크를 동시에 구동시켜(Spindle Synchronize) N개의 디스크를 동시에 Read한 후 재결합하여 나타내어진다.    
  Disk Error의 경우 나머지 정상적인 Disk상의 Data와 Parity 값으로 1개의 손상된 Data Bit를 복구시킨다. (XOR)    
        P= A XOR B XOR C        /*even parity    
        B= A XOR P XOR C        /* D disk error    
    

 RAID 3에서는 디스크들이 동시에 구동(synchronized spindle)되므로 이것은 특정 디스크에 대한 개별적인 선택을 제한한다.    

    

5.  RAID 4     

  데이타를 N개의 디스크에 Sector/Block 단위로 나누어 "Striping"시킨다. 그리고 디스크들은 개별적으로 구동(Individual Spindle)된다. 또한, Parity Bit들은 N+1번째의 디스크에 저장된다.    

  Small Size의 Data Read의 경우 어느 하나의 디스크에 대한 Individual Access가 이루어지며, 2개 이상의 디스크를 액세스 할 필요가 있는 경우 (Transfer Size가 2block 이상일 때), 각각의 디스크가 Sequential하게 구동(Spindle)되지 않고 Rotational하게 Spindle되어 Striping의 효과를 얻게 된다.    

  Raid 4는 디스크의 개별적 구동이 이루어지므로 한 Partition내의 여러 Sector를 빈번히 Access할 때 'Striping'의 위력을 발휘한다.  그러나 각 디스크에 I/O를 할 때마다 N+1번째의 Parity Disk를 동시에 접근하여 Parity를 참조/재계산/저장하게 되어 Parity Disk에 Bottleneck이 걸리게 된다. 그러므로 Raid 4에서는 Performance가 Parity Disk의 Bottleneck에 달려있다.    

    

6.  RAID 5     

  RAID 4에서는 여러 개의 디스크들이 Rotational하게 거의 동시에 I/O 수행을 할 때, 각각의 Parity 참조 재계산 저장을 위하여 N+1번째의 Parity Disk에 접근이 몰리게 된다. 그래서 Bottleneck 문제가 일어나 Performance에 장애 요인이 된다.    

  RAID 5에서는 이러한 문제를 해결하기 위해서 N개까지의 Data Block에 Parity Bit들을 특정 디스크에 저장시키고 다음 N개 까지의 Data Block에 해당하는 Parity들을 또 다른 특정 디스크에 저장시킨다.    

  이렇게 각각의 N Block 단위에 대한 Parity 들이 여려 개의 Disk에 순차적으로 분산되면, 같은 N Block 단위 내의 Block들을 Rotational하게 거의 동시에 I/O하기 않는 이상, Parity Disk에 대한 Bottleneck 문제는 일어나지 않는다. 그러나 Parity Disk가 고정되어 있지 않으므로 각각의 Block에 해당하는 Parity Disk의 위치를 찾아야 하는 Load가 존재한다.    

    
    

7. RAID 6     

  Array로 배치된 디스크를 각각에 대해서 개별적인 Control BUS, Data BUS가 H/W적으로 따로 구성되어 있다. 이렇게 함으로 해서 각 Disk간에 간섭(Interference)이 없이 각 디스크 I/O가 별개로 이루어져, 각 디스크의 개별적인 I/O로부터 Parallel Transfer 까지 가능하게 한다.    
  또한 각 디스크에 귀속된(Dedicated) Cache가 있어 Data Transfer의 Speed를 보다 향상 시킬 수 있게 한다. 이것은 Parity Bit가 저장된 디스크도 마찬가지로 적용된다.    
  전용 제어 버스로 각각의 디스크에 대해 제어가 가능하며(Asynchronous), 전용 데이타 버스로 각각의 디스크가 독자적으로 전송 가능하다.    
    

8. RAID 7     

  RAID 6에서는 Array 중의 각각의 Disk Controller/Data Bus Cache Memory를 독자적으로 가지고 있어 Disk I/O가 각 디스크간에 Asynchronous & Independent하게 이루어졌다. (Controller & Disk)  그러나 RAID 7에서는 Array Disk Controller의 Device Interface 축뿐만 아니라, Host Interface쪽으로도 각각의 Disk에 대한 Device Cache (Central Cache), Device Control Bus, Device Data Bus가 따로 구현되어 있다.    
  즉 RAID 7에서는 Disk Array Controller가 아닌 OS가 각각의 디스크에 대한 Control을 직접하여 I/O Process를 수행한다. Disk Array Controller에는 각 Dedicated Cache에 대응하여 Central Cache가 장착된다.    

  RAID 6, RAID 7에서는 이러한 Level을 실현하기 위해서 H/W Architecture가 많이 달라지고, 특히 RAID 7에서는 OS의 변화를 거쳐야 한다.    
    

9. 비고     

  RAID 0은 "striping"으로써 하나의 partition내(concatenation)의 데이타에 대한 disk I/O speed를 향상시킨다.    

  RAID 1은 2배의 공간에 대한 데이타의 이중 저장 즉 "mirroring"과 선택적 read로 데이타의 신뢰성을 높인다.    

  RAID 2는 hamming algorithm의 load가 존재하고, 역시 M/(N+M)의 디스크 낭비를 감수해야 한다.    

  RAID 3에서는 각각의 디스크들이 동시에 구동되어 read/write의 속도는 빠르나 I/O의 size가 크므로 I/O단위가 작은, 특히 OLTP에서의 개별적인 디스크 선택이 제한되어 비효율적인 면이 나타난다.    

  RAID 4에서는 각각의 디스크에 대한 rotational 구동이 가능하지만 parity disk에 타 디스크 전부와 일대일 대응되어 I/O가 이루어지므로 bottleneck 문제가 일어난다. 또한 RAID 3에서와 마찬가지로 parity disk역시 error가 발생하거나, 동시에 2개 이상의 data error가 발생할 경우 복구가 불가능하다.    

  RAID 5는 이상의 RAID 2,3,4의 단점을 보완하고 통합되어 나온 것이라고 생각하면 무리가 없다.    

  이상에서 RAID에 관한 설명을 각 level 별로 하였으며, 간단하게나마 장단점도 살펴보았다. 원래 RAID는 어떤 학자가 발표한 이름을 시스템 벤더들이 구현하여 실용화한 것으로 각 level별로 구현의 용이성과 실제 사용의 효율성을 최대한 고려하여 구현 발표 사용하고 있다.    

 


Oracle Korea Customer Support Technical Bulletins