나의 삽질 저장소!

RAID(Cache)

by softPine

Redundant Array of Independent Disks의 약자이며, 말 그대로 여러개의 하드 디스크에 중복된 데이터를 나눠서 저장하는 기술이다. RAID는 데이터를 저장하는 다양한 방식이 존재하는 이를 레벨이라 한다. 레벨에 따라 디스크의 신뢰성을 높이거나 전체적인 성능을 향상시키는 등의 다양한 목적을 만족시킬 수 있다.

 

구현 방식

대체로 구현 방식으로 레이드 컨트롤러라고 하는 하드웨어를 사용하여 구현하는 방식과 펌웨어로 구현하는 펌웨어 레이드, 그리고 OS 상의 소프트웨어로 구현하는 소프트웨어 레이드의 종류가 있다.
가격면으로는 역시 하드웨어 자체를 따로 구입하는 하드웨어 레이드가 제일 비싸지만, 안정성이나 속도같은 면을 고려하면 하드웨어 레이드, 펌웨어 레이드, 소프트웨어 레이드의 순서로 성능이 좋다. 가격은 반대로다.

 

하드웨어 레이드

따로 레이드 컨트롤러 라고 하는 하드웨어를 사서 PCI 슬롯에 장착하는 방식이다. 비싼 이유는 역시나 하드웨어를 사기 때문에 비싼것이고, 이 하드웨어 내부에 자체적인 캐쉬 메모리와 함께 지원하는 레이드 레벨이 여러가지이다.

 

펌웨어 레이드

기본적으로 Intel 관련한 CPU를 쓰게되면 Intel Rapid Storage Technology라는 펌웨어가 있어서 이 펌웨어로 레이드 구성이 가능하다. 사실 펌웨어 레이드라고는 하나 결국엔 하드웨어에 붙어 있는 펌웨어로 가능하니 하드웨어 레이드로 분류가 되기도 한다. 특정 레벨의 레이드가 구성이 안되거나 하는 문제가 있다.

 

소프트웨어 레이드

OS에서 자체적으로 소프트웨어단에서 구현하는 레이드이다. Windows 의 경우 디스크 관리를 이용하여 구성이 가능하고 Linux나 Unix의 경우 mdadm 같은 소프트웨어 레이드로 구성할 수 있다. 그러나 Cache 정책 같은 추가적인 구성이 불가능하다.

 

레이드 Level

레이드를 구성할 때 디스크의 갯수와 속도를 고려해서 구성을 할 수 있는데 이 구성할 수 있다. 이를 레이드 레벨이라고 하는데 각 레벨마다 필요한 디스크 개수와 퍼포먼스, 안정성이 다르다.

 

RAID 0

레이드 0이라고 하며 스트라이프(Stripe)라고 한다. 최소 2개의 디스크가 필요하고 병렬로 디스크를 이어 하나의 단일 디스크로 사용한다. 여러 디스크가 동일한 파일의 일부를 동시에 읽고 쓰기 때문에 일반적으로 처리량이 더 빠르다.

레이드 0은 내결함성[각주:1]을 보장해주지 않는다. 여러 디스크를 단일 파티션으로 처리하므로 하나의 디스크라도 장애가 생기면 파일을 분산하여 저장하기에 읽을 수 없다.

RAID 0

 

RAID 1

DB 또는 엔터프라이즈, 중간 규모의 애플리케이션과 같이 빠르거나 높은 처리량에 적합한 구성이다. RAID 1은 최소 2개의 물리 디스크가 필요하며, 다른 말로는 미러링이라고도 불린다. 보통 페어로 동작하며 1개의 디스크가 문제가 생기더라도 내결함성을 가지고 있어서 문제 없이 동작을 한다. 이러한 이유는 RAID 0처럼 스트라이프 형식으로 데이터를 저장하는게 아니라 페어의 디스크에 모두 저장을 하기에 쓰기 속도는 사실상 단일 디스크의 쓰기 속도와 동일하지만 읽기 속도의 경우 페어의 드라이브에 차례대로 전송이 되기 때문에 특정 구현에서는 읽기 속도의 성능이 상향될 수 있다. 대신 단점으로는 가용할 수 있는 용량이 50%란 것이다. 146GB 디스크를 2개를 사용한다면 146GB만 사용이 가능하다.

RAID 1

 

RAID 2, 3, 4

현재 굳이 사용하지 않는 레이드 레벨들이다. 일단 RAID 0의 스트라이핑 기술을 대부분 사용하고 오류 정정을 위한 기법(ECC)이 추가되거나 패리티 디스크를 추가하는 등의 기술적인 발전이 있었지만 결론은 장점보다는 내결함성의 단점이 있는등의 이유로 사용하지 않게 되었다. 애초에 내결함성 없이 그냥 쓰는 거라면 RAID 0으로 사용해서 최대한의 성능을 끌어내는게 더 좋기 때문이라는 생각이 든다.

RAID 5

RAID 5는 데이터와 패리티[각주:2]가 스트라이핑되어 저장이 된다. 패리티 비트의 분산 저장으로 인해 안정성과 스트라이핑된 데이터를 이용하여 속도를 끌어올린 가장 무난한 방식이다. 최소 3개 이상의 디스크를 사용하며 디스크의 전체 용량의 N-1 만큼의 용량을 사용한다. 이 방식으로 인해 디스크 1개가 문제가 생겨도 패리티를 이용하여 복구를 할 수 있어 나름의 안정성을 가지지만, RAID 0만큼의 읽기 속도는 안나오지만 준수하게 나오는 편이며, 쓰기 속도의 경우 패리티 비트의 오버헤드로 인해 지연이 되는 점이 있다.

RAID 5

 

RAID 6

RAID 5와 매우 비슷하다. 차이점으로는 패리티 비트용 디스크가 1개가 아닌 2개가 된다는 점이다. 이로 인해서 RAID 5 보다 쓰기 성능이 더 느려지지만 RAID 5와는 다르게 2개의 디스크가 문제가 생겨도 데이터에는 문제가 없다. 그렇지만 아무래도 2개의 디스크가 빠진다는 점에서 일단 용량에 대한 비용도 증가하는 단점이 있다.

RAID 6

위의 레벨 뿐만 아니라 각각의 장점을 쓰기 위해 RAID 레벨을 혼합하여 사용하는 경우도 있다. RAID 10, RAID 50, RAID 60 등 앞자리 숫자로 먼저 RAID를 묶은 뒤 뒷자리 숫자로 묶어서 성능 및 안정성을 높일 수 있다.

Cache Policy

보통 이 Cache라 함은 데이터를 임시로 저장해두는 저장소를 말하는데, CPU에서의 L1, L2 캐쉬나 RAM 같은 메모리 자체를 말하기도 한다. 하지만 현재 주제와 맞는 Cache는 RAID를 관리하는 RAID 컨트롤러에 있는 Cache를 이야기 한다.

아무래도 Disk의 경우 CPU, Memory에 비해 굉장히 낮은 I/O를 갖고 있기 때문에 이를 나름 해소하기 위해 자주 쓰는 데이터를 RAID 컨트롤러 내부에 있는 캐쉬에 저장하고 전달해주기도 한다(Write Cache만을 위한 정책으로 본다). RAID 컨트롤러가 비싼 이유 중 하나가 캐쉬 메모리와 함께 캐쉬 배터리도 따로 들어가 있는데 정전 등의 문제가 생겼을 때를 대비해서 캐쉬 메모리에 있는 데이터를 디스크로 내리는 디스테이징 작업도 함께 해주기 때문이다.

또한 이 캐쉬 메모리(Write Cache)를 사용하는 정책을 RAID 컨트롤러를 통해서 지정할 수 있는데 2가지로 나뉜다.

Write Through

Through의 뜻대로 RAID 컨트롤러의 메모리를 통과하여 디스크까지 저장되는 방식이다. 즉, 메모리, 디스크 둘 다 동시에 업데이트 되는
방식이다. 장점으로는 메모리와 디스크 사이의 데이터에 대한 신뢰성이 높다라는 것이고, 어쨋든 캐쉬 메모리와 함께 디스크에 기록하는 방식이므로 약간의 대기 시간이 있다. 보통 RAID를 구성 시 SSD로 구성을 하게 된다면 이 방식을 많이 채택한다. 빠른 SSD에 DB 서버로 사용을 하게 된다면 데이터 신뢰성과 빠른 SSD의 성능으로 대기 시간을 커버한다.

Write Back

Back의 뜻대로 데이터가 캐쉬에 먼저 업데이트가 된 후 이 업데이트 된 캐쉬가 특이 사항이 있을때만 디스크에 업데이트를 하는 방식이다. 이 방식을 사용하게 되면 자주 사용되는 데이터는 캐쉬에서 빠르게 사용이 가능하고, 디스크에 업데이트하는 횟수를 최소화 하는 방식이다.

문제는 정전이나 이 캐쉬 메모리가 휘발성이다 보니 날라가는 특성이 있으므로 데이터 정합성이 문제가 될 수도 있다만, 위에서 설명했듯이 캐쉬 컨트롤러의 캐쉬 배터리를 사용하여 디스테이징 작업을 진행할 수 있다. 하지만 이 배터리가 작다 보니 얼마나 갈지는 모른다.

  1. Fault-Tolerance, 시스템의 다른 부분에 고장이 발생하더라도 시스템이 설계된 대로 계속 작동하는 것을 의미 [본문으로]
  2.  데이터가 저장장치 내의 한 장소에서 다른 장소로 이동되거나, 컴퓨터들간에 전송될 때, 데이터가 유실 또는 손상되었는지 여부를 점검하는 기술과 관련된 용어이다. [본문으로]

블로그의 정보

나의 삽질저장소

softPine

활동하기