RAID Storage Systems
RAID는 단일 디스크의 속도·용량·신뢰성 한계를 여러 디스크의 병렬 구성으로 극복하는 스토리지 기술이다. DB 조회 읽기 성능 최적화에서 RAID 10이 DB 읽기 성능 최적화에 적용되는 맥락과 이어진다.
RAID란
RAID(Redundant Array of Inexpensive Disks)는 여러 디스크를 하나의 논리적 디스크처럼 보이게 구성하는 기술이다. OS/애플리케이션에게 투명하게(transparently) 단일 큰 디스크로 보이므로 소프트웨어 변경이 필요 없다. 평가 축은 Capacity(용량), Reliability(내결함성), Performance(성능) 세 가지다.[1]
평가 기준
성능 지표 2가지
| 지표 | 설명 |
|---|---|
| Single-request latency | 단일 I/O 요청의 응답 시간 — 병렬성 활용 여부 |
| Steady-state throughput | 동시 다수 요청의 총 대역폭 — 주요 평가 기준 |
워크로드 유형
| 유형 | 설명 | 디스크 효율 |
|---|---|---|
| Sequential | 연속된 큰 블록 (e.g., 1MB 파일 스트리밍) | Seek/Rotation overhead 작음, S MB/s |
| Random | 소규모 랜덤 위치 접근 (e.g., DB transactional) | Seek/Rotation overhead 지배적, R MB/s (S >> R) |
이 두 지표와 워크로드 구분이 아래 RAID 레벨별 분석의 기준이 된다.[2]
RAID 레벨별 분석
N = 디스크 수, B = 디스크당 블록 수, S = Sequential 단일 디스크 속도, R = Random 단일 디스크 속도로 둔다.[2:1]
RAID 0 — Striping (순수 성능, 무결함성)
블록을 디스크에 라운드로빈 방식으로 분산 배치한다.[3]
Disk0 Disk1 Disk2 Disk3
0 1 2 3
4 5 6 7
| 평가축 | 결과 |
|---|---|
| Capacity | N × B (100% 활용) |
| Reliability | 0 — 디스크 하나라도 장애 시 데이터 손실 |
| Sequential read/write | N × S |
| Random read/write | N × R |
Chunk size에는 트레이드오프가 있다: 작으면 파일 I/O 병렬화가 늘지만 positioning time이 늘고, 크면 병렬화는 줄지만 seek 오버헤드가 준다.[3:1]
RAID 1 — Mirroring (최고 신뢰성, 50% 용량 낭비)
각 데이터 블록을 두 디스크에 복제한다.[4]
Disk0 Disk1 Disk2 Disk3
0 0 1 1 ← mirror pair
2 2 3 3
| 평가축 | 결과 |
|---|---|
| Capacity | N × B / 2 |
| Reliability | 1개 장애 보장 / 운이 좋으면 N/2개까지 |
| Sequential read | N/2 × S (디스크마다 교번 read 시 skip 발생) |
| Sequential write | N/2 × S (두 디스크에 동시 write) |
| Random read | N × R (복제본 중 하나를 자유 선택) |
| Random write | N/2 × R (두 복제본 동시 write) |
RAID-10은 stripe of mirrors(RAID-0 위에 RAID-1), RAID-01은 mirror of stripes다.[5] write 중 장애가 나면 두 복제본이 불일치할 수 있는데(Consistent-update problem), non-volatile RAM에 write-ahead log를 유지해 해결한다.[5:1]
RAID 4 — Parity (용량 효율, write bottleneck)
N-1개 데이터 디스크와 1개 전용 Parity 디스크로 구성하며, XOR로 복구한다.[6]
Disk0 Disk1 Disk2 Disk3 Disk4(parity)
0 1 2 3 P0
4 5 6 7 P1
임의의 한 컬럼(디스크)이 사라지면 나머지 컬럼을 XOR해서 복원하는 것이 XOR 복구 원리다.[6:1]
| 평가축 | 결과 |
|---|---|
| Capacity | (N-1) × B |
| Reliability | 1개 장애 허용 |
| Sequential read | (N-1) × S |
| Sequential write | (N-1) × S |
| Random read | (N-1) × R |
| Random write | R/2 — 병목! |
RAID-4 Write Penalty에는 두 방식이 있다.[7]
- Additive: stripe 전체를 읽어 XOR 재계산한다 — read old data × (N-1) + write new + write new parity, 총 4개 I/O.
- Subtractive: 변경 전/후 블록을 XOR해 parity만 갱신한다 — 2 reads + 2 writes로 더 효율적이며 소규모 write에 유리하다.
Parity 디스크가 모든 write의 공통 병목이 된다 — Sequential write는 괜찮지만 random write는 parity disk I/O가 직렬화된다.[7:1]
RAID 5 — Rotating Parity (RAID 4 병목 해결)
Parity 블록을 디스크 전체에 분산 배치한다.[8]
Disk0 Disk1 Disk2 Disk3 Disk4
0 1 2 3 P
5 6 7 P 4
10 11 P 8 9
...
| 평가축 | RAID 4 대비 |
|---|---|
| Capacity | 동일: (N-1) × B |
| Reliability | 동일: 1개 장애 허용 |
| Sequential r/w | 동일 |
| Random write | N/4 × R — parity 병목 제거, RAID 4 대비 대폭 향상 |
RAID 레벨 요약 비교
| 레벨 | 용량 | 신뢰성 | Seq Read | Seq Write | Rand Read | Rand Write |
|---|---|---|---|---|---|---|
| RAID 0 | N·B | ✗ | N·S | N·S | N·R | N·R |
| RAID 1 | N·B/2 | 1개 장애 | N/2·S | N/2·S | N·R | N/2·R |
| RAID 4 | (N-1)·B | 1개 장애 | (N-1)·S | (N-1)·S | (N-1)·R | R/2 |
| RAID 5 | (N-1)·B | 1개 장애 | (N-1)·S | (N-1)·S | (N-1)·R | N/4·R |
실제 선택 가이드
| 목적 | 권장 RAID |
|---|---|
| 순수 성능, 신뢰성 불필요 | RAID 0 |
| 읽기 성능 + 신뢰성 (DB Read Replica 등) | RAID 10 (1+0) |
| 공간 효율 + 신뢰성, write 많지 않음 | RAID 5 |
| 공간 효율 + 신뢰성, write 많음 | RAID 6 (2중 parity, 레벨 미포함) |
DB 조회 읽기 성능 최적화 패턴에서는 RAID 10(Read 성능 + 1개 장애 허용)이 권장된다. 이는 RAID 1의 Random Read 이점(N·R)과 RAID 0의 Striping 이점을 결합한 형태라고 볼 수 있다.[9]
흔히 놓치는 지점
- RAID 5를 OLTP DB(small random write가 많음)에 적용하면 Write Penalty로 성능이 저하된다.
- RAID 4의 Parity disk를 SSD로 교체하지 않으면 여전히 random write 병목이 남는다.
- RAID 1/10을 쓰면서 두 복제본을 같은 물리 인클로저에 배치하면, 전원/냉각 장애 시 동시에 손실될 수 있다.
관련
- DB 조회 읽기 성능 최적화 — RAID 10이 DB 읽기 성능 최적화에 적용되는 맥락.
출처
테스트 질문
- RAID 0, 1, 5에서 각각 몇 개 디스크 장애까지 허용하는가?
- RAID 4에서 random write가 느린 이유와 RAID 5가 이를 해결하는 방법은?
- RAID 1에서 sequential read 속도가 N·S가 아닌 N/2·S인 이유는?
- RAID의 Consistent-update problem이 발생하는 조건과 해결책은?
- DB Read Replica 구성에 RAID 10이 적합한 이유는?
file-raid.pdf — RAID 정의, 투명성(transparency), Capacity/Reliability/Performance 3축 평가. PDF 렌더링 도구(poppler)가 이 환경에 설치되어 있지 않아 원문 대조는 하지 못했다.[10] ↩︎
file-raid.pdf — Single-request latency/Steady-state throughput, Sequential/Random workload 구분, N/B/S/R 표기. PDF 원문 대조는 하지 못했다.[10:1] ↩︎ ↩︎
file-raid.pdf — RAID 0 Striping, chunk size trade-off 절. PDF 원문 대조는 하지 못했다.[10:2] ↩︎ ↩︎
file-raid.pdf — RAID 1 Mirroring 절. PDF 원문 대조는 하지 못했다.[10:3] ↩︎
file-raid.pdf — RAID-10 vs RAID-01, Consistent-update problem 절. PDF 원문 대조는 하지 못했다.[10:4] ↩︎ ↩︎
file-raid.pdf — RAID 4 Parity, XOR 복구 원리 절. PDF 원문 대조는 하지 못했다.[10:5] ↩︎ ↩︎
file-raid.pdf — RAID-4 Write Penalty (Additive/Subtractive Parity) 절. PDF 원문 대조는 하지 못했다.[10:6] ↩︎ ↩︎
file-raid.pdf — RAID 5 Rotating Parity 절. PDF 원문 대조는 하지 못했다.[10:7] ↩︎
출처 매핑 미확인 — "RAID 1의 Random Read 이점과 RAID 0의 Striping 이점을 결합한 형태"라는 해석은 두 절의 표를 엮은 Wiki 차원의 해석이다. ↩︎
출처 매핑 미확인 — 이번 포맷 변환 작업 환경에는 PDF 페이지 렌더 도구(poppler)가 없어
file-raid.pdf원문을 직접 대조하지 못했다. 본문의 수치·표는 기존 Wiki 페이지(이전 ingest)의 서술을 그대로 유지했다. 다음에 poppler 또는 대체 PDF 렌더 도구를 확보하면 원문과 대조할 것. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