使用mpath裝置
用multipath產生映射後,會在/dev目錄下產生多個指向同一條鏈路的裝置:
/dev/mapper/mpathn
/dev/mpath/mpathn
/dev/dm-n
但它們的來源是完全不同的:
/dev/mapper/mpathn 是multipath虛擬出來的多重路徑裝置,我們應該使用這個裝置;
/dev/mpath/mpathn 是udev裝置管理員建立的,實際上就是指向下面的dm-n裝置,僅為了方便,不能用來掛載;
/dev/dm-n 是軟體內部自身使用的,不能被軟體以外使用,不可掛載。
簡單來說,就是我們應該使用/dev/mapper/下的裝置符。對該裝置即可用fdisk進行分區,或建立為pv。
測試multpath路徑
然後用iostat觀察各通道的流量和狀態,以判斷Failover或負載平衡方式是否正常:
# dd if=/dev/zero of=/dev/mapper/mpath0
# iostat -k 2
容錯模式:
mpath18裝置讀寫時,sdaf、sdv會處於active狀態,都有資料流,但sdb、sdl組成的鏈路是enabled,作為ready情況。這為Failover(主備)情況
修改多重路徑模式
預設情況下,multipath已經支援大部分常見的儲存型號(可見multipath.conf.defaults),但不同的multipath版本可能都有些不同。這時,建議參考儲存的官方文檔:
在前面的配置中,我們已經在/etc/mulitpah.conf中配置了多重路徑的預設path_grouping_policy為multibus。但有時候,同一台機器上如果串連了一個以上的儲存時,可能預設規則並不完全適用。這時,我們可以給特定的儲存定製多重路徑符合的策略。
devices {
device {
vendor "HITACHI" //廠商名稱
product "OPEN-V" //產品型號
path_grouping_policy group_by_prio //預設的路徑組策略
path_grouping_policy failover
#getuid_callout "/sbin/scsi_id -p 0x80-g -u -s /block/%n" //獲得唯一裝置號使用的預設程式
path_checker readsector0 //決定路徑狀態的方法
path_checker tur
path_selector "round-robin 0" //選擇那條路徑進行下一個IO操作的方法
prio_callout "/sbin/mpath_prio_alua/dev/%n" //擷取有限級數值使用的預設程式
failback immediate //故障恢複的模式
#hardware_handler "0" //確認用來在路徑切換和IO錯誤時,執行特定的操作的模組。
#no_path_retry queue //在disablequeue之前系統嘗試使用失效路徑的次數的數值
#rr_min_io 100 //在當前的使用者組中,在切換到另外一條路徑之前的IO請求的數目
}
}
※千萬不要寫錯path_checker(可能值有:readsector0, tur, emc_clariion, hp_sw, directio)。不清楚的,可從儲存的官方資料查看
排錯過程
# multipath -v3 -ll
# dmsetup ls
# multipathd -k
> > show config
> >reconfigure
> >show paths
> > CTRL-D
/var/lib/multipath/bindings
/dev/mapper/
# cat /sys/block/sda/device/vendor
# cat /sys/block/sda/device/model
※注意:
/var/lib/multipath/bindings顯示的內容包括黑名單中的wwid,其mpathn順序與multipath-ll的結果可能不同。實際以multipath -ll 的結果為可用裝置。
路徑切換處理
自訂裝置
※注意:1、綁定後,需重建路徑的映射表;2、當加入該wwid綁定後,沒有連結的裝置將不能使用,用-ll也無法看到這些裝置,但/var/lib/multipath/bindings 中可見。
啟動服務和產生映
# modprobe dm-multipath
# service multipathd start
# multipath -v0
更新config檔案
在您更新/etc/multipath.conf檔案後,您必須手動讓m ultipathd 守護進程重新載入該檔案。以下命令可重新載入更新的/etc/multipath.conf 檔案。
# servicemultipathd reload