2014/04/24

Published 4月 24, 2014 by

Linux Multipath (Storage I/O)

Linux Multipath (Storage I/O)

l         Multipath說明
儲存裝置到主機有多條路徑, 這就叫作 Multipath, 一般在外接 Storage 上較常看到
Multipath 一般常看到的是在 Storage 上有一個以上的 Controller 或是 供外部主機存取的介面, 這個情況下你會發現, 我在 Storage 上明明只切了一塊空間給主機, 但是再主機上卻看到兩個空間


為什麼要用 Multipath ?
簡單來說就是可以提高可用性, 以上面的例子來說, 主機上看到的兩個空間其實是同一個東西, 但是因為路徑不同造成主機認為是兩個空間. 這個時候我們必須透過軟體來將兩個空間綁在一起

上面的例子, 主機看到兩個空間, 如果你要直接這樣用也是可以, 但是當你用的那個路徑剛好故障, 那你就必須手動去切換路徑, 若是你設定好 Multipath, 系統會幫你自動切換, 這也就是為什麼要作 Multipath 的原因

l         環境說明
OS:
Redhat 5.4 64bit

所需套件
yum –y install device-mapper device-mapper-multipath

指令與設定檔
Multipath 主要服務
/etc/init.d/multipathd

Multipath 主要設定檔
/etc/multipath.conf
最簡單的設定下, 只有兩個地方需要修改:

這個區塊是設定哪些裝置不作 Multipath, 預設的 devnode "*" 會把所有裝都列入不作 Multipath, 把他註解掉即可(前面加 #)

#blacklist {
#        devnode "*"
#}


這個區塊是作 Multipath 的設定, 把前面的註解移掉即可

defaults {
        udev_dir                /dev
        polling_interval        10
        selector                "round-robin 0"
        path_grouping_policy    multibus
        getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
        prio_callout            /bin/true
        path_checker            readsector0
        rr_min_io               100
        max_fds                 8192
        rr_weight               priorities
        failback                immediate
        no_path_retry           fail
        user_friendly_names     yes
}


設定完之後啟動服務
chkconfig multipathd on
service multipathd restart

使用 multipath -l 來檢視
mpath1 這個裝置是由 sdb sde 組成, 也就是說其實 sdb sde 是同一塊空間
後面的 NETAPP,LUN 代表這是 NETAPP上所切出來的 LUN, 依廠牌不同所看到資訊也會不同

[root@C5TASM2 init.d]# multipath -l
mpath2 (360a98000534b53524a6f786e59743973) dm-4 NETAPP,LUN
[size=100G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][active]
 \_ 0:0:0:2 sdc 8:32  [active][undef]
 \_ 3:0:0:2 sdf 8:80  [active][undef]
mpath1 (360a98000534b53524a6f787736306e64) dm-3 NETAPP,LUN
[size=100G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][active]
 \_ 0:0:0:1 sdb 8:16  [active][undef]
 \_ 3:0:0:1 sde 8:64  [active][undef]
mpath0 (360a98000534b53524a6f786e592d7367) dm-2 NETAPP,LUN
[size=1.0G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][active]
 \_ 0:0:0:0 sda 8:0   [active][undef]
 \_ 3:0:0:0 sdd 8:48  [active][undef]
mpath3 (360a98000534b53524a6f787744692d34) dm-5 NETAPP,LUN
[size=1.0G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][active]
 \_ 0:0:0:3 sdg 8:96  [active][undef]

PS.由於linux每次重新開機,disk會產生”飄移”,造成mountDISK會錯誤,所以要設定alias name來避免這種情況發生

設定multipath.conf 增加alias name

[root@C5TASM1 etc]# vi multipath.conf
multipaths {
#       multipath {
#               wwid                    3600508b4000156d700012000000b0000
#               alias                   yellow
#               path_grouping_policy    multibus
#               path_checker            readsector0
#               path_selector           "round-robin 0"
#               failback                manual
#               rr_weight               priorities
#               no_path_retry           5
#       }
  multipath {
       wwid   360a98000534b53524a6f787736306e64
          alias                   dbdata1
  }
  multipath {
          wwid   360a98000534b53524a6f786e59743973
          alias                   dbdata2
  }
  multipath {
          wwid   360a98000534b53524a6f786e592d7367
          alias                   crs1
  }
  multipath {
          wwid   360a98000534b53524a6f787744692d34
          alias                   crs2
  }
}

重啟multipath服務
[root@C5TASM1 etc]# service multipathd restart
Stopping multipathd daemon:                                [  OK  ]
Starting multipathd daemon:                                [  OK  ]


[root@C5TASM1 etc]# multipath -ll
crs2 (360a98000534b53524a6f787744692d34) dm-5 NETAPP,LUN
[size=1.0G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
 \_ 0:0:0:3 sdd 8:48  [active][ready]
 \_ 3:0:0:3 sdh 8:112 [active][ready]
crs1 (360a98000534b53524a6f786e592d7367) dm-2 NETAPP,LUN
[size=1.0G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
 \_ 0:0:0:0 sda 8:0   [active][ready]
 \_ 3:0:0:0 sde 8:64  [active][ready]
dbdata2 (360a98000534b53524a6f786e59743973) dm-4 NETAPP,LUN
[size=100G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
 \_ 0:0:0:2 sdc 8:32  [active][ready]
 \_ 3:0:0:2 sdg 8:96  [active][ready]
dbdata1 (360a98000534b53524a6f787736306e64) dm-3 NETAPP,LUN
[size=100G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
 \_ 0:0:0:1 sdb 8:16  [active][ready]
 \_ 3:0:0:1 sdf 8:80  [active][ready]

刪除路徑
[root@C5TASM1 etc]# multipath -F #刪除現有路徑  兩個新的路徑就會被刪除
[root@C5TASM1 etc]# multipath -v2 #格式化路徑   格式化後又出現


裝置位置
[root@C5TASM1 etc]# ll /dev/mapper/ 
multipath 作出來的裝置會放在這個目錄下, 預設會使用 mpath1 mpath2 mpath3......

若你要使用這個裝置, 直接對他作 fdisk 即可
 [root@C5TASM1 etc]# fdisk /dev/mapper/crs1
 [root@C5TASM1 etc]# kpartx -a /dev/mapper/crs1

Fomrat Disk
[root@C5TASM1 etc]# mkfs.ext3 /dev/mapper/crs1

其它補充
1. 在還沒作 Multipath 之前, 使用 fdisk -l 會看到許多磁碟裝置, 但還算好檢視, 啟動 Multipath 後會出現更多裝置, 像是 dm-0 dm-1 等等, 若你在作 Multipath 之前就先作好 fdisk , 那再用 fdisk -l 的會看到更亂的資訊
因此建議千萬不要在之前就先切空間, 另外可以使用 multipath -l 來確認 multipath 的裝置

參考文件:
http://www.datacentersky.com/depth-analysis-the-path-of-the-how-to-configure-multi-in-the-linux-environment.html
http://xiangit.blogspot.tw/2013/09/linux-multipath-storage-io.html