Raid & LVM 之一 Raid

Raid & LVM 之一 Raid

Raid

Raid介紹

  • RAID,全稱Redundant Arrays of Inexpensive(Independent)Disks。簡單翻譯叫磁盤陣列。
  • 通俗一點講就是多個磁盤合成一個“陣列”來提供更好的性能、冗餘,或者兩者都提供。
  • 目的有兩個:一個是提高磁盤的IO能力,提高耐用性。
  • 實現方式有三種,如下:
    • 外接式磁盤陣列:通過raid卡提供適配能力
    • 內接式RAID:主板集成RAID控制器,在安裝OS之前需要在BIOS進行設置
    • 軟件RAID:通過OS軟件實現

      常見的Raid級別

      Raid & LVM 之一 Raid

      管理工具介紹

  • mdadm
[root@centos6-node3 ~]# rpm -qa | grep mdadm
mdadm-3.3.4-8.el6.x86_64
[root@centos6-node3 ~]# cat /proc/mdstat    #查看mdstat狀態
Personalities : 
unused devices: <none>
----------------------------------------
mdadm -h  
    -C:創建模式
        -n:定義創建RAID設備個數
        -l:指明要創建的RAID的級別
        -c CHUNK_SIZE: 指明塊大小
        -x : 指明空閒盤的個數
    -A:裝配
    -D:顯示RAID的詳細信息
    -F:監控
    -f:標記指定磁盤爲損壞
    -r:移除磁盤
    -a:添加磁盤
  • 準備條件:
    • centos6x
    • 6塊磁盤

      Raid0實操

      特點:

  • raid0性能比較高
  • 空間0浪費
  • 0容錯
  • 讀寫性能佳

準備兩塊盤

  1. 確認準備的兩塊盤,能被系統讀到
    [root@centos6-node3 ~]# ls -l /dev/ |grep sd 
    brw-rw---- 1 root disk      8,   0 Dec  8 21:51 sda
    brw-rw---- 1 root disk      8,   1 Dec  8 21:51 sda1
    brw-rw---- 1 root disk      8,   2 Dec  8 21:51 sda2
    brw-rw---- 1 root disk      8,  16 Dec  8 21:51 sdb
    brw-rw---- 1 root disk      8,  32 Dec  8 21:51 sdc
    brw-rw---- 1 root disk      8,  48 Dec  8 21:51 sdd
    brw-rw---- 1 root disk      8,  64 Dec  8 21:51 sde
    brw-rw---- 1 root disk      8,  80 Dec  8 21:51 sdf
    brw-rw---- 1 root disk      8,  96 Dec  8 21:51 sdg
    [root@centos6-node3 ~]# lsblk -l     #或者用這個命令也行,推薦用這個
  2. 檢查準備的兩塊盤有沒有raid信息
    [root@centos6-node3 ~]# mdadm --examine /dev/sd[b-c]
    mdadm: No md superblock detected on /dev/sdb.
    mdadm: No md superblock detected on /dev/sdc.
  3. 創建raid分區
    [root@centos6-node3 ~]# fdisk /dev/sdb    #創建分區
    Command (m for help): n       #新建分區
    p                             #選擇主分區
    Partition number (1-4): 1     #區號選擇
    First cylinder (1-261, default 1):    #默認回車            
    Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261):                                 #使用全部分區
    Command (m for help): p               #插看創建的分區
    Device Boot      Start       End      Blocks   Id  System
    /dev/sdb1          1         261     2096451   83  Linux
    Command (m for help): L       #列出可選的類型
    Command (m for help): t       #修改分區類型
    Selected partition 1
    Hex code (type L to list codes): fd    #根據L出來的狀態選擇raid對應的fd
    Command (m for help): p       #查看 我們所做的修改
    Device Boot  Start   End    Blocks   Id  System
    /dev/sdb1      1     261    2096451  fd  Linux raid autodetect
    Command (m for help): w              #保存配置,自動退出
    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    Syncing disks.
  4. sdc也需要同樣的操作去創建raid類型的分區
    [root@centos6-node3 ~]# fdisk /dev/sdc
    n
    p
    1
               //回車
               //回車
    t
    fd
    w
  5. 檢查磁盤是否正確定義Raid:
    [root@centos6-node3 ~]# mdadm --examine /dev/sd[b-c]   #看全盤
    /dev/sdb:
    MBR Magic : aa55
    Partition[0] :      4192902 sectors at           63 (type fd)
    /dev/sdc:
    MBR Magic : aa55
    Partition[0] :      4192902 sectors at           63 (type fd)
    [root@centos6-node3 ~]# mdadm --examine /dev/sd[b-c]1  #看分區
    mdadm: No md superblock detected on /dev/sdb1.
    mdadm: No md superblock detected on /dev/sdc1.
  6. 創建Raid設備
    
    [root@centos6-node3 ~]# mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1    #創建raid0
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    [root@centos6-node3 ~]# cat /proc/mdstat    #查看raid狀態
    Personalities : [raid0] 
    md0 : active raid0 sdc1[1] sdb1[0]
      4190208 blocks super 1.2 512k chunks

