Thursday, April 12, 2018

CentOS 6.6 리눅스 관리] 4.4 RAID - mdadm 명령을 이용한 RAID 1 Mirroring 구성


안녕하세요. 썬구루입니다. 이제 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