# RAID
- 여러 개의 디스크를 붙여 가용성(장애가 발생돼도 시스템 운영되게 함), 성능, 신뢰성 높임
- 한 개의 signle, logical 한 디스크로 보임
- 병렬로 read 함 -> 속도 빨라짐
- 에러 났을 때 복구
- MTTF : 여러 개의 디스크 중 하나의 디스크가 실패할 확률은 특정한 하나의 디스크가 실패할 확률보다 높음
# 미러링(mirroring) : 중복
- 복사 디스크 만듦
- 물리적 디스크가 2개 더 많음(쓰기는 두 디스크 모두에서 이루어짐)
- 신뢰성은 높으나 비쌈
- 데이터의 손실 : 첫 번째 디스크가 실패한 후 수리가 끝나기 전에 두 번째 디스크도 실패
- 복사 디스크의 데이터 복구 평균 시간 : 실패한 디스크가 교체된 후 다시 데이터를 저장하는데 걸리는 시간(응답 시간 8초 지나면 장애 발생)
- 복사 디스크의 실패가 서로 독립 적인 경우 55년 ~ 110년
- 복사 디스크가 실패 예방 : 주기적 백업
# 분산(striping)
- 여러 개의 디스크에 나누어 저장 -> 병렬 접근을 통한 전송 속도 향상
- 디스크 배열을 하나의 논리적인 큰 디스크로 간주
- 신뢰성은 낮으나 데이터 전송 속도 빠름(N배 빠름)
- 비트 단위 분산 : 1bit 단위로 데이터를 쓰고 읽음
- 바이트 단위 분산 : 1byte 단위로 데이터를 쓰고 읽음
- 블록 단위 분산 : 1block 단위로 데이터를 쓰고 읽음. 가장 일반적
- 주로 블록 단위 분산 사용
# 패리티 비트
- 디스크들을 XOR 한 결과를 디스크에 저장
- 1개의 디스크 fail 발생 시 패리티 비트와 나머지 비트를 XOR 하여 복구
- 적은 비용으로 중복 제공 가능
- 예) 디스크 0101 1011 1101 => 패리티 0011
- 보호하는 비트 많을수록 공간 부담 적어짐
# RAID 구성방법
# Hardware RAID
- RAID 카드 이용(OS와 독립적으로 구현)
- 여러 개의 디스크를 묶어 OS가 바라봤을 때 하나의 logical disk처럼 보임
- 쓰기 수행 전 비휘발성 RAM 이용하여 쓰기 기록
- 안정성 높으나 비쌈
- 속도 빠름
- non-volatile ram 사용 :
디스크 쓰기 전 nvram에 쓰기 기록
정전 발생 후 복귀 시 nvram에서 완성되지 않은 쓰기 데이터를 가져옴
- scrubbing : 문지름.
디스크에는 여러 가지 실패 발생
실패 최소화하기 위해 scrubbing 수행
디스크가 사용되지 않는 동안 모든 디스크의 내용을 읽어 문제가 있는 부분 복구
- how swapping :
전원 차단하지 않은 상태에서 디스크를 제거하고 새로운 것으로 교체
데이터 복구 평균시간을 감소시킴 -> 무정지 시스템 구현
RAID 구현 시 여분의 디스크 준비
실패한 디스크는 여유시간에 복구
- 전지 백업 운영(aps)
# Firmware RAID
- RAID 칩을 넣어 드라이버로 구현
- 바이오스에서 설정 가능
- Hardware RAID 보다 느리고 저렴, Software RAID 보다 빠르고 비쌈
# Software RAID
- RAID 디스크가 설치된 OS에서 구현
- 사용자가 바라봤을 때 하나의 디스크처럼 보임
- 안정성 낮으나 저렴함
- 속도가 느림
# RAID Level (계층)
# Level 0
- 블록 단위 분산
- 중복 없음(패리티 비트, 미러링 없음) => overhead 발생 안 함
- 병렬적으로 데이터 읽고 씀 => 속도 빠름
- 공간적, 시간적 부담 적음
- 신뢰성 떨어짐(복구 불가)
- 쓰기와 읽기 성능 좋음
- 데이터 안전 중요하지 않고 높은 성능 원하는 경우 사용
- 저렴함
# Level 1
- 블록 단위 분산
- Fail 발생 시 복사 디스크에 적고 새로운 디스크에 다시 복사
- 중복 없음, 미러링 있음
- 병렬적으로 데이터 읽고 씀 => 속도 빠름
- 복사 디스크 하나 더 둠(C : 복사본)
- 신뢰성 높음(복구 가능)
- 데이터베이스의 로그파일 저장에 많이 사용함(백업을 하기 위함) 로그파일 잃어버리면 재앙
WAL(Write Ahead Log) : write 하기 전에 로그에다가 미리 적어줌
- 쓰기 성능 좋음(패리티 없기 때문)
- 재구축 가장 빠름
- 비쌈
# Level 2
- 비트 단위 분산
- 패리티 비트 있음(패리티 전용 디스크 운영)
- 병목현상 발생(성능 종속, 읽고 쓰기 부담)
- 디스크 n-1개의 패리티 디스크 추가 => 장애 시 복구 불가
- 해밍 코드 사용(에러 비트 찾음)
- 읽고 쓰기 속도 느림
- 거의 사용 안함
# Level 3
- 바이트 단위 분산
- 패리티 비트 있음(패리티 전용 디스크 운영)
- 병목현상 발생
- 1개의 패리티 디스크 추가 => fail 발생 시 복구 불가
- 거의 사용 안함
- 소량 데이터 접근 우수
# Level 4
- 블록 단위 분산
- 패리티 비트 있음(패리티 전용 디스크 운영)
- 병목현상 발생
- 1개의 패리티 디스크 추가 => fail 발생 시 복구 불가
- 데이터 변경 시 패리티 비트도 수정해야 함
- 작은 단위로 쓰기 할 경우 패리티 디스크에 병목현상 발생 => 성능 떨어짐
- 한 블록만 기록할 경우 : 병렬성 없음. 해당 블록의 비트에 대한 패리티 디스크의 비트 수정하여야 함. 패리티 디스크에 접근할 때마다 헤드 움직여야 함. 시간 소모.
- 읽기 성능 좋음
- 거의 사용 안함
# Level 5
- 블록 단위 분산
- 패리티를 N+1의 디스크에 나누어 저장 => 병목현상 발생 안 함
- 1개 디스크 추가
- 1개의 디스크 고장 난 후 고치는 중 다른 디스크가 고장 난 경우 해결 못함(1개만 장애 발생 시 복구 가능, 2개는 복구 불가)
- 쓰기 적고 읽기 많은 경우 사용
- 디스크 개수 적음(비용 적음)
- 소량 데이터 접근, 대량 데이터 접근 우수
# Level 6
- 블록 단위 분산
- 패리티를 디스크에 나누어 저장
- 패리티 1개 더 둠( +1 : 5계층, +2 : 6계층, +3 : 6계층)
- 신뢰성 가장 높음
- Level 5보다 쓰기 속도 떨어짐
- 한 개 장애 발생 후 복구 중 다른 디스크 고장 나도 복구 가능
- 꽤 사용됨
# RAID 계층 선택
- 여분의 디스크
- 입출력 연산 횟수
- 디스크 실패 시 성능
- 재구축하는 동안 성능
#Hybrid RAID(=Nested RAID) : 여러 개의 RAID 계층을 하나로 구현
# RAID 0+1
- RAID 0로 분산한 후 RAID 1로 미러링 함
- 1개의 디스크 fail 발생 시 해당 디스크를 포함하는 RAID 0 배열 사용 불가
- 데이터 손실 없음
- 최소 4개의 드라이브
- RAID 1보다 성능 떨어짐
- 1개의 디스크 fail 발생 시 RAID 0으로 묶인 모든 디스크를 복구하므로 RAID 10 보다 복구 시간 오래 걸림
# RAID 10
- RAID 1로 미러링 한 후 RAID 0으로 분산
- RAID 0+1 보다 안정성과 성능 높음
- 최소 4개의 드라이브
- 1개의 디스크 fail 발생 시 복사 디스크를 이용하여 그 디스크만 복구하므로 RAID 0+1 보다 복구 시간 적게 걸림
# RAID Rebuilding
- 시스템을 재구축 하는 것
- 디스크에 장애 발생 -> 복사 디스크에 적음 -> 새로운 디스크로 교체 후 복사 디스크의 내용을 새로운 디스크로 복사
- 복사하는 동안 전체 시스템 성능 떨어짐
- 데이터 손실 평균 시간에 영향