hann-blume
Linux - RAID(Redundant Array of Inexpensive Disks) 본문
RAID에 대해서 먼저 알아보자.
RAID (Redundant Array of Inexpensive Disks)
- 장애요인 최대로 제거한 고성능 무 정지 저장장치
- 여러 개의 disk를 하나의 가상 disk로 구성, 대용량 저장장치 구축이 가능
- 다수의 disk에 data를 분할, 병렬 전송해 전송해 전송 속도 향상
- Hardware RAID 와 Software RAID로 구분 (Test 환경은 software 구성에 해당)
- RAID는 Level이 존재하며, 각 Level 마다 기능이 다르다
- Centos 7.x 에서는 RAID 0, 1, 5, 6, 1+0 을 제공한다.
Hardware RAID란?
Sever에 별동의 RAID Controller를 장착하여 물리적인 RAID구성을 의미한다. Software RAID에 비해
안정적이고, 속도가 빠르다. (이론상의 속도는 같다)
Software RAID란?
기본 OS에 내장되어있는 RAID를 이용하는 것을 말하며, Hardware RAID에 비해 성능이 떨어진다.
(RAID Controller의 가격은 고가)
LVM과의 차이점
1. LVM은 단순히 하나의 큰 저장장치를 구성하는 것이고, RAID는 그에 성능까지 향상된 것이다.
2. RAID는 묶고자하는 하드디스크들의 속도와 용량이 같아야한다.
3. 같은 회사에서 나온 같은 용량의 같은 버전의 하드디스크로 RAID를 구성해야한다. LVM은 상관없다.
RAID 0
- 둘 이상의 디스크 내의 (최대 32개) 빈 공간을 하나의 볼륨으로 결합하는 방식.
- Stripe 볼륨에 데이터 쓰기 발생 시 64kb 블록으로 나뉘어져 배열된 모든 디스크에 균등 분산
- 디스크의 수에 따라 성능 향상(이론상은 이렇지만 사실 그렇게 엄청난 차이가 나진 않는다.)
- 성능은 향상되나 내결함성을 제공하지 않기 때문에 복구가 불가능 하다.
- 사실 성능보다는 안전성을 추구하기 때문에 잘 사용하지는 않는다.
RAID 1
- 기존의 단순 볼륨을 Mirroring 한다.
- Mirroring을 위해 짝수 개의 디스크가 필요하다.
- 내결함성을 제공하기 때문에 복구가 가능하다.
- 사용 가능 디스크 용량 = [총 디스크 용량/2]
- Mirroring을 하기 때문에 용량면에서 효율성이 떨어진다.
- RAID 0보다 안전성면에선 좋지만 효율이 낮기 때문에 잘 사용하지는 않는다.
RAID 5
- RAID 0 에서 확장된 개념으로 최소 3개의 디스크가 필요하다.
- RAID 0 에서 내결함성이 추가된 것이다.
- 추가 디스크 하나만큼이 내결함성으로 사용된다.
- 오류 검사를 위해 Parity bit 를 이용한다.
- 두개 이상의 디스크가 Fail 하면 복구가 불가능하다.
- 사용 가능 디스크 용량 = [총 디스크용량 - 하나의 디스크 용량]
RAID 6
- 최소 4개의 디스크가 필요하다.
- RAID 5의 단점인 2개 이상의 디스크가 Fail 하더라도 복구가 가능하다.
- 오류 검사를 위해 중복 Parity bit를 사용한다.
- 사용 가능 디스크 용량 = [총 디스크 용량 - 두 개의 디스크 용량]
RAID 1+0
- 최소 4개의 디스크가 필요하다.
- RAID 1 구성 후에 RAID 0으로 재구성 하는 형태이다.
- Mirroring으로 인해 신뢰성과 성능은 우수하지만, 효율성이 떨어진다.
- 단, RAID 1로 묶인 디스크들이 같이 Fail하면 복구는 불가능하다.
- 사용 가능 디스크 용량 = [총 디스크 용량 - 두 개의 디스크 용량]
이제 실습을 해보자.
실습을 하기 전 초기상태로 스냅샷을 돌려야한다.
필수는 아니지만 초기상태에서 이 실습을 하지 않으면
하드디스크의 순서가 많이 헷갈릴 수 있다.
여기서 말하는 초기상태란 추가된 하드디스크가 없는 상태를 말한다.
최초 상태의 스냅샷이 없고 이미 하드디스크가 장착되어있으면
지금 상태를 스냅샷 저장하고,
하드디스크를 모두 지운뒤 스냅샷 저장하여 그 상태를 초기상태로 가정하고 사용.
(처음 본인이 사용하는 OS를 설치하면 기본세팅을 완료해놓은 상태에서 스냅샷을
찍어두는 버릇을 갖자. 쉽게생각해서 컴퓨터를 포맷하고 기본세팅을 마친후에
복원지점을 만드는 것과 같다.)
<RAID 0 실습>
먼저 1기가 디스크를 2개 추가해준다.
그리고 파티션작업으로
# fdisk /dev/sdb
# fdisk /dev/sdc
둘다 통으로 Primary 풀 포맷으로 만들어준다.
그리고 파티션 '시스템 id를 변경' 하는 옵션인 t옵션을 사용하고
t
fd
p로 확인하고 Linux raid autodetect로 바뀐 것을 확인한다.
w 저장하고 나가자.
확인 작업을 해주고,
# lsblk
장치파일을 생성해주어야한다. 장치파일을 생성해주는 명령어는
# mknod /dev/md0 b 9 0
이다. 여기서 의미하는
b= 블록 디바이스
9 = 주 번호
0 = 보조 번호
장치파일을 만들어주는 것은 형식이 비슷하면 크게 주번호로 묶어주고,
각각을 보조번호로 구분하는 용도로 만들어준다.
대부분 RAID시스템에서는 주번호를 9로 해준다.
md0 의 숫자는 자유이지만 'RAID 0'을 실습할 것이기 때문에 여기선 구분하기 쉽게 0으로 해주겠다.(편의상)
디바이스를 등록시켜준다. 명령어는
# mdadm --create /dev/md0 --level=0 --raid-device=2 /dev/sdb1 /dev/sdc1
mdadm --create /dev/md0 => 디바이스를 /dev/md0에 등록시켜주겠다는 의미
--level=0 => RAID 0 을 의미
--raid-device=2 => 묶어줄 디바이스의 개수
/dev/sdb1 /dev/sdc1 => 묶어줄 디바이스
이렇게 디바이스 등록을 하고난 후에 확인 작업을 해야한다.
# mdadm --detail --scan
상세정보확인도 가능하다.
# mdadm --query --detail /dev/md0
Array Size가 실제 사용 가능한 용량을 나타낸다
등록작업
# mdadm --detail --scan > /etc/mdadm.conf
/etc/mdadm.conf 해당 작업을 저장시키겠는 의미이다.
등록작업을 해주는 이유는 재부팅시 장치이름(여기선 md0)이 자동으로 바뀌는데
그렇지 않고 내가 정한 장치이름으로 자동 적용되도록 명시해주는 것이다.
확인
# cat /etc/mdadm.conf
이제부턴 기존에 우리가 파티션 작업을 할 때와 같다.
M.P생성
# mkdir /raid0오토마운트
# vi /etc/fstab
/dev/md0 /raid0 xfs defaults 0 0
파일시스템 만들기(포맷)
mkfs.xfs /dev/md0
마운트
# mount /dev/md0 /raid0
확인
# df -h
파일이 정상적으로 만들어지는지 확인해보자.
# touch /raid0/a
# ls -l /raid0
지금부터는 동일한 작업은 따로 사진자료없이 진행하도록 하겠다.
<RAID 1 실습>
방금까지 작업한 RAID 0 한 것은 스냅샷 저장하고
다시 초기상태로 돌리자.
이번에는 1기가 3개추가하고 파티션작업
# fdisk /dev/sdb
# fdisk /dev/sdc
# fdisk /dev/sdd
모두 통으로 Primary 풀 포맷으로 만들어준다.
시스템 id 변경
t
fd
p로 확인하고 Linux raid autodetect로 바뀐 것을 확인하고
w 저장하고 나가자
확인
# lsblk
장치파일을 생성
# mknod /dev/md1 b 9 1
b= 블록 디바이스
9 = 주 번호
1 = 보조 번호
이번엔 RAID 1이므로 보조 번호도 1로 해주겠다.(편의상)
디바이스를 등록
# mdadm --create /dev/md1 --level=1 --raid-device=2 /dev/sdb1 /dev/sdc1 mdadm --create /dev/md1 => 디바이스를 /dev/md1에 등록시켜주겠다.
--level=1 => RAID 1
--raid-device=2 => 묶어줄 디바이스의 개수
/dev/sdd는 복구용으로 추가해준 것이므로 아직 건들이지 않는다.
위 명령어를 입력하면 부트와 연결하지말라는 경고가 뜨는데
y를 입력하고 넘어간다.
확인
# mdadm --detail --scan
등록작업
# mdadm --detail --scan > /etc/mdadm.conf
상세정보확인
# mdadm --query --detail /dev/md1
Array Size가 실제 사용 가능한 용량을 나타낸다
확인
# cat /etc/mdadm.conf
파일시스템 구성
# mkfs.xfs /dev/md1
M.P 생성
# mkdir /raid1
마운트
# mount /dev/md1 /raid1
오토마운트
# vi /etc/fstab
/dev/md1 /raid1 xfs defaults 0 0
확인
# df -h
파일이 정상적으로 생성이 되는지 확인해주자.
# touch /raid1/a
# ls -l /raid1
여기서 이제 RAID 1은 Mirroring으로 내결함성을 제공하여 복구가 가능하다. 테스트해보자.
기존의 하드디스크를 삭제해서 한 개의 디스크가 삭제된(고장난) 상황을 연출해주도록 한다.
하드디스크를 제거해주기 위해 종료를 하자.
# init 0
[RAID 복구작업]
setting에 들어가서 확인을 해보면
disk 2 = sdb
disk 3 = sdc
disk 4 = sdd
이렇게 우리가 추가해준 3개의 디스크가 보일텐데
이 중 에서 disk3(sdc)를 제거한다. (딴거 지우지않게 디스크 숫자 확인)
다시 부팅을 하고 확인을 해보자
# mdadm --query --detail /dev/md1
'removed'으로 sdc1이 삭제된 것 확인할 수가 있다.
말그대로 묶어둔 디스크 하나가 사라졌다는 뜻이다.
여기서 우리는 실습을 위해 삭제한 것이기 때문에 removed가 나타난 것이고
실제 고장으로 인한 것은 Failed라고 나타난다.
현업에는 removed가 일어날 일은 거의 없다.
만약 Failed 일 경우의 복구 순서를 알아두자.
아래서 해볼 것이므로 지금 따라하지는 말고 읽어두자.
[Failed 장치 복구 순서]
ex)
1.마운트를 먼저 해제한다.
# umount /dev/md1 /raid
2.고장 난 장치를 raid1 에서 제거
# mdadm /dev/md1 -r /dev/sdc1
-> 이래야 Failed에서 removed로 바뀌는 것이다.
Failed에서 removed로 바뀌면
3.복구작업 진행 (mdadm /dev/md1 --add /dev/sdc1)
자 그럼 다시 돌아와서, 현재 sdc가 removed가 된 상태인데
# fdisk -l /dev/sd*
를 해보면 아직도 sdc가 나타난다.
이유는 /dev/sdc가 삭제됨에 따라
/dev/sdd가 /dev/sdc로 이름이 자동 변경 된 것이다.
헷갈리면 c디스크가 날아갔으니 c디스크를 복구하기위해 c를 사용한다고 생각하면된다.
잠시 실습중지하고 일단 읽어보자.
이제 복구를 위해 아래 명령어를 입력해줄건데
/dev/md1에 /dev/sdc1(원래는 sdd였는데 sdc가 사라짐에따라 sdc로 바뀐 sdd)를 추가해주겠다는 명령어다.
# mdadm /dev/md1 --add /dev/sdc1
그리고 위 명령어를 입력함과 동시에 아래명령어를 빠르게 입력하면
# mdadm --query --detail /dev/md1
이처럼 spare rebuilding 이라고 나타날것이다.
못봤어도 상관없다.
이게 복구 끝이다. 복구는 간단하다.
사라진 디스크의 자리를 다른 디스크로 채워주면 되는 것이다.
단, 위에서 LVM과의 차이점을 명시했었는데
채워줄 디스크는 기존의 디스크와 속도와 용량이 같아야한다.
<RAID 5 실습>
방금까지 작업한 RAID 1 작업한 것을 스냅샷 저장을하고
다시 초기상태로 만들고
하드디스크 1기가 5개를 추가 해준다.
그리고 파티션 작업.
# fdisk /dev/sdb
# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde
# fdisk /dev/sdf
모두 통으로 Primary 풀 포맷으로 만들어준다.
시스템 id 변경
t
fd
p로 확인하고 Linux raid autodetect로 바뀐것 확인
w 저장하고 나가기
확인
# lsblk
장치파일 생성
RAID 5 이므로 보조번호는 편의상 5사용.
# mknod /dev/md5 b 9 5
디바이스 등록
# mdadm --create /dev/md5 --level=5 --raid-device=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm --create /dev/md5 => 디바이스를 /dev/md5에 등록시켜주겠다.
--level=5 => RAID 5
--raid-device=4 => 묶어줄 디바이스의 개수
확인
# mdadm --detail --scan
등록작업
# mdadm --detail --scan > /etc/mdamd.conf
상세정보확인
# mdadm --query --detail /dev/md5
Array Size가 실제 사용 가능한 용량을 나타낸다
RAID5의 특성에 따라 4개의 디스크를 묶었지만 4기가가 아닌 3기가가 사용 용량으로 나온다.
파일시스템 구성
# mkfs.xfs /dev/md5
M.P 생성
# mkdir /raid5
마운트
# mount /dev/md5 /raid5
오토마운트
# vi /etc/fstab
/dev/md5 /raid5 xfs defaults 0 0
확인
# df -h
파일 정상 생성 확인
# touch /raid5/a
# ls -l /raid5
이번에도 디스크 오류상황을 가정하기 위해 디스크를 삭제한다.
종료
# init 0
disk 5 (sde)삭제
재부팅
# mdadm --query --detail /dev/md5
'removed'으로 sde1이 삭제된 것 확인.
복구작업
# mdadm /dev/md5 --add /dev/sde1
그리고 위 명령어를 입력함과 동시에 아래명령어를 빠르게 입력하면
# mdadm --query --detail /dev/md5
'spare rebuilding' 진행 중인 것 확인할 수 있다.
다시 확인
# mdadm --query --detail /dev/md5
위에서 말했다 싶이 RAID 5는 두개 이상의 디스크가 Fail 할 경우에는 복구가 불가능하다.
방금까지 작업한 RAID 5 한 것 스냅샷 저장하고
다시 초기상태로 만든다.
이번에는 1기가 하드디스크 6개를 추가하고
파티션 작업을한다.
# fdisk /dev/sdb
# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde
# fdisk /dev/sdf
# fdisk /dev/sdg
모두 통으로 Primary 풀 포맷으로 만들어준다.
시스템 id 변경
t
fd
p로 확인하고 Linux raid autodetect로 바뀐것 확인
w 저장하고 나가기
확인
# lsblk
장치파일 생성
# mknod /dev/md6 b 9 6
디바이스 등록
# mdadm --create /dev/md6 --level=6 --raid-device=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm --create /dev/md6 => 디바이스를 /dev/md5에 등록시켜주겠다.
--level=6 => RAID 6
--raid-device=4 => 묶어줄 디바이스의 개수
확인
# mdadm --detail --scan
등록작업
# mdadm --detail --scan > /etc/mdadm.conf
상세정보확인
# mdadm --query --detail /dev/md6
Array Size가 실제 사용 가능한 용량을 나타낸다
파일시스템 구성
# mkfs.xfs /dev/md6
M.P 생성
# mkdir /raid6
마운트
# mount /dev/md6 /raid6
오토마운트
# vi /etc/fstab
/dev/md6 /raid5 xfs defaults 0 0
확인
# df -h
파일 정상 생성 확인
# touch /raid6/a
# ls -l /raid6
이제 정말 두개가 Failed되어도 복구가 가능한지 테스트해보자.
디스크를 제거하기위해 종료
# init 0
disk 4,5 (sdd,sde)삭제
재부팅
# mdadm --query --detail /dev/md6
'removed'으로 sdd1,sde1 삭제된 것 확인할 수 있다.
복구작업
# mdadm /dev/md6 --add /dev/sdd1
# mdadm /dev/md6 --add /dev/sde1
그리고 위 명령어를 입력함과 동시에 아래명령어를 매우 빠르게 입력하면
# mdadm --query --detail /dev/md6
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
4 8 49 2 spare rebuilding /dev/sdd1
5 8 65 3 spare rebuilding /dev/sde1
'spare rebuilding' 진행 중인 것 확인할 수 있다.
다시 확인
# mdadm --query --detail /dev/md6
방금까지 작업한 RAID 6 한 것 스냅샷 저장하고
다시 초기상태로.
하드디스크 1기가 6개 추가
# fdisk /dev/sdb
# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde
# fdisk /dev/sdf
# fdisk /dev/sdg
모두 통으로 Primary 풀 포맷으로 만들어준다.
시스템 id 변경
t
fd
p로 확인하고 Linux raid autodetect로 바뀐것 확인
w 저장하고 나가기
확인
# lsblk
장치파일을 생성
# mknod /dev/md10 b 9 10
디바이스 등록
# mdadm --create /dev/md10 --level=10 --raid-device=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm --create /dev/md10 => 디바이스를 /dev/md10에 등록시켜주겠다.
--level=10 => RAID 10
--raid-device=4 => 묶어줄 디바이스의 개수
확인
# mdadm --detail --scan
등록작업
# mdadm --detail --scan > /etc/mdadm.conf
상세정보확인
# mdadm --query --detail /dev/md10
결과를 보면 set로 묶여있는 것을 알 수 있다.
sdb1 와 sdc1가 A,B로 한 세트
sdd1 와 sde1가 A,B로 한 세트이다.
파일시스템 구성
# mkfs.xfs /dev/md10
M.P 생성
# mkdir /raid10
마운트
# mount /dev/md10 /raid10
오토마운트
# vi /etc/fstab
/dev/md6 /raid5 xfs defaults 0 0
확인
# df -h
파일 정상 생성 확인
# touch /raid10/a
# ls -l /raid10
추가적으로 1+0은 지금까지처럼 강제로 디스크를 삭제하면 두 세트가 한개이기 때문에
한 세트에서 하나의 디스크 하나가 사라지면 같은 세트에 있던 나머지 한 개의 디스크도 사라지고
연결되어있던 다른 세트도 마찬가지로 사라져 결국 전체가 사라지게된다.
그래서 우리는 failed 상태로 먼저 만들어준 후에 복구작업을 할 것이다.
먼저 마운트를 해제한다.
umount /dev/md10
Failed 상태로 만든다
# mdadm /dev/md10 -f /dev/sdc1
# mdadm /dev/md10 -f /dev/sdd1
그리고나서 장치 제거
# mdadm /dev/md10 -r /dev/sdc1 /dev/sdd1
확인
# mdadm --query --detail /dev/md10
'removed'으로 sdd1,sde1 삭제된 것 확인.
그리고 남아있던 디스크 2개를 md10에 추가해준다.
# mdadm /dev/md10 --add /dev/sdf1 /dev/sdg1
확인
# mdadm --query --detail /dev/md10
그리고 등록작업을 다시해준다.
# mdadm --detail --scan > /etc/mdadm.conf
다시 마운트
# mount /dev/md10 /raid10
확인
# df -h
-------------------------------------------------------------------------------
이제 RAID를 제거하는 작업을 해보자.
먼저 마운트를 해제한다.
# umount /dev/md10
오토마운트 해제
# vi /etc/fstab
가동중인 장치를 멈춘다.(Stop. 대문자 S)
# mdadm -S /dev/md10
mdadm: stopped /dev/md10
RAID시스템을 구성하기위해 만든 파티션이기 때문에
RAID시스템의 데이터가 들어있고, 그 데이터를 삭제해주는 작업을 해준다.
# mdadm --zero-superblock /dev/sdb1
# mdadm --zero-superblock /dev/sdc1
# mdadm --zero-superblock /dev/sdd1
# mdadm --zero-superblock /dev/sde1
# mdadm --zero-superblock /dev/sdf1
# mdadm --zero-superblock /dev/sdg1
위 작업까지 완료하면 RAID를 위한 파티션 상태가 지워진 것이고,
Primary파티션 상태로는 남아있다.
M.P 디렉터리 삭제
# rm -rf /dev/md10
이렇게하면 RAID 제거가 완료되었다.
Primary파티션 상태도 지우고 싶다면 fdisk의 d 옵션으로 삭제해주면 된다.
여기까지 RAID에 대한 설명이 끝났다.
'Linux' 카테고리의 다른 글
Server/Server(B) install (CentOS 7 64bit) (0) | 2020.03.19 |
---|---|
Client install (Windows7 32bit) (0) | 2020.03.19 |
Linux - LVM(Logical Volume Manager) (0) | 2020.02.27 |
Linux - Quota (0) | 2020.02.27 |
Linux - YUM (0) | 2020.02.27 |