unused devices: <none>

其他查看狀態的方法:
``` bash
[root@centos6-node3 ~]# mdadm -E /dev/sd[b-c]1
[root@centos6-node3 ~]# mdadm -D /dev/md0
  1. 給raid創建文件系統,並掛在/mnt/raid0下:
    [root@centos6-node3 ~]# mkdir /mnt/raid0
    [root@centos6-node3 ~]# mkfs.ext4 /dev/md0
    [root@centos6-node3 ~]# mount /dev/md0 /mnt/raid0/
    [root@centos6-node3 ~]# df -Th    #測試
    Filesystem           Type   Size  Used Avail Use% Mounted on
    /dev/mapper/vg_centos6node3-lv_root
                     ext4    37G 1000M   35G   3% /
    tmpfs                tmpfs  491M     0  491M   0% /dev/shm
    /dev/sda1            ext4   477M   52M  400M  12% /boot
    /dev/md0             ext4   3.9G  8.0M  3.7G   1% /mnt/raid0
    [root@centos6-node3 ~]# cp /tmp/* /mnt/raid0/ -r    #寫文件
    cp: overwrite `/mnt/raid0/yum.log'? y
    [root@centos6-node3 ~]# ll /mnt/raid0/              #查看
    total 24
    drwx------ 2 root root 16384 Dec  9 01:16 lost+found
    drwxr-xr-x 3 root root  4096 Dec  9 01:18 opt
    drwxr-xr-x 2 root root  4096 Dec  9 01:18 script
    -rw------- 1 root root     0 Dec  9 01:18 yum.log
    [root@centos6-node3 ~]# df
    Filesystem           1K-blocks    Used Available Use% Mounted on
    /dev/mapper/vg_centos6node3-lv_root
                      38645208 1023300  35652144   3% /
    tmpfs                   502056       0    502056   0% /dev/shm
    /dev/sda1               487652   52916    409136  12% /boot
    /dev/md0               4058816    8212   3841096   1% /mnt/raid0
  2. 寫入fstab
    [root@centos6-node3 ~]# echo "/dev/md0                /mnt/raid0              ext4    deaults         0 0" >> /etc/fstab
    [root@centos6-node3 ~]# mount -av    #掛載點檢查
    mount: UUID=5783f034-6989-4b6d-a187-3475e1a63eb8 already mounted on /boot
    mount: tmpfs already mounted on /dev/shm
    mount: devpts already mounted on /dev/pts
    mount: sysfs already mounted on /sys
    mount: proc already mounted on /proc
    mount: /dev/md0 already mounted on /mnt/raid0
    nothing was mounted
  3. 保存Raid信息
    [root@centos6-node3 ~]# mdadm -E -s -v >> /etc/mdadm.conf
    [root@centos6-node3 ~]# cat /etc/mdadm.conf
    ARRAY /dev/md/0  level=raid0 metadata=1.2 num-devices=2 UUID=e285a4e4:6f3f4984:853672cb:d24dfc1a name=centos6-node3:0
    devices=/dev/sdc1,/dev/sdb1

    至此:raid0搞完了

    Raid1實操

  4. 將原先的raid0幹掉:
    • 卸載
    • 刪除
    • 清fstab,/etc/mdadm.conf
      [root@centos6 ~]#umount /mnt/raid0     <==取消掛載
      [root@centos6 ~]#mdadm -S /dev/md0     <==停止設備
      mdadm: stopped /dev/md0
      [root@centos6 ~]#mdadm --zero-superblock /dev/sdb1   <==刪除raid信息
      [root@centos6 ~]#mdadm --zero-superblock /dev/sdc1
  5. 創建/dev/sd[b-c]1 並完成格式化
    參考raid0即可
    [root@centos6-node3 ~]# fdisk /dev/sdb
    [root@centos6-node3 ~]# fdisk /dev/sdc
    [root@centos6-node3 ~]# mdadm -E /dev/sd[b-c]
    [root@centos6-node3 ~]# mdadm -E /dev/sd[b-c]1
  6. 創建raid設備
    [root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1
    ###查狀態的兩種姿勢
    [root@centos6-node3 ~]# mdadm -D /dev/md1
    [root@centos6-node3 ~]# mdadm -E /dev/sd[b-c]1
    [root@centos6-node3 ~]# mkfs.ext4 /dev/md1    #格式化
  7. 掛載並測試
    [root@centos6-node3 ~]# mkdir /mnt/raid1
    [root@centos6-node3 ~]# mount /dev/md1 /mnt/raid1/
    [root@centos6-node3 ~]# df
    Filesystem           1K-blocks    Used Available Use% Mounted on
    /dev/mapper/vg_centos6node3-lv_root
                      38645208 1021344  35654100   3% /
    tmpfs                   502056       0    502056   0% /dev/shm
    /dev/sda1               487652   52916    409136  12% /boot
    /dev/md1               2029712    3072   1921872   1% /mnt/raid1
    [root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid1/f1 bs=1M count=200   #文件寫入測試
    [root@centos6-node3 ~]# ll /mnt/raid1/ -h   #查看寫入的文件
    total 201M
    -rw-r--r-- 1 root root 200M Dec  9 02:15 f1
    drwx------ 2 root root  16K Dec  9 02:13 lost+found

    Raid5

    • 清掉上述的raid1信息
      [root@centos6 ~]#umount /mnt/raid1     <==取消掛載
      [root@centos6 ~]#mdadm -S /dev/md1     <==停止設備
      mdadm: stopped /dev/md1
      [root@centos6 ~]#mdadm --zero-superblock /dev/sdb1   <==刪除raid信息
      [root@centos6 ~]#mdadm --zero-superblock /dev/sdc1
    • 創建raid5,4塊盤,一塊備用
      [root@centos6-node3 ~]# mdadm -C /dev/md5 -l raid5 -n 3 -x 1 /dev/sd[b-e]1
    • 掛盤&測試
      [root@centos6-node3 ~]# mkfs.ext4 /dev/md5
      [root@centos6-node3 ~]# mkdir /mnt/raid5
      [root@centos6-node3 ~]# mount /dev/md5 /mnt/raid5
      [root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid5/f1 bs=1M count=200
      200+0 records in
      200+0 records out
      209715200 bytes (210 MB) copied, 0.443447 s, 473 MB/s
      [root@centos6-node3 ~]# ll /mnt/raid5/
      total 204816
      -rw-r--r-- 1 root root 209715200 Dec  9 02:29 f1
      drwx------ 2 root root     16384 Dec  9 02:28 lost+found

      Raid10實操

      有三步操作:

  8. 清空上述的raid5信息
  9. 創建raid0,raid1,兩個md
  10. 合併raid0,raid1,就好
    • 清空raid5信息
      [root@centos6-node3 ~]# umount /mnt/raid5/
      [root@centos6-node3 ~]# mdadm -S /dev/md5
      mdadm: stopped /dev/md5
      [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[b-e]1
      [root@centos6-node3 ~]# mdadm -E /dev/sd[b-e]1   #測試成功
      mdadm: No md superblock detected on /dev/sdb1.
      mdadm: No md superblock detected on /dev/sdc1.
      mdadm: No md superblock detected on /dev/sdd1.
      mdadm: No md superblock detected on /dev/sde1.
    • 搞一對個raid1
      [root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1
      [root@centos6-node3 ~]# mdadm -C /dev/md2 -l raid1 -n 2 /dev/sd[e-f]1
    • 將兩個raid1合併成raid0(這樣就高出了raid10)
      
      [root@centos6-node3 ~]# mdadm -C /dev/md10 -l raid0 -n 2 /dev/md1 /dev/md2
      1       9        2        1      active sync   /dev/md2
      [root@centos6-node3 ~]# cat /proc/mdstat     #查看狀態
      Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
      md10 : active raid0 md2[1] md1[0]
      4188160 blocks super 1.2 512k chunks

md2 : active raid1 sdf1[1] sde1[0]
2095424 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdc1[1] sdb1[0]
2095424 blocks super 1.2 [2/2] [UU]

- 掛載&測試
``` bash
[root@centos6-node3 ~]# mkdir /mnt/raid10
[root@centos6-node3 ~]# mkfs.ext4 /dev/md10
[root@centos6-node3 ~]# mount /dev/md10 /mnt/raid10/
[root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid10/f1 bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.312253 s, 672 MB/s
  • 所有的raid操作搞完之後就需要保存配置
    [root@centos6-node3 ~]# mdadm -D -s -v >> /etc/mdadm.conf

    超級簡單的Raid10製作方法

  • 清除上述老版本的raid10信息
    [root@centos6-node3 ~]# umount /mnt/raid10/
    [root@centos6-node3 ~]# mdadm -S /dev/md10
    mdadm: stopped /dev/md10
    [root@centos6-node3 ~]# mdadm -S /dev/md1
    mdadm: stopped /dev/md1
    [root@centos6-node3 ~]# mdadm -S /dev/md2
    mdadm: stopped /dev/md2
    [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[b-c]1
    mdadm: Unrecognised md component device - /dev/sdb1
    mdadm: Unrecognised md component device - /dev/sdc1
    [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[d-e]1   #查看狀態
    mdadm: Unrecognised md component device - /dev/sdd1
    mdadm: Unrecognised md component device - /dev/sde1
    [root@centos6-node3 ~]# mdadm -E /dev/sd[b-e]1
    mdadm: No md superblock detected on /dev/sdb1.
    mdadm: No md superblock detected on /dev/sdc1.
    mdadm: No md superblock detected on /dev/sdd1.
    mdadm: No md superblock detected on /dev/sde1.
    [root@centos6-node3 ~]# rm -fr /dev/md1
    [root@centos6-node3 ~]# rm -fr /dev/md2
    [root@centos6-node3 ~]# rm -fr /dev/md0
    [root@centos6-node3 ~]# rm -fr /dev/md10
    [root@centos6-node3 ~]# rm -fr /dev/md5
  • 一步到位做法:
    [root@centos6-node3 ~]# mdadm -C /dev/md10 -l raid10 -n 4 /dev/sd[b-e]1    #直接搞
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md10 started.
    [root@centos6-node3 ~]# mkfs.ext4 /dev/md10   #格式化
  • 掛載&測試
    [root@centos6-node3 ~]# mkdir /mnt/raid10/
    [root@centos6-node3 ~]# mount /dev/md10 /mnt/raid10/
    [root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid10/f2 bs=1M count=1024
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB) copied, 2.70463 s, 397 MB/s

    最後小結

    所有操作完成之後,一定要有兩個操作:

  • 將raid信息寫入fstab,以防斷電重啓掉盤
  • 所有的raid操作搞完之後就需要保存配置
    [root@centos6-node3 ~]# mdadm -D -s -v >> /etc/mdadm.conf

Raid故障解決

Raid測試方案

演示一下raid1的測試,需要兩塊工作盤和一塊備用盤;完成好相關的分區就行,先別掛載。

  • 工具:mdadm --manage
    [root@centos6-node3 ~]# mdadm --manage --help
    Usage: mdadm arraydevice options component devices...
    This usage is for managing the component devices within an array.
    The --manage option is not needed and is assumed if the first argument
    is a device name or a management option.
    The first device listed will be taken to be an md array device, any
    subsequent devices are (potential) components of that array.
    Options that are valid with management mode are:
    --add         -a   : hotadd subsequent devices to the array
    --re-add           : subsequent devices are re-added if there were
                     : recent members of the array
    --remove      -r   : remove subsequent devices, which must not be active
    --fail        -f   : mark subsequent devices a faulty
    --set-faulty       : same as --fail
    --replace          : mark device(s) to be replaced by spares.  Once
                     : replacement completes, device will be marked faulty
    --with             : Indicate which spare a previous '--replace' should
                     : prefer to use
    --run         -R   : start a partially built array
    --stop        -S   : deactivate array, releasing all resources
    --readonly    -o   : mark array as readonly
    --readwrite   -w   : mark array as readwrite
  • 功能:
    • 重新將設備加入到磁盤陣列
    • 將設備標記爲故障
    • 從陣列中刪除設備
    • 使用備用設備更換故障設備
    • 先停止部分陣列
    • 停止陣列
    • 標記陣列爲ro或者rw

      爲raid陣列添加設備

  • 先創建一個raid1
    • 清空上述的raid10
      [root@centos6-node3 ~]# mdadm -S /dev/md10
      mdadm: stopped /dev/md10
      [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[b-e]1
      [root@centos6-node3 ~]# mdadm -E /dev/sd[b-e]1
  • 新建raid1
    [root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1
    [root@centos6-node3 ~]# mkfs.ext4 /dev/md1
    [root@centos6-node3 ~]# mount /dev/md1 /mnt/raid1
  • 添加raid設備
    [root@centos6-node3 ~]# mdadm --manage /dev/md1 --add /dev/sdd1
    [root@centos6-node3 ~]# mdadm --manage /dev/md1 --add /dev/sde1  

    將一塊磁盤標記爲故障並清理出陣列

    標記故障:

    [root@centos6-node3 ~]# mdadm --manage /dev/md1 --fail /dev/sdd1
    mdadm: set /dev/sdd1 faulty in /dev/md1
    [root@centos6-node3 ~]# mdadm -D /dev/md1
    [root@centos6-node3 ~]# mdadm --manage /dev/md1 --fail /dev/sde1

    徹底清除:因爲標記故障的時候還沒清理

    [root@centos6-node3 ~]# mdadm --manage /dev/md1 --remove /dev/sdd1
    [root@centos6-node3 ~]# mdadm -D /dev/md1    #查看結果

    重新添加設備,來替代已經移除的設備

    剛纔移除了一塊/dev/sdd1

  • 現在我們把丫給掛上去:
    [root@centos6-node3 ~]# mdadm --manage /dev/md1 --re-add /dev/sdd1
    mdadm: --re-add for /dev/sdd1 to /dev/md1 is not possible

    傻了吧,報錯啦!


因爲陣列中的磁盤已經達到了最大的數量。因此,我們有兩個選擇:a)將 /dev/sdb1 添加爲備用的,如例1;或 b)從陣列中刪除 /dev/sdd1 然後重新添加 /dev/sdb1。
我們選擇選項 b),先停止陣列然後重新啓動:

[root@centos6-node3 ~]# umount /mnt/raid1
[root@centos6-node3 ~]# mdadm --stop /dev/md1
[root@centos6-node3 ~]# mdadm --assemble /dev/md1 /dev/sdd1 /dev/sde1
mdadm: /dev/md1 assembled from 0 drives and 2 spares - not enough to start the array.     #完犢子了
[root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1    #重啓raid1
[root@centos6-node3 ~]# mdadm -D /dev/md1
[root@centos6-node3 ~]# mdadm --manage /dev/md1 --add /dev/sdd1
[root@centos6-node3 ~]# mount /dev/md1 /mnt/raid1
[root@centos6-node3 ~]# ll /mnt/raid1    #原來的數據還在
total 1048596
-rw-r--r-- 1 root root 1073741824 Dec  9 03:31 f2
drwx------ 2 root root      16384 Dec  9 03:27 lost+found

使用特定磁盤更換raid設備

[root@centos6-node3 ~]# mdadm --manage /dev/md1 --replace /dev/sdd1 --with /dev/sdc1

-----END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章