您好,登錄后才能下訂單哦!
LINUX下多路徑multi-path的原理及使用方法是什么,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
一、什么是多路徑
普通的電腦主機(jī)都是一個(gè)硬盤掛接到一個(gè)總線上,這里是一對(duì)一的關(guān)系。而到了有光纖組成的SAN環(huán)境,或者由iSCSI組成的IPSAN環(huán)境,由于主機(jī)和存儲(chǔ)通過(guò)了光纖交換機(jī)或者多塊網(wǎng)卡及IP來(lái)連接,這樣的話,就構(gòu)成了多對(duì)多的關(guān)系。也就是說(shuō),主機(jī)到存儲(chǔ)可以有多條路徑可以選擇。主機(jī)到存儲(chǔ)之間的IO由多條路徑可以選擇。每個(gè)主機(jī)到所對(duì)應(yīng)的存儲(chǔ)可以經(jīng)過(guò)幾條不同的路徑,如果是同時(shí)使用的話,I/O流量如何分配?其中一條路徑壞掉了,如何處理?還有在操作系統(tǒng)的角度來(lái)看,每條路徑,操作系統(tǒng)會(huì)認(rèn)為是一個(gè)實(shí)際存在的物理盤,但實(shí)際上只是通向同一個(gè)物理盤的不同路徑而已,這樣是在使用的時(shí)候,就給用戶帶來(lái)了困惑。多路徑軟件就是為了解決上面的問(wèn)題應(yīng)運(yùn)而生的。
多路徑的主要功能就是和存儲(chǔ)設(shè)備一起配合實(shí)現(xiàn)如下功能:
1.故障的切換和恢復(fù)
2.IO流量的負(fù)載均衡
3.磁盤的虛擬化
由于多路徑軟件是需要和存儲(chǔ)在一起配合使用的,不同的廠商基于不同的操作系統(tǒng),都提供了不同的版本。并且有的廠商,軟件和硬件也不是一起賣的,如果要使用多路徑軟件的話,可能還需要向廠商購(gòu)買license才行。比如EMC公司基于linux下的多路徑軟件,就需要單獨(dú)的購(gòu)買license。好在, RedHat和Suse的2.6的內(nèi)核中都自帶了免費(fèi)的多路徑軟件包,并且可以免費(fèi)使用,同時(shí)也是一個(gè)比較通用的包,可以支持大多數(shù)存儲(chǔ)廠商的設(shè)備,即使是一些不是出名的廠商,通過(guò)對(duì)配置文件進(jìn)行稍作修改,也是可以支持并運(yùn)行的很好的。
二、Linux下multipath介紹,需要以下工具包:
在CentOS 5中,最小安裝系統(tǒng)時(shí)multipath已經(jīng)被安裝,查看multipath是否安裝如下:
1、device-mapper-multipath:即multipath-tools。主要提供multipathd和multipath等工具和 multipath.conf等配置文件。這些工具通過(guò)device mapper的ioctr的接口創(chuàng)建和配置multipath設(shè)備(調(diào)用device-mapper的用戶空間庫(kù)。創(chuàng)建的多路徑設(shè)備會(huì)在/dev /mapper中)。
2、 device-mapper:主要包括兩大部分:內(nèi)核部分和用戶部分。內(nèi)核部分主要由device mapper核心(dm.ko)和一些target driver(md-multipath.ko)。核心完成設(shè)備的映射,而target根據(jù)映射關(guān)系和自身特點(diǎn)具體處理從mappered device 下來(lái)的i/o。同時(shí),在核心部分,提供了一個(gè)接口,用戶通過(guò)ioctr可和內(nèi)核部分通信,以指導(dǎo)內(nèi)核驅(qū)動(dòng)的行為,比如如何創(chuàng)建mappered device,這些divece的屬性等。linux device mapper的用戶空間部分主要包括device-mapper這個(gè)包。其中包括dmsetup工具和一些幫助創(chuàng)建和配置mappered device的庫(kù)。這些庫(kù)主要抽象,封裝了與ioctr通信的接口,以便方便創(chuàng)建和配置mappered device。multipath-tool的程序中就需要調(diào)用這些庫(kù)。
3、dm-multipath.ko和dm.ko:dm.ko是device mapper驅(qū)動(dòng)。它是實(shí)現(xiàn)multipath的基礎(chǔ)。dm-multipath其實(shí)是dm的一個(gè)target驅(qū)動(dòng)。
4、scsi_id: 包含在udev程序包中,可以在multipath.conf中配置該程序來(lái)獲取scsi設(shè)備的序號(hào)。通過(guò)序號(hào),便可以判斷多個(gè)路徑對(duì)應(yīng)了同一設(shè)備。這個(gè)是多路徑實(shí)現(xiàn)的關(guān)鍵。scsi_id是通過(guò)sg驅(qū)動(dòng),向設(shè)備發(fā)送EVPD page80或page83 的inquery命令來(lái)查詢scsi設(shè)備的標(biāo)識(shí)。但一些設(shè)備并不支持EVPD 的inquery命令,所以他們無(wú)法被用來(lái)生成multipath設(shè)備。但可以改寫scsi_id,為不能提供scsi設(shè)備標(biāo)識(shí)的設(shè)備虛擬一個(gè)標(biāo)識(shí)符,并輸出到標(biāo)準(zhǔn)輸出。multipath程序在創(chuàng)建multipath設(shè)備時(shí),會(huì)調(diào)用scsi_id,從其標(biāo)準(zhǔn)輸出中獲得該設(shè)備的scsi id。在改寫時(shí),需要修改scsi_id程序的返回值為0。因?yàn)樵趍ultipath程序中,會(huì)檢查該直來(lái)確定scsi id是否已經(jīng)成功得到。
三、multipath在CentOS 5中的基本配置過(guò)程:
1、安裝和加載多路徑軟件包
# yum –y install device-mapper device-mapper-multipath
# chkconfig –level 2345 multipathd on #設(shè)置成開(kāi)機(jī)自啟動(dòng)multipathd
# lsmod |grep dm_multipath #來(lái)檢查安裝是否正常
如果模塊沒(méi)有加載成功請(qǐng)使用下列命初始化DM,或重啟系統(tǒng)
---Use the following commands to initialize and start DM for the first time:
# modprobe dm-multipath
# modprobe dm-round-robin
# service multipathd start
# multipath –v2
2、配置multipath:
Multipath的配置文件是/etc/multipath.conf , 如需要multipath正常工作只需要如下配置即可:(如果需要更加詳細(xì)的配置,請(qǐng)看本文后續(xù)的介紹)
blacklist {
devnode "^sda"
}
defaults {
user_friendly_names yes
path_grouping_policy multibus
failback immediate
no_path_retry fail
}
# vi /etc/multipath.conf
3、multipath基本操作命令
# /etc/init.d/multipathd start #開(kāi)啟mulitipath服務(wù)
# multipath -F #刪除現(xiàn)有路徑
# multipath -v2 #格式化路徑
# multipath -ll #查看多路徑
如果配置正確的話就會(huì)在/dev/mapper/目錄下多出mpath0、mpath2等之類設(shè)備。
用fdisk -l命令可以看到多路徑軟件創(chuàng)建的磁盤,如下圖中的/dev/dm-[0-3]
4、multipath磁盤的基本操作
要對(duì)多路徑軟件生成的磁盤進(jìn)行操作直接操作/dev/mapper/目錄下的磁盤就行.
在對(duì)多路徑軟件生成的磁盤進(jìn)行分區(qū)之前最好運(yùn)行一下pvcreate命令:
# pvcreate /dev/mapper/mpath0
# fdisk /dev/mapper/mpath0
用fdisk對(duì)多路徑軟件生成的磁盤進(jìn)行分區(qū)保存時(shí)會(huì)有一個(gè)報(bào)錯(cuò),此報(bào)錯(cuò)不用理會(huì)。
fdisk對(duì)多路徑軟件生成的磁盤進(jìn)行分區(qū)之后,所生成的磁盤分區(qū)并沒(méi)有馬上添加到/dev/目錄下,此時(shí)我們要重啟IPSAN或者FCSAN的驅(qū)動(dòng),如果是用
iscsi-initiator來(lái)連接IPSAN的重啟ISCSI服務(wù)就可以發(fā)現(xiàn)所生成的磁盤分區(qū)了
# service iscsi restart
# ls -l /dev/mapper/
如上圖中的mpath0p1和mpath2p1就是我們對(duì)multipath磁盤進(jìn)行的分區(qū)
# mkfs.ext3 /dev/mapper/mpath0p1 #對(duì)mpath2p1分區(qū)格式化成ext3文件系統(tǒng)
# mount /dev/mapper/mpath0p1 /ipsan/ #掛載mpath2p1分區(qū)
四、multipath的高有配置
以上都是用multipath的默認(rèn)配置來(lái)完成multipath的配置,比如映射設(shè)備的名稱,multipath負(fù)載均衡的方法都是默認(rèn)設(shè)置。那有沒(méi)有按照我們自己定義的方法來(lái)配置multipath呢,當(dāng)可以。
1、multipath.conf文件的配置
接下來(lái)的工作就是要編輯/etc/multipath.conf的配置文件
multipath.conf主要包括blacklist、multipaths、devices三部份的配置
blacklist配置
blacklist {
devnode "^sda"
}
Multipaths部分配置multipaths和devices兩部份的配置。
multipaths {
multipath {
wwid **************** #此值multipath -v3可以看到
alias iscsi-dm0 #映射后的別名,可以隨便取
path_grouping_policy multibus #路徑組策略
path_checker tur #決定路徑狀態(tài)的方法
path_selector "round-robin 0" #選擇那條路徑進(jìn)行下一個(gè)IO操作的方法
}
}
Devices部分配置
devices {
device {
vendor "iSCSI-Enterprise" #廠商名稱
product "Virtual disk" #產(chǎn)品型號(hào)
path_grouping_policy multibus #默認(rèn)的路徑組策略
getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #獲得唯一設(shè)備號(hào)使用的默認(rèn)程序
prio_callout "/sbin/acs_prio_alua %d" #獲取有限級(jí)數(shù)值使用的默認(rèn)程序
path_checker readsector0 #決定路徑狀態(tài)的方法
path_selector "round-robin 0" #選擇那條路徑進(jìn)行下一個(gè)IO操作的方法
failback immediate #故障恢復(fù)的模式
no_path_retry queue #在disable queue之前系統(tǒng)嘗試使用失效路徑的次數(shù)的數(shù)值
rr_min_io 100 #在當(dāng)前的用戶組中,在切換到另外一條路徑之前的IO請(qǐng)求的數(shù)目
}
}
如下是一個(gè)完整的配置文件
blacklist {
devnode "^sda"
}
defaults {
user_friendly_names no
}
multipaths {
multipath {
wwid 14945540000000000a67854c6270b4359c66c272e2f356321
alias iscsi-dm0
path_grouping_policy multibus
path_checker tur
path_selector "round-robin 0"
}
multipath {
wwid 14945540000000000dcca2eda91d70b81edbcfce2357f99ee
alias iscsi-dm1
path_grouping_policy multibus
path_checker tur
path_selector "round-robin 0"
}
multipath {
wwid 1494554000000000020f763489c165561101813333957ed96
alias iscsi-dm2
path_grouping_policy multibus
path_checker tur
path_selector "round-robin 0"
}
multipath {
wwid 14945540000000000919ca813020a195422ba3663e1f03cc3
alias iscsi-dm3
path_grouping_policy multibus
path_checker tur
path_selector "round-robin 0"
}
}
devices {
device {
vendor "iSCSI-Enterprise"
product "Virtual disk"
path_grouping_policy multibus
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
path_checker readsector0
path_selector "round-robin 0"
}
}
獲取wwid的方法:
(1)默認(rèn)情況下,將使用 /var/lib/multipath/bindings 內(nèi)的配置設(shè)定具體每個(gè)多路徑設(shè)備名,如果在/etc/multipath.conf中有設(shè)定各wwid 別名,別名會(huì)覆蓋此設(shè)定。
(2)# multipath -v3命令查找
2、負(fù)載均衡測(cè)試
使用dd命令來(lái)對(duì)設(shè)備進(jìn)行寫操作,并同時(shí)通過(guò)iostat來(lái)查看I/0狀態(tài),命令及輸出如下:
# dd if=/dev/zero of=/dev/mapper/iscsi-dm1p1
開(kāi)啟另外一個(gè)終端用以下命令查看IO情況
# iostat 10 10
通過(guò)上述輸出,我們看到,在對(duì)/dev/mapper/iscsi-dm1p1讀寫時(shí),實(shí)際上是通過(guò)對(duì)/dev/md-1包含的當(dāng)前active的所有設(shè)備,即/dev/sde1,/dev/shl這2條路徑來(lái)完成對(duì)實(shí)際的LUN的寫過(guò)程。
3、路徑切換測(cè)試
首先,我們拔掉服務(wù)器上一根網(wǎng)線,經(jīng)過(guò)不到10秒,我們看到:MPIO成功地從上述“失敗”的路徑/dev/sel切換到了另外一條路徑/dev/sdh2上。
關(guān)于LINUX下多路徑multi-path的原理及使用方法是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。