여러 개의 저렴한 하드디스크를 하나로 묶어 성능을 높이거나 안정성을 확보하는 기능이다. 디스크 하나가 죽어도 데이터가 날아가지 않게 보호하거나, 여러 디스크에 데이터를 나눠 써서 속도를 비약적으로 높인다.
- 스트라이핑 (Striping): 데이터를 여러 디스크에 나누어 저장하는 것. (속도 향상 / RAID-0)
- 미러링 (Mirroring): 똑같은 데이터를 다른 디스크에 복사해서 저장하는 것. (안정성 확보 / RAID-1)
- 패리티 (Parity): 데이터 복구를 위한 체크용 정보. 디스크 고장 시 이 정보를 이용해 데이터를 되살린다. (효율적 안정성 / RAID-5, 6)
용량 계산 공식
(N: RAID 구성에 참여하는 총 디스크 개수, S: 개별 디스크 1개의 용량)
기본 공식
(N - 1) x S
스페어 디스크가 있는 경우 - 스페어는 고장 날 때를 대비한 예비이기 때문에 계산에서 미리 빼야함
(N - 1 - Spare) x S
| RAID 종류 | 핵심 키워드 | 가용 용량 공식 | 특징 | 활용 |
| RAID-0 | 스트라이핑 | N x S | 속도 최상, 안정성 최하 | 영상 편집 임시 저장 등 |
| RAID-1 | 미러링 | (N / 2) x S | 복사본 생성, 안정성 최상, 비용 비쌈 (용량 50%만 사용) | 중요한 문서 보관 |
| RAID-5 | 분산 패리티 | (N - 1) x S | 가성비 왕, 성능/안정성 절충 (최소 디스크 3개) | 일반적인 서버 |
| RAID-6 | 이중 패리티 | (N - 2) x S | 안정성 강화, 디스크 2개 고장나도 버팀 (최소 디스크 4개) | 대형 금고 / 기업 서버 |
RAID 1, 5, 6 은 결함을 허용하지만 RAID 0 은 결함을 허용하지 않는다. 엥? RAID 0 이 손실을 감수한다고 하는데 얘가 오히려 결함을 허용하는 것이 아닐까? 아니다! 결함을 허용한다는 것은 디스크가 고장(falut) 났을 때 이를 허용하여 시스템이 멈추지 않고 계속 돌아가는 능력을 말한다.
- RAID-0: 허용할 수 있는 결함의 개수가 0개
- RAID-1: 허용할 수 있는 결함의 개수가 1개 (똑같은 복사본이 있으니까)
- RAID-5: 허용할 수 있는 결함의 개수가 1개 (패리티로 복구 가능)
- RAID-6: 허용할 수 있는 결함의 개수가 2개 (이중 패리티의 !)
RAID 2, 3, 4 는 데이터를 비트/바이트 단위로 쪼개거나 전용 패리티 디스크를 따로 두는 방식을 사용한다. 병목 현상 때문에 지금은 사용하지 않는다.
하드웨어 RAID vs 소프트웨어 RAID
| 구분 | 하드웨어 RAID | 소프트웨어 RAID |
| 방식 | 전용 RAID 컨트롤러 (카드) 장착 | 리눅스 OS 내에서 명령어로 처리 |
| 성능 | 전용 칩셋이 처리하므로 매우 빠름 | CPU 가 계산을 나눠서 하므로 부하 발생 가능 |
| 명령어 | 제조사 제공 유틸리티 사용 | mdadm |
| 비용 | 비쌈 (서버 살 때 옵션) | 공짜 (리눅스만 있으면 됨) |
실무에서 RAID
기업용 서버는 디스크 하나 때문에 서비스가 멈춰선 안 된다...그래서 RAID 를 꼭꼭 사용한다.
- 웹 서버 및 DB 서버 (RAID-5, RAID-6, RAID-10)
- 24 시간 중단 없이 돌아가야 하는 서비스는 디스크 고장을 늘~ 대비해야 한다.
- RAID-5/6: 용량 효율이 좋아서 대용량 데이터를 다루는 파일 서버나 일반적인 웹 서버에 가장 많이 사용된다.
- RAID-10 (1+0): RAID-1의 안정성과 RAID-0의 속도를 합친 방식이다. 돈이 좀 들더라도 속도와 안정성 둘 다 중요한 고성능 DB 서버에 주로 사용한다.
- 백업 서버 (RAID-1)
- 중요한 문서나 소스 코드를 보관하는 서버이다. 똑같은 복사본을 실시간으로 만들기 때문에 한쪽 디스크가 불타버려도 옆에 있는 디스크를 떼어서 바로 복구할 수 있다.
- 고성능 작업용 워크스테이션 (RAID-0)
- 영상 편집이나 렌더링은 데이터 유실을 조금 감수하고 짱 빠른 속도를 위해 RAID 0 을 사용한다.
mdadm (Multiple Disks ADMinistrator)
리눅스 RAID 를 보통 md 라고 부르고 mdadm 이라는 패키지를 이용해서 관리한다. 현재 mdadm 으로 구성할 수 있는 RAID 레벨에는 1, 4, 5, 6, 10 이 있다.
1. RAID 생성하기 (create)
디스크를 하나로 묶어 새로운 장치 (/dev/md0) 을 만드는 과정이다.
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
- --create: 새로 만들겠다.
- /dev/md0: 만들어질 RAID 장치 이름 (보통 md 로 시작)
- --level=5: RAID 레벨 5로 설정
- --raid-devices=3: 실제 구성에 사용할 디스크 개수
RAID 를 구성하기 전 fdisk 로 파티션을 만들 때 시스템 ID 를 꼭 변경해주어야 한다. fdisk 실행 후 t 명령어로 타입을 fd (Linux raid autodetect) 로 바꿔야 커널이 RAID 용 디스크라고 인식한다.
2. 상태 확인하기 (Detail & Monitor)
RAID가 잘 돌아가는지, 디스크 하나가 죽지는 않았는지 확인한다.
- 상세 정보 보기: mdadm --detail /dev/md0
- 실시간 상태 요약: cat /proc/mdstat
- [UUU] 라고 뜨면 정상, [_UU] 라고 뜨면 디스크 하나가 빠진 (Fail) 상태
3. 중지 및 삭제 (Stop)
RAID 구성을 해제할 때 사용한다.
- mdadm --stop /dev/md0
| 옵션 | 의미 | 설명 |
| -C | --create | 새로운 RAID 생성 |
| -S | --stop | 가동 중인 RAID 중지 |
| -D | --detail | RAID 장치의 상세 정보 출력 |
| -a | --add | 작동 중인 RAID 에 새로운 디스크 추가 (교체용) |
| -r | --remove | 고장 난 디스크 제 |
복구(Rebuild) 프로세스 시나리오
- cat /proc/mdstat으로 확인하니 디스크 하나가 죽어있다.
- mdadm /dev/md0 --remove /dev/sdb1로 고장 난 걸 뺀다.
- 새 디스크를 꽂고 mdadm /dev/md0 --add /dev/sdb1로 추가한다.
- 다시 Rebuild가 시작되며 시스템이 정상화된다.
/proc/mdstat
- /proc 디렉터리는 하드디스크에 실제로 존재하는 파일이 아니라, 커널의 메모리 정보를 파일 형태로 보여주는 가상 공간이다.
- mdstat: 'Multiple Disk Statistics'의 약자로, 현재 시스템에서 가동 중인 소프트웨어 RAID(mdadm으로 만든 것)의 상태를 실시간으로 보여줍니다.
- 결과 해석
- active: RAID 장치가 현재 정상적으로 작동 중임을 의미
- raid5, raid1 등: 현재 구성된 RAID의 레벨
- [UUU]: 디스크들의 건강 상태. U (Up)는 정상이며, 만약 _ 가 보인다면 해당 디스크에 문제가 생겼다는 뜻. (예: [UU_] 이면 3개 중 1개 고장)