안녕하세요. 썬구루입니다. 이제 CentOS 리눅스 환경에서 mdadm 명령을 이용한 RAID 1 Mirroring 구성에 대해 알아보도록 하겠습니다. Mirroring 구성은 원본에 대한 사본을 가지는 단순한 구조입니다. 하지만 디스크 단일 장애에 대처를 할 수 있는 구조이고 만약을 대비해서 Hot Spare를 설정할 수도 있습니다.
실무에서는 서버의 OS 디스크에 대해 Mirroring을 잘 구성합니다. 이를 위해 RAID 컨트롤러 기능을 사용할 수 도 있고 OS가 제공하는 볼륨 매니저 기능을 사용해서 OS 디스크 미러링을 구성할 수도 있습니다.
요즘에는 서버의 OS 디스크는 필수적으로 미러링을 합니다. 왜냐하면 OS에 장애가 난다면 더 이상 서비스를 할 수 없기 때문입니다.
리눅스의 mdadm 명령을 사용하여 여기서는 아래와 같은 것을 알아봅니다.
☞ RAID 1(Mirroring) 구성
☞ RAID 1에 Hot Spare 추가
☞ RAID 1에 디스크 장애 유도 및 확인
☞ RAID 1의 구성 요소 디스크 교체
☞ RAID 1 디바이스 삭제
■ RAID 1 (Mirroring) 구성
이것은 RAID 1 (Mirroring) 구성에 사용되는 명령 형식은 다음과 같다.
mdadm --create RAID DEVICE --level=mirror --raid-devices=N COMPONENT_DEVICE...
|
1). 예제
[root@sunguru ~]# mdadm --detail --scan --verbose
[root@sunguru ~]# [root@sunguru ~]# lsblk | grep 10G sdd 8:48 0 10G 0 disk sde 8:64 0 10G 0 disk sdf 8:80 0 10G 0 disk sdg 8:96 0 10G 0 disk sdh 8:112 0 10G 0 disk sdi 8:128 0 10G 0 disk [root@sunguru ~]# [root@sunguru ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdd /dev/sde mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@sunguru ~]# [root@sunguru ~]# mdadm --detail --scan --verbose ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=centos01:0 UUID=942ceab3:117c7908:561999da:b9c11277 devices=/dev/sdd,/dev/sde [root@sunguru ~]# [root@sunguru ~]# mkfs -t ext4 /dev/md0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2619392 blocks 130969 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 27 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@sunguru ~]# [root@sunguru ~]# mount /dev/md0 /datafile01 [root@sunguru ~]# [root@sunguru ~]# df -h /datafile01 Filesystem Size Used Avail Use% Mounted on /dev/md0 9.8G 23M 9.2G 1% /datafile01 [root@sunguru ~]# [root@sunguru ~]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Jul 5 00:13:11 2016 Raid Level : raid1 Array Size : 10477568 (9.99 GiB 10.73 GB) Used Dev Size : 10477568 (9.99 GiB 10.73 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Tue Jul 5 00:14:24 2016 State : active Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 18 Number Major Minor RaidDevice State 0 8 48 0 active sync /dev/sdd 1 8 64 1 active sync /dev/sde [root@sunguru ~]# [root@sunguru ~]# mdadm --detail --brief /dev/md0 >> /etc/mdadm.conf [root@sunguru ~]# [root@sunguru ~]# more /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 name=centos01:0 UUID=942ceab3:117c7908:561999da:b9c11277 [root@sunguru ~]# |
■ RAID 1 에 Hot Spare 추가
결함 허용(Fault Tolerance) RAID 구성에서 하나의 디스크가 장애 났을 때 자동으로 장애 난 디스크와 교체가 될 수 있도록 Hot Spare를 설정할 수 있다. 이것을 통해 데이터 서비스의 가용성을 더욱 높일 수 있다. RAID 1, 5, 6, 10 같은 경우 대부분 Hot Spare를 구성한다.
[root@sunguru ~]# mdadm --detail --scan --verbose
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=centos01:0 UUID=942ceab3:117c7908:561999da:b9c11277 devices=/dev/sdd,/dev/sde [root@sunguru ~]# [root@sunguru ~]# mdadm /dev/md0 --add /dev/sdf mdadm: added /dev/sdf [root@sunguru ~]# mdadm --detail --scan --verbose ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 spares=1 name=centos01:0 UUID=942ceab3:117c7908:561999da:b9c11277 devices=/dev/sdd,/dev/sde,/dev/sdf [root@sunguru ~]# [root@sunguru ~]# mdadm --detail --brief /dev/md0 ARRAY /dev/md0 metadata=1.2 spares=1 name=centos01:0 UUID=942ceab3:117c7908:561999da:b9c11277 [root@sunguru ~]# [root@sunguru ~]# more /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 name=centos01:0 UUID=942ceab3:117c7908:561999da:b9c11277 [root@sunguru ~]# [root@sunguru ~]# mdadm --detail --brief /dev/md0 > /etc/mdadm.conf [root@sunguru ~]# [root@sunguru ~]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Jul 5 00:13:11 2016 Raid Level : raid1 Array Size : 10477568 (9.99 GiB 10.73 GB) Used Dev Size : 10477568 (9.99 GiB 10.73 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Tue Jul 5 00:37:31 2016 State : active Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 19 Number Major Minor RaidDevice State 0 8 48 0 active sync /dev/sdd 1 8 64 1 active sync /dev/sde 2 8 80 - spare /dev/sdf [root@sunguru ~]# |
■ RAID 1 에 디스크 장애 유도 및 확인
CentOS 리눅스에 디스크 장애를 유도하기 위해 VM 메뉴 > Settings > Hard Disk 4 ( 노드 번호 0:3 )을 삭제한다. 그리고 새로운 터미널 상에서 아래와 같이 mdadm 명령을 사용하여 /dev/md0 RAID 디바이스를 모니터링한다.
[root@sunguru ~]# mdadm --monitor /dev/md0
Jul 5 00:52:44: RebuildStarted on /dev/md0 unknown device Jul 5 00:52:44: Fail on /dev/md0 /dev/sdd Jul 5 00:54:25: RebuildFinished on /dev/md0 unknown device Jul 5 00:54:25: SpareActive on /dev/md0 /dev/sdf |
RAID 디바이스 위에 만들어진 파일시스템에 I/O 가 발생하면 제거된 디스크가 감지되고 RAID 디바이스 구성에 문제가 있다고 판단한다. 그러면 Hot Spare에 있는 디스크가 장애 난 디스크를 대처하게 되고 데이터 재동기화가 발생하게 된다. 동기화가 끝나면 정상적인 구성으로 동작하게 된다. 다시 말해 디스크 단일 장애가 발생하여도 데이터 서비스는 계속 지속된다.
아래 내용을 보면 노드 번호 0:3을 가지는 sdd 디스크는 faulty로 표시되어 있고 Hot Spare였던 sdf 디스크가 spare rebuilding으로 표시되어 sde 디스크와 동기화(Sync) 되는 것을 확인할 수 있다.
[root@sunguru ~]# cd /datafile01
[root@sunguru datafile01]# [root@sunguru datafile01]# touch file1 [root@sunguru datafile01]# touch file2 [root@sunguru datafile01]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Jul 5 00:13:11 2016 Raid Level : raid1 Array Size : 10477568 (9.99 GiB 10.73 GB) Used Dev Size : 10477568 (9.99 GiB 10.73 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Tue Jul 5 00:53:15 2016 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 1 Spare Devices : 1 Rebuild Status : 32% complete Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 30 Number Major Minor RaidDevice State 2 8 80 0 spare rebuilding /dev/sdf 1 8 64 1 active sync /dev/sde 0 8 48 - faulty /dev/sdd [root@sunguru datafile01]# |
mdadm 명령으로 데이터 동기화 여부를 확인할 수 있고 동기화가 종료되면 아래와 같이 장애 전과 동일하게 active synce로 동작하게 된다.
[root@sunguru datafile01]# mdadm --detail /dev/md0 | tail
Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 44 Number Major Minor RaidDevice State 2 8 80 0 active sync /dev/sdf 1 8 64 1 active sync /dev/sde 0 8 48 - faulty /dev/sdd [root@sunguru datafile01]# |
■ RAID 1 의 구성 요소 디스크 교체
[root@sunguru datafile01]# mdadm --detail /dev/md0 | tail
Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 44 Number Major Minor RaidDevice State 2 8 80 0 active sync /dev/sdf 1 8 64 1 active sync /dev/sde 0 8 48 - faulty /dev/sdd [root@sunguru datafile01]# [root@sunguru datafile01]# mdadm --manage /dev/md0 --fail /dev/sdd mdadm: set /dev/sdd faulty in /dev/md0 [root@sunguru datafile01]# [root@sunguru datafile01]# mdadm --detail /dev/md0 | tail Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 44 Number Major Minor RaidDevice State 2 8 80 0 active sync /dev/sdf 1 8 64 1 active sync /dev/sde 0 8 48 - faulty /dev/sdd [root@sunguru datafile01]# [root@sunguru datafile01]# mdadm --manage /dev/md0 --remove /dev/sdd mdadm: hot removed /dev/sdd from /dev/md0 [root@sunguru datafile01]# mdadm --detail /dev/md0 | tail Failed Devices : 0 Spare Devices : 0 Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 45 Number Major Minor RaidDevice State 2 8 80 0 active sync /dev/sdf 1 8 64 1 active sync /dev/sde [root@sunguru datafile01]# [root@sunguru datafile01]# mdadm --manage /dev/md0 --add /dev/sdg mdadm: added /dev/sdg [root@sunguru datafile01]# mdadm --detail /dev/md0 | tail Name : centos01:0 (local to host centos01) UUID : 942ceab3:117c7908:561999da:b9c11277 Events : 46 Number Major Minor RaidDevice State 2 8 80 0 active sync /dev/sdf 1 8 64 1 active sync /dev/sde 3 8 96 - spare /dev/sdg [root@sunguru datafile01]# |
■ RAID 1 디바이스 삭제
RAID 1 디바이스 삭제 방법은 RAID 0 과 동일하다. /etc/mdadm.conf 파일에 RAID 디바이스에 대한 정보가 하나밖에 없다면 아래와 같이 /dev/null 을 사용하여 파일의 내용을 제거할 수 있다. 하지만 만약 여러 개 RAID 디바이스 정보가 있다면 vi 편집기를 사용하여 해당 내용을 삭제하는 것이 좋다.
[root@sunguru datafile01]# lsblk /dev/md0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md0 9:0 0 10G 0 raid1 /datafile01 [root@sunguru datafile01]# [root@sunguru datafile01]# blkid /dev/md0 /dev/md0: UUID="ceae4170-0948-4ea8-9b7b-d463e8d8ffd3" TYPE="ext4" [root@sunguru datafile01]# [root@sunguru datafile01]# df -h /dev/md0 Filesystem Size Used Avail Use% Mounted on /dev/md0 9.8G 23M 9.2G 1% /datafile01 [root@sunguru datafile01]# [root@sunguru datafile01]# cd / [root@sunguru /]# [root@sunguru /]# umount /datafile01 [root@sunguru /]# [root@sunguru /]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 [root@sunguru /]# mdadm --remove /dev/md0 mdadm: error opening /dev/md0: No such file or directory [root@sunguru /]# [root@sunguru /]# mdadm --zero-superblock /dev/sdf /dev/sde /dev/sdg [root@sunguru /]# [root@sunguru /]# more /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 spares=1 name=centos01:0 UUID=942ceab3:117c7908:561999da:b9c11277 [root@sunguru /]# cat /dev/null > /etc/mdadm.conf [root@sunguru /]# [root@sunguru /]# more /etc/mdadm.conf [root@sunguru /]# [root@sunguru ~]# mdadm --detail --scan [root@sunguru ~]# |
mdadm --detail --scan 명령을 사용하여 해당 RAID 디바이스 관련 내용이 제거되었는지 확인한다. 다음 게시물에서는 RAID 5 구성에 대해 알아보도록 하겠습니다.
No comments:
Post a Comment