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 (360a 98000534b53524a 6f 786e59743973) 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 (360a 98000534b53524a 6f 787736306e64) 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 (360a 98000534b53524a 6f 786e592d7367) 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 (360a 98000534b53524a 6f 787744692d34) 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會產生”飄移”,造成mount的DISK會錯誤,所以要設定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
360a 98000534b53524a 6f 787736306e64
alias dbdata1
}
multipath {
wwid
360a 98000534b53524a 6f 786e59743973
alias dbdata2
}
multipath {
wwid
360a 98000534b53524a 6f 786e592d7367
alias crs1
}
multipath {
wwid
360a 98000534b53524a 6f 787744692d34
alias crs2
}
}
重啟multipath服務
[root@C5TASM1 etc]#
service multipathd restart
Stopping multipathd daemon: [ OK ]
Starting multipathd daemon: [ OK ]
[root@C5TASM1 etc]# multipath -ll
crs2 (360a 98000534b53524a 6f 787744692d34)
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 (360a 98000534b53524a 6f 786e592d7367)
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 (360a 98000534b53524a 6f 786e59743973)
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 (360a 98000534b53524a 6f 787736306e64)
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
[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