#title Disk와 RAID [[TableOfContents]] 디스크는 가장 고장날 확률이 높은 하드웨어이다. 데이터를 저장하는 역할을 하며, 안정성을 가져야 하며, 접근성이 보장되어어야 한다. ==== Disk 연결 기술 ==== 여기에서는 Disk 연결 기술 2가지를 소개한다. * SCSI(Small Computer Systems Interface) * FiberChannel ==== SCSI(Small Computer Systems Interface) ==== SCSI는 Narrow, Wide, Ultra SCSI등 많은 종류가 있다. SCSI는 각각 병렬구조로 된 버스를 통하여 보낼 수 있는 데이터의 양을 말한다. 다음은 각각의 전송속도이다. 실제로는 최대 속도의 10 ~15%정도가 느리다. 이유는 데이터 전송 프로토콜의 오버헤드다. SCSI버스는 회로이기 때문에 사용되는 동안에 절대 구성망이 풀리면 안된다. 만약 구성망이 풀릴 경우 십중 팔구 데이터 손실이 발생하게 된다. ||SCSI기술||전송속도|| ||SCSI-1||3 ~ 5MB/Sec|| ||SCSI-2||10MB/Sec|| ||Single-ended SCSI-2||5MB/Sec|| ||Differntial SCSI-2||10MB/Sec|| ||Fast/Narrow SCSI-2||10MB/Sec|| ||Fast/Wide SCSI-2||20MB/Sec|| ||SCSI-3||20MB/Sec|| ||Wide Ultra-SCSI||40MB/Sec|| ||Ultra-2 SCSI||8bit Bus(40MB/Sec), 16Bit Bus(80MB/Sec)|| ||Ultra-3||160MB/Sec|| ==== FiberChennel ==== 파이버 채널은 디스크를 연결시키는 새로운 기술이다. 기본적으로 초당 100MB/Sec의 속도를 제공하지만, Dual-Attach 스타일로 배치되기 때문에 대부분 실행시 용량은 2배인 200MB/Sec가 된다. 처리량은 계속 늘어나고 있는 추세이다. SCSI의 경우 케이블이 25m로 제한되지만 기본적으로 파이버 채널은 2Km의 동작 거리를 가진다. 또한 Repeater(증폭기)를 사용할 경우 10Km 정도까지 사용할 수 있다고 한다. 서버는 직접적으로 하나 이상의 Fiber 채널 HBA(host bus adapter) 포트를 통해 LUN을 거쳐 SAN에 접근한다. ==== SCSI vs FiberChannel ==== 다음은 SCSI와 파이버 채널의 비교이다. ||기술||처리량||지원장치수||최대거리|| ||Ultra SCSI||40MB/Sec||31||25m|| ||FiberChannel||200MB/Sec||126||2km(디바이스간)|| ==== Disk Array ==== 디스크 어레이는 많은 디스크를 위한 슬롯을 포함하고 있는 단일 인클로서(Single Enclosure)나 캐비넷이다. 어레이는 내부적으로 디스크를 어드레스하기 위해 SCSI나 FiberChannel을 사용한다. 또한 FiberChannel을 통해 호스트에 연결하기 위해서 SCSI 디스크를 내부에 가지고 있기도 한다. 다음은 SCSI와 FiberChannel을 이용하여 호스트에 연결하는 방식의 차이를 보여준다. attachment:disk01.jpg 위의 그림에서 확연히 알 수 있듯이 SCSI방식이 더 비용이 소모된다. 다음은 디스크 내부 연결의 두 방식의 비교이다. (오른쪽의 그림이 SAN설계 방식 중 가장 기본이 되는 '2중 스위치 방식' 이라고 책에서 말한다. 기본적으로 2중화를 통한 가용성 증대가 목적이 된다.) ||구성||케이블||터미네이터||호스트 어댑터|| ||SCSI||32||0-8||32|| ||FiberChannel||16||N/A||8|| ==== RAID[* Redundant Array of Inexpensive (or Independant) Disks] ==== 스토리지 분야는 요즘에 크게 각광받고 있는 분야이다. 심지어는 향후 인기 있는 분야 중 데이터베이스보다 좀 더 미래적인 산업이라고 조사된 것도 보았다. 필자가 이 절을 애써 집어 넣으려고 하는 것은 데이터베이스와는 많은 관련을 가지고 있기 때문이다. 어렵다고 생각되면 그냥 넘어가도 좋다. 그러나 언젠가는 이 분야에서 일을 한다면 한번쯤은 이에 대한 내용을 봐야 할 것이다. 디스크의 고장으로 인한 손실을 막기 위해서 RAID(Redundant Array of Inexpensive (or Independant) Disks) 기법을 기업에서는 많이 사용한다. RAID 시스템은 여러 드라이브의 집합을 하나의 저장장치처럼 다룰 수 있게 하고, 장애가 발생했을 때 데이터를 잃어버리지 않게 하며 각각에 대해 독립적으로 동작할 수 있도록 한다. 물론 디스크의 고장으로 인한 손실뿐 아니라 디스크의 입/출력이 디스크의 개수의 배수만큼 늘어나기 때문에 데이터베이스 시스템에서는 아주 많이 사용되는 기법이다. 구성 형태에 따라서 여러 레벨로 나뉘어 지는데 레벨별로 살펴보자. RAID 시스템은 쉽게 말해 디스크의 배열이다. 물리적으로 여러 개의 디스크가 존재하는데 이를 하나의 디스크처럼 사용하는 것이다. 디스크는 생각보다 고장이 잘 나는 하드웨어 중에 하나인데 이러한 고장에 대비하여 데이터를 보호하고, 각각에 대해서 독립적으로 동작하게 하는 것이다. 기본적인 RAID의 개념은 작고 값이 싼 디스크를 연결해서 크고 비싼 드라이브 하나를 대체하자는데 있다. 역시 RAID를 사용하는 장점은 가용성과 데이터 보호에 있다. 또한 다수의 디스크에 데이터를 분할하여 병렬로 전송함으로써 디스크의 입/출력을 향상시킨다. 그냥 생각해 보아도 3개의 데이터를 하나의 디스크에 저장하는 것보다 3개의 디스크에 각각 나누어 저장한다면 하나의 디스크를 쓰는 것보다 1/3로 시간이 단축된다. 결국은 RAID 역시 제대로 된 정보를 결과물로 산출하기 위한 하나의 방법인 것이다. RAID는 여러 레벨로 나뉘는데 중복성을 제공하지 않는 RAID-0과 데이터의 중복을 가지는 RAID-3~5까지가 있다. RAID-1+0, RAID-0+1은 RAID-0과 RAID-1의 결합으로 표준을 약간 변경시킨 것으로 공시적인 RAID 레벨로 인정하지는 않는다고 한다. 각각을 살펴보도록 하자. ==== RAID-0: Striping ==== 그냥 Disk 분산이다. 각 디스크들은 훨씬 작은 쓰기 작업을 동시에 끝낼 수 있으므로 저장 속도는 싱글 디스크에 비해 빠르다. 또한 분리된 컨트롤로 사이에 저장할 경우는 성능이 더욱 향상된다. 하지만 RAID-0은 가용성을 감소시킨다. 디스크 중 1개만 고장이 나도 전체 스트라이프는 동작하지 않기 때문이다. 디스크의 고장 확률만큼 더욱 가용성을 떨어뜨린다. ==== RAID-1: Mirroring ==== RAID-1은 두 번째 디스크에 첫 번째 디스크의 모든 바이트를 복사해서 유지한다. 100% 동기화되며, 한 쪽 디스크가 고장이라도 다른 디스크가 문제없이 계속 동작한다. '''장점''' * RAID-1의 가장 큰 장점은 디스크 고장으로 인한 데이터 손실을 막는 것. * 병렬로 읽기를 요청하여 두 디스크 중에 먼저 응답한 디스크를 사용하게 되어 읽기 성능이 싱글 디스크에 비해 향상된다. '''단점''' * 비용증가(각 미러는 100% 디스크 오버헤드) * 고장났거나 새 RAID-1의 재동기화는 원본 디스크의 내용의 블럭 대 블럭의 완벽한 복사 후에나 가능. 이 때 엄청난 I/O 발생으로 부하 걸림 * 한 쪽 디스크의 쓰기 작업이 끝나지 않았거나 디스크의 성능차가 발생하면 쓰기 성능이 저하됨. 싱글 디스크보다 느림. (쓰기 캐시로 해결) '''RAID-1에 대한 잘못된 생각들''' * Master/Slave 관계가 아니다. 즉, 한 쪽 디스크가 고장나면 다른 디스크가 고장난 디스크의 동작을 이어 받는 것이 아니다. * 백업이 필요없다? 잘못된 생각이다. 만약 데이터를 사용자의 실수로 지우면 어떻게 할 것인가? ==== RAID-0+1과 RAID-1+0의 구성방법 ==== RAID-0+1과 RAID-1+0은 RAID1과 RAID0의 장점을 결합한 미러링의 확장된 디스크 구성방법이다. attachment:disk04.jpg '''RAID-0+1''' 1. 디스크를 선택한다. 2. 디스크들끼리 스트라이프한다. 3. 새로운 디스크를 선택한다. 4. 새롭게 선택한 디스크를 스트라이프한다. 5. 스트라이프된 디스크들끼리 미러링한다. '''RAID-1+0''' 1. 디스크를 선택한다. 2. 선택된 디스크들끼리 미러링한다. 3. 미러된 디스크들을 스트라이프한다. ==== RAID-0+1과 RAID-1+0이 고장날 경우 ==== RAID-0+1과 RAID-1+0이 고장날 경우 어떤 차이가 있는지 살펴보자. attachment:disk05.jpg 그림을 보면 알 수 있듯이 데이터 손실을 막을 수 있는 확률은 RAID-1+0이 훨씬 더 높다. 만약 A가 고장일 때, 전체 데이터를 손실할 경우는 다음과 같다. * RAID-0+1: Stripe1은 사용할 수 없으므로 D, E, F 중 하나라도 고장이 난다면 모든 데이터 손실 * RAID-1+0: B만 고장이 나지 않으면 데이터가 손실되지 않는다. * 확률은 0+1은 60%(3/5), 1+0은 20%(1/5)가 된다. 또 다른 문제는 0+1의 경우 A디스크가 고장인 경우 A, B, C로 구성된 전체 스트라이프를 잃게 되며, 재구성시에 D, E, F를 모두 동기화해야 하지만, 1+0은 단지 A 디스크만 재동기하면 된다. 1+0의 유일한 단점은 스트라이프된 각각의 구성 요소가 동일한 크기를 가질 필요가 있다는 것이다. 0+1은 이런 사항을 요구하지 않으며 단지 미러된 면이 동일한 크기를 가질 것을 요구한다. ==== RAID-5 ==== RAID-5는 RAID-3, RAID-4의 단점을 보완한 레벨이다. 다음은 RAID-4와 RAID-5의 차이를 보여준다. attachment:disk06.jpg RAID-5는 패리티 전용 디스크의 병목 현상을 제거한다는 것만 빼고는 RAID-4와 동일한 동작을 한다. 쓰기 작업이 싱글 디스크에 비해 15 ~ 20% 정도 느리기 때문에 성능 문제가 발생한다는 사실을 알아야 한다. RAID-5는 한 번의 쓰기에서 다음과 같이 4번의 I/O가 발생한다. {{{ Each RAID-5 write = 2 READS + 2 WRITES (변경 전 데이터 읽기 + 변경 전 parity 읽기 + 변경된 데이터 쓰기 + 변경된 parity 쓰기) }}} 일반적으로 디스크의 병목이 있다고 판단되고 쓰기 비율이 20%를 초과하면 RAID-5가 적당한 것인지 고민을 해봐야 한다. 만약 디스크가 고장난 경우도 고장 복구를 위해서 살아 있는 스트라이프된 모든 디스크를 모두 읽어야 하므로 디스크 손실을 복구하는데 많은 시간이 소모된다. 또한 디스크가 복구 전에 1개 이상 더 고장날 경우는 전체 데이터를 손실하게 된다. ==== LUN(Logical Unit Number) ==== LUN은 다양하다. * 단순: 하나의 물리 드라이브나 물리 드라이브의 일부를 사용 * 스팬: 여러 물리 드라이브를 묶은 단순 LUN * 스트라이프: 데이터를 여러 물리 드라이브에 걸쳐 쓴다. 스트라이프 LUNs는 결함 허용을 제공하지 않고 확장이나 미러도 될 수 없다. * 미러: 두개의 물리적인 드라이브에 동일한 LUN을 복사해 데이터 중복을 제공해주는 결함 허용 LUN이다. 하나의 물리 디스크가 뻑이나도 다른 물리 디스크로 데이터를 사용 할 수 있다. * 패리티를 가진 스트라이프: 결함허용 LUN이다. 패리티는 세 개 또는 더 많은 물리 디스크에 걸쳐 있다. ==== 참고자료(DAS, NAS, SAN) ==== * [attachment:DAS_NAS_SAN.docx DAS, NAS, SAN] * [attachment:RAID_PerfTest.zip RAID 성능테스트] * 시스템 가용성 100%를 향하여, 베스트북, EVAN MARCUS 외 지음, 최홍근 옮김 * Windows 2008 실전가이드, 정보문화사, 윌리엄 스타넥 지음, 박득창, 유승호 옮김