溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

LINUX下多路徑multi-path的原理及使用方法是什么

發(fā)布時(shí)間:2021-11-06 17:45:31 來(lái)源:億速云 閱讀:444 作者:柒染 欄目:建站服務(wù)器

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í)。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI