2013年9月27日 星期五

Linux Multipath (Storage I/O)

什麼是 Multipath

一般電腦主機裡是由一個硬碟直接連到主機上, 這個情況下, 儲存裝置到主機只有單一路徑,

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

為什麼要用 Multipath ?

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

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

環境說明

OS:

CentOS 5.4 64bit
選擇這個OS只是因為遇到的客戶環境剛好是這個XD

所需套件

CentOS 安裝時應該會自動安裝, 若沒有可執行以下指令:
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@localhost etc]# multipath -l
mpath1 (360a98000503365705a34746d6b556a2f) dm-2 NETAPP,LUN
[size=10G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][active]
 \_ 5:0:0:3 sdb 8:16  [active][undef]
 \_ 5:0:1:3 sde 8:64  [active][undef]

使用 scsi_id 來檢視 sdb sde 的 wwid, wwid 相同代表為同一塊空間
[root@localhost etc]# scsi_id -g -u -s /block/sdb
360a98000503365705a34746d6b556a2f
[root@localhost etc]# scsi_id -g -u -s /block/sde
360a98000503365705a34746d6b556a2f

裝置位置

/dev/mapper/  
multipath 作出來的裝置會放在這個目錄下, 預設會使用 mpath1 mpath2 mpath3......

若你要使用這個裝置, 直接對他作 fdisk 即可
 fdisk /dev/mapper/mpath1

要注意的是, 作出來的名字會變 mpath1p1 mpath1p2....等等, 不像一般作出來會像 sdb1 sdb2, 而是前面會多一個 p 代表 partition
另外 fdisk 完之後, 你必須重開機, 作出來的 partition 才能使用

其它補充

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


2. /etc/multipath.conf

blacklist 寫法如下, 一行一筆設定, 建議使用 wwid

blacklist {
#        devnode "*"
                devnode "^hd[a-z]"
                wwid 360a98000503365705a34746d6c35424a
                wwid 360a98000503365705a34746d6b413161
}






沒有留言:

張貼留言