SLOW but STEADY
[CentOS7]RAID(Redundant Array of Inexpensive Disks) - RAID 0, RAID 1, RAID 5, RAID 6, RAID 1+0 개념, 구성 본문
[CentOS7]RAID(Redundant Array of Inexpensive Disks) - RAID 0, RAID 1, RAID 5, RAID 6, RAID 1+0 개념, 구성
ㅁ윤지ㅁ 2020. 4. 1. 19:06RAID란??
- 장애요인을 최대로 제거한 고성능 무정지 저장장치입니다.
- 여러 개의 disk를 하나의 가상 disk로 구성, 대용량 저장 장치로 구축 가능합니다. LVM보다 성능이 좋습니다.
- 다수의 disk에 data를 분할, 병렬 전송해 전송 속도를 향상합니다.
- Hardware RAID와 Software RAID로 구분합니다.
- RAID는 level이 존재하며 각 level마다 기능이 다릅니다.
- CentOS 7.x에서는 RAID 0, 1, 5, 6, 1+0번을 제공합니다.
* Hardware RAID란?
서버에 별도의 RAID Controller를 장착하여 물리적인 RAID 구성을 의미합니다. Software RAID에 비해 안정적이고 속도가 빠릅니다.(이론상의 속도는 같습니다.) 하드디스크의 속도와 용량이 같아야 RAID를 구성할 수 있습니다. LVM은 상관하지 않고 구성할 수 있습니다.
* Software RAID란?
기본 OS에 내장되어 있는 RAID를 이용하는 것을 말하며 Hardware RAID에 비해 성능이 떨어집니다. 하드웨어 RAID보다 구성하기 어렵습니다.
RAID 0
- 둘 이상의 디스크 내의 빈 공간(최대 32개)을 하나의 볼륨으로 결합합니다.
- Stripe볼륨에 데이터 쓰기 발생 시 64kb 블록으로 나뉘어 배열된 모든 디스크에 균등 분산합니다.
- 성능은 향상되나 내결함성이 없습니다.
- 디스크의 수에 따라 성능이 향상됩니다. (이론상으로는 속도가 빨라지지만 실제로는 그렇게 속도가 빨라지지 않는다고 합니다,,)
* 내결함성이란?
데이터 복구 기능입니다. 하드디스크가 망가지면 전체 하드디스크에 있는 데이터를 복구할 수 없게 됩니다. 따라서 내결함성이 없는 RAID0번같은 경우는 실무에서는 잘 사용이 되지 않습니다. 실무에서는 성능보다 안전을 우선시하는 경우가 더 많기 때문입니다.
데이터 1010을 저장한다고 하면 1을 Disk 0의 A1에 저장한 다음 0을 Disk 1의 A2에 저장합니다. 그다음 세번째 1을 Disk 0의 A3, 그 다음 0을 Disk 1의 A4에 저장하는 방식입니다.
위의 사진처럼 데이터가 저장됩니다.
RAID 1 (미러 볼륨)
- 디스크가 짝수개가 필요합니다.(디스크 복제 개념이기 때문에 짝수개가 필요합니다.)
- 단순 파티션을 미러링 한다고 생각하면 편합니다.
- 기존의 단순 볼륨을 미러링 합니다.
- 내결함성을 제공합니다. (안정성 Good)
- 사용 가능 디스크의 용량: 총디스크의 용량/2
데이터 1010을 저장한다고 하면 1을 Disk 0의 A1에 저장하고 똑같이 Disk 1의 A1에도 1을 저장합니다.
위의 사진처럼 데이터를 저장합니다.
위의 사진처럼 데이터를 저장하기 때문에 총 디스크 용량이 20GB라고 하면 10GB만큼의 데이터만 저장 가능합니다. 그래서 실무에서는 잘 사용하지 않습니다. (고가인데 낭비하는 것이므로)
RAID 5
- 디스크가 최소 3개 이상 필요합니다.
- 추가 디스크 하나만으로 내결함성이 제공됩니다.(RAID 0번에서 확장된 개념이라고 생각하시면 됩니다.)
- 오류 검사를 위해 Parity bit을 사용합니다.
- 사용 가능 디스크의 용량: 총 디스크 용량 - 하나의 디스크 용량 (총 30GB의 디스크를 사용한다고 하면 10GB에 해당하는 부분은 Parity bit에 사용되어야 하기 때문에 20GB만 사용하실 수 있습니다.)
알파벳 옆에 작게 p라고 표시된 곳에 Parity bit가 저장되는 곳입니다.
10101101이라는 데이터가 들어간다고 하면 A1, A2에 차례대로 데이터를 넣고 Ap에는 Parity bit을 넣어줍니다.
이때 Parity bit은 XOR 연산한 값이 들어갑니다. 그렇게 차례대로 데이터를 넣으면 위의 사진처럼 됩니다.
자세히 보시면 A1 + A2 + Ap = 2, B1 + B2 + Bp = 2 ...를 확인하실 수 있습니다.
* XOR연산
두 개의 비트가 같으면 0, 다르면 1을 반환하는 연산입니다.
* 어떻게 내결함성을 제공할까요?
위의 사진에서 Disk1이 고장이 났다고 가정해 봅시다. 그러면 Disk1자리에 새로운 디스크를 넣습니다. 그다음 Disk0, Disk2에 저장되어 있는 값을 활용해 합이 2가 되도록 하는 값을 넣어주면 데이터가 복구가 됩니다. 하지만 디스크 두 개가 동시에 고장이 나면 데이터 복구는 불가능합니다.
RAID 6
- 디스크가 최소 4개 이상 필요합니다.
- RAID 5의 단점인 2개 이상의 HDD가 FAIL 하더라도 복구가 가능합니다.
- 오류 검사를 위해 중복 Parity bit을 사용합니다. 즉, Parity bit을 중복으로 저장하는 형태입니다.
- 사용 가능 디스크의 용량: 총 디스크 용량 - 두 개의 디스크 용량
RAID 1+0
- 디스크가 최소 4개 이상 필요합니다.
- RAID 1을 구성한 후 RAID 0으로 재구성하는 형태입니다.
- 신뢰성과 성능은 우수하지만 효율적인 측면이 떨어집니다.
- 사용 가능 디스크의 용량: 총 디스크 용량 - 두 개의 디스크 용량
- RAID 1+0을 많이 쓰다가 요즘은 RAID 6을 더 많이 쓴다고 합니다.
RAID 0 구성하기
실습을 하기 위해 먼저 하드디스크 1GB짜리를 2개 추가합니다.
파티션을 나눠줍니다. 주 파티션으로 1GB 전체로 나눠줍니다.
여기서 t를 입력한 다음 fd를 입력합니다.(RAID 시스템을 구성하기 위해 사용하겠다는 뜻입니다.)
p를 입력해서 id값이 fd로 바뀐 것을 확인해 줍니다.
mknod /dev/md0 b 9 0
/dev/md0는 장치 파일의 이름이고 b는 block device, 9는 주번호, 0은 보조 번호입니다.
주번호와 보조 번호는 아무 숫자가 와도 상관은 없지만 9를 주번호, 0은 RAID번호에 맞춰주는 것이 보편적입니다.
mdadm --create /dev/md0 --level=0 --raid-device=2 /dev/sdb1 /dev/sdc1
mdadm --detail --scan
장치의 기본적인 정보를 확인합니다.
mdadm --detail --scan > /etc/mdadm.conf
장치의 정보를 mdadm.conf파일에 등록합니다. 파일은 새로 만듦과 동시에 등록하는 것입니다.
재부팅할 때마다 장치 번호가 md0이 아닌 다른 걸로 바뀌는데 매번 바뀌게 되면
오토 마운트가 정상적으로 수행이 되지 않기 때문에 이 작업을 해주는 것입니다.
cat /etc/mdadm.conf
파일의 내용을 확인해보면 위에서 확인한 결과가 그대로 들어간 것을 확인하실 수 있습니다.
mkdir /raid0
vi /etc/fstab
/dev/md0 /raid0 xfs defaults 0 0 추가해주기
mount /dev/md0 /raid0
df -h
touch /raid0/A
잘 구성되었는지 A라는 파일을 만들어봅니다.
ll /raid0
확인해 봅니다.
RAID 1 구성하기 (구성, 복구)
RAID0을 구성할 때 사용했던 것들은 지워버립니다.
그리고 하드디스크 1GB짜리 3개를 추가해줍니다.
/dev/sdb, /dev/sdc, /dev/sdd 모두 파티션을 통으로 잡아주고 fd로 아이디를 잡아줍니다.
(RAID 0 구성하기에 자세히 나와있습니다.)
mknod /dev/md1 b 9 1
RAID1이니까 장치 이름을 md1로 해주겠습니다.(이름은 임의로 정하시면 됩니다.)
mdadm --create /dev/md1 --level=1 --raid-device=2 /dev/sdb1 /dev/sdc1
RAID1 같은 경우 미러링 하는 RAID이기 때문에 부트 하는 디렉터리인 /boot와 부트 하지 말아라는 경고 메시지가 뜹니다.
그냥 yes해주시면 됩니다.
mdadm --datail --scan
mdadm --detail --scan > /etc/mdadm.conf
mdadm --query --detail /dev/md1
array size를 보시면 2GB를 추가시켜줬지만 1GB만 사용 가능하다는 것을 볼 수 있습니다.
mkfs.xfs /dev/md1
vi /etc/fstab
/dev/md1 /raid1 xfs defaults 0 0 추가시켜 줍니다.
mkdir /raid1
mount /dev/md1 /raid1
df -h
마운트가 되었는지 확인해 봅니다.
touch /raid1/A
잘 구성되었는지 확인하기 위해 A라는 파일을 만듭니다.
ll /raid1
확인해 봅니다.
이제 하드디스크 하나가 고장 났다고 가정해 보겠습니다.
컴퓨터 전원을 끈 뒤, /dev/sdc에 해당하는 하드디스크를 제거합니다.
mdadm --query --detail /dev/md1
맨 밑에 removed가 보입니다.
실무에서는 하드디스크를 직접 떼는 경우보다는 고장이 난 경우를 겪게 될 텐데
이 경우에는 removed가 아닌 failed라고 뜰 것입니다.
removed가 되었을 때랑 failed가 되었을 때 복구하는 방법이 조금 다릅니다.
(아래에 failed가 되었을 때 복구하는 방법을 적어 놓겠습니다.)
fdisk -l /dev/sd*
정보를 확인하면 /dev/sdc를 제거했는데도 보일 것입니다.
/dev/sdd가 /dev/sdc로 이름이 변경이 된 것입니다.
시스템이 재부팅되면서 알아서 해주는 과정입니다.
ll /raid1
만들어줬던 A파일이 없습니다.
mdadm /dev/md1 --add /dev/sdc1
복구작업을 합니다.
mdadm --query --detail /dev/md1
removed 되어있는 상태가 /dev/sdc1를 넣어주었더니 복구가 되었습니다.
ll /raid1
파일 A가 복구가 되었습니다.
** removed가 아닌 failed가 되었을 때 복구 방법
1. umount /dev/md1 /raid1
마운트를 먼저 해줍니다.
2. mdadm /dev/md1 -r /dev/sc1
3. mdadm --query를 확인해보면 removed라고 뜰 것입니다.
4. 위에서 해준 것처럼 복구작업을 진행하시면 됩니다.
RAID 5 구성하기 (구성, 복구)
RAID 1을 구성할 때 사용했던 것들은 지워버립니다.
그리고 하드디스크 1GB짜리 5개를 추가해줍니다.
/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde, /dev/sdf 모두 파티션을 통으로 잡아주고 fd로 아이디를 잡아줍니다.
(RAID 0 구성하기에 자세히 나와있습니다.)
mknod /dev/md5 b 9 5
mdadm --create /dev/md5 --level=5 --raid-device=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm --detail --scan
mdadm --detail --scan > /etc/mdadm.conf
mdadm --query --detail /dev/md5
vi /etc/fstab
/dev/md5 /raid5 xfs defaults 0 0을 추가합니다.
mkdir /raid5
mkfs.xfs /dev/md5
mount /dev/md5 /raid5
df -h
확인해봅니다.
touch /raid5/A
ll /raid5
확인해 봅니다.
이제 하드디스크 하나가 고장 났다고 가정해 보겠습니다.
컴퓨터 전원을 끈 뒤, /dev/sde에 해당하는 하드디스크를 제거합니다.
mdadm --query --detail /dev/md5
removed가 된 것을 확인합니다.
fdisk /dev/sdf
sde를 지웠으니까 sdf가 올라와서 sde가 되었습니다.
mdadm /dev/md5 --add /dev/sde1
mdadm --query --detail /dev/md5
removed가 사라졌습니다.
ll /raid5
RAID 6 구성하기 (구성, 복구)
RAID 5를 구성할 때 사용했던 것들은 지워버립니다.
그리고 하드디스크 1GB짜리 6개를 추가해줍니다.
/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde, /dev/sdf, /dev/sdg 모두 파티션을 통으로 잡아주고
fd로 아이디를 잡아줍니다.
(RAID 0 구성하기에 자세히 나와있습니다.)
mknod /dev/md6 b 9 6
mdadm --create /dev/md6 --level=6 --raid-device=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm --detail --scan
mdadm --detail --scan > /etc/mdadm.conf
mdadm --query --detail /dev/md6
mkdir /raid6
mkfs.xfs /dev/md6
mount /dev/md6 /raid6
df -h
vi /etc/fstab
/dev/md6 /raid6 xfs defaults 0 0을 추가해줍니다.
touch /raid6/A
ll /raid6
RAID 6은 두 개의 하드디스크가 고장이 나도 복구할 수 있기 때문에
하드디스크 두 개가 고장 났다고 가정해 보겠습니다.
컴퓨터 전원을 끈 뒤, /dev/sdd, /dev/sde에 해당하는 하드디스크를 제거합니다.
mdadm --query --detail /dev/md6
mdadm /dev/md6 --add /dev/sdd1
mdadm /dev/md6 --add /dev/sde1
mdadm --query --detail /dev/md6
ll /raid6
RAID 1+0 구성하기 (구성, 복구)
RAID 6을 구성할 때 사용했던 것들은 지워버립니다.
그리고 하드디스크 1GB짜리 6개를 추가해줍니다.
/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde, /dev/sdf, /dev/sdg 모두 파티션을 통으로 잡아주고
fd로 아이디를 잡아줍니다.
(RAID 0 구성하기에 자세히 나와있습니다.)
mknod /dev/md10 b 9 10
mdadm --create /dev/md10 --level=10 --raid-device=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm --detail --scan
mdadm --detail --scan > /etc/mdadm.conf
mdadm --query --detail /dev/md10
mkdir /raid10
mkfs.xfs /dev/md10
mount /dev/md10 /raid10
vi /etc/fstab
/dev/md10 /raid10 xfs defaults 0 0을 추가합니다.
touch /raid10/A
ll /raid10
이번에는 removed상태를 만들지 않고 강제로 failed상태로 만들어 보겠습니다.
umount /dev/md10
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
mdadm /dev/md10 --add /dev/sdf1 /dev/sdg1
mdadm --query --detail /dev/md10
mdadm --detail --scan > /etc/mdadm.conf
mount /dev/md10 /raid10
ll /raid10
'2020 AWS기반 아키텍처 설계 전문가 양성 과정 > 리눅스' 카테고리의 다른 글
[CentOS7] 리눅스 Network Manager, IP주소 수동 설정, IP binding (0) | 2020.04.05 |
---|---|
[CentOS7] 리눅스 LVM(Logical Volume Manager) - 정의, 구성하기 (0) | 2020.03.31 |
리눅스 Quota (0) | 2020.03.31 |
리눅스 - SCP (SSH + CP) (0) | 2020.03.20 |
리눅스 원격접속 서비스(2) - SSH (0) | 2020.03.20 |