1. 程式人生 > >多路徑(multipath) 介紹

多路徑(multipath) 介紹

一、什麼是多路徑

普通的電腦主機都是一個硬碟掛接到一個總線上,這裡是一對一的關係。而到了有光纖組成的SAN環境,或者由iSCSI組成的IPSAN環境,由於主機和儲存通過了光纖交換機或者多塊網絡卡及IP來連線,這樣的話,就構成了多對多的關係。也就是說,主機到儲存可以有多條路徑可以選擇。主機到儲存之間的IO由多條路徑可以選擇。每個主機到所對應的儲存可以經過幾條不同的路徑,如果是同時使用的話,I/O流量如何分配?其中一條路徑壞掉了,如何處理?還有在作業系統的角度來看,每條路徑,作業系統會認為是一個實際存在的物理盤,但實際上只是通向同一個物理盤的不同路徑而已,這樣是在使用的時候,就給使用者帶來了困惑。多路徑軟體就是為了解決上面的問題應運而生的。

多路徑的主要功能就是和儲存裝置一起配合實現如下功能: 
1.故障的切換和恢復 
2.IO流量的負載均衡 
3.磁碟的虛擬化 
由於多路徑軟體是需要和儲存在一起配合使用的,不同的廠商基於不同的作業系統,都提供了不同的版本。並且有的廠商,軟體和硬體也不是一起賣的,如果要使用多路徑軟體的話,可能還需要向廠商購買license才行。比如EMC公司基於linux下的多路徑軟體,就需要單獨的購買license。好在, RedHat和Suse的2.6的核心中都自帶了免費的多路徑軟體包,並且可以免費使用,同時也是一個比較通用的包,可以支援大多數儲存廠商的裝置,即使是一些不是出名的廠商,通過對配置檔案進行稍作修改,也是可以支援並執行的很好的。

二、Linux下multipath介紹,需要以下工具包:

在CentOS 5中,最小安裝系統時multipath已經被安裝,檢視multipath是否安裝如下:

[[email protected] ~]# rpm -qa|grep device-mapper

device-mapper-multipath-0.4.7-30.el5

device-mapper-event-1.02.32-1.el5

device-mapper-1.02.32-1.el5

如果沒有安裝,從系統的安裝檔案裡找到這集個包:

device-mapper-1.02.32-1.el5.i386.rpm

device-mapper-event-1.02.32-1.el5.i386.rpm

device-mapper-multipath-0.4.7-30.el5.i386.rpm

安裝很簡單:

rpm –Uvh device-mapper-*.rpm

1、device-mapper-multipath:即multipath-tools。主要提供multipathd和multipath等工具和 multipath.conf等配置檔案。這些工具通過device mapper的ioctr的介面建立和配置multipath裝置(呼叫device-mapper的使用者空間庫。建立的多路徑裝置會在/dev /mapper中)。


2、 device-mapper:主要包括兩大部分:核心部分和使用者部分。核心部分主要由device mapper核心(dm.ko)和一些target driver(md-multipath.ko)。核心完成裝置的對映,而target根據對映關係和自身特點具體處理從mappered device 下來的i/o。同時,在核心部分,提供了一個介面,使用者通過ioctr可和核心部分通訊,以指導核心驅動的行為,比如如何建立mappereddevice,這些divece的屬性等。linuxdevice mapper的使用者空間部分主要包括device-mapper這個包。其中包括dmsetup工具和一些幫助建立和配置mappered device的庫。這些庫主要抽象,封裝了與ioctr通訊的介面,以便方便建立和配置mappered device。multipath-tool的程式中就需要呼叫這些庫。 

3、dm-multipath.ko和dm.ko:dm.ko是devicemapper驅動。它是實現multipath的基礎。dm-multipath其實是dm的一個target驅動。 

4、scsi_id 包含在udev程式包中,可以在multipath.conf中配置該程式來獲取scsi裝置的序號。通過序號,便可以判斷多個路徑對應了同一裝置。這個是多路徑實現的關鍵。scsi_id是通過sg驅動,向裝置傳送EVPDpage80或page83 的inquery命令來查詢scsi裝置的標識。但一些裝置並不支援EVPD 的inquery命令,所以他們無法被用來生成multipath裝置。但可以改寫scsi_id,為不能提供scsi裝置標識的裝置虛擬一個識別符號,並輸出到標準輸出。multipath程式在建立multipath裝置時,會呼叫scsi_id,從其標準輸出中獲得該裝置的scsi id。在改寫時,需要修改scsi_id程式的返回值為0。因為在multipath程式中,會檢查該直來確定scsi id是否已經成功得到。 

三、multipath在CentOS5中的基本配置過程:


1、安裝和載入多路徑軟體包 
# yum –y install device-mapper device-mapper-multipath

# chkconfig –level 2345 multipathdon #設定成開機自啟動multipathd

# lsmod |grep dm_multipath #來檢查安裝是否正常

 
如果模組沒有載入成功請使用下列命初始化DM,或重啟系統 
---Use the following commands to initialize and start DM for the firsttime: 
# modprobe dm-multipath 
# modprobe dm-round-robin 
# service multipathd start 
# multipath –v2


2、配置multipath:

Multipath的配置檔案是/etc/multipath.conf ,如需要multipath正常工作只需要如下配置即可:(如果需要更加詳細的配置,請看本文後續的介紹)

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 #開啟mulitipath服務 
# multipath -F #刪除現有路徑 
# multipath -v2 #格式化路徑 
# multipath -ll #檢視多路徑

如果配置正確的話就會在/dev/mapper/目錄下多出mpath0、mpath1等之類裝置。

用fdisk -l命令可以看到多路徑軟體建立的磁碟,如下圖中的/dev/dm-[0-3]

4、multipath磁碟的基本操作 
要對多路徑軟體生成的磁碟進行操作直接操作/dev/mapper/目錄下的磁碟就行.

在對多路徑軟體生成的磁碟進行分割槽之前最好執行一下pvcreate命令:

# pvcreate /dev/mapper/mpath0

# fdisk /dev/mapper/mpath0

用fdisk對多路徑軟體生成的磁碟進行分割槽儲存時會有一個報錯,此報錯不用理會。

fdisk對多路徑軟體生成的磁碟進行分割槽之後,所生成的磁碟分割槽並沒有馬上新增到/dev/目錄下,此時我們要重啟IPSAN或者FCSAN的驅動,如果是用iscsi-initiator來連線IPSAN的重啟ISCSI服務就可以發現所生成的磁碟分割槽了

# service iscsi restart

# ls -l /dev/mapper/

如上圖中的mpath0p1和mpath1p1就是我們對multipath磁碟進行的分割槽

# mkfs.ext3 /dev/mapper/mpath0p1 #對mpath1p1分割槽格式化成ext3檔案系統

# mount /dev/mapper/mpath0p1 /ipsan/ #掛載mpath1p1分割槽

四、multipath的高有配置

以上都是用multipath的預設配置來完成multipath的配置,比如對映裝置的名稱,multipath負載均衡的方法都是預設設定。那有沒有按照我們自己定義的方法來配置multipath呢,當可以。

1、multipath.conf檔案的配置

接下來的工作就是要編輯/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 #決定路徑狀態的方法

path_selector "round-robin 0"#選擇那條路徑進行下一個IO操作的方法

}

Devices部分配置

devices {

device {

vendor "iSCSI-Enterprise" #廠商名稱

product "Virtual disk" #產品型號

path_grouping_policy multibus #預設的路徑組策略

getuid_callout "/sbin/scsi_id -g -u-s /block/%n" #獲得唯一裝置號使用的預設程式

prio_callout     "/sbin/acs_prio_alua %d" #獲取有限級數值使用的預設程式

path_checker readsector0 #決定路徑狀態的方法

path_selector "round-robin 0"#選擇那條路徑進行下一個IO操作的方法

failback       immediate #故障恢復的模式

  no_path_retry      queue #在disable queue之前系統嘗試使用失效路徑的次數的數值

 rr_min_io       100 #在當前的使用者組中,在切換到另外一條路徑之前的IO請求的數目

}

}

如下是一個完整的配置檔案

blacklist {

devnode "^sda"

}

defaults {

user_friendly_names no

}

multipaths {

multipath {

wwid14945540000000000a67854c6270b4359c66c272e2f356321

alias iscsi-dm0

path_grouping_policy multibus

path_checker tur

path_selector "round-robin 0"

}

multipath {

wwid14945540000000000dcca2eda91d70b81edbcfce2357f99ee

alias iscsi-dm1

path_grouping_policy multibus

path_checker tur

path_selector "round-robin 0"

}

multipath {

wwid1494554000000000020f763489c165561101813333957ed96

alias iscsi-dm2

path_grouping_policy multibus

path_checker tur

path_selector "round-robin 0"

}

multipath {

wwid14945540000000000919ca813020a195422ba3663e1f03cc3

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)預設情況下,將使用 /var/lib/multipath/bindings內的配置設定具體每個多路徑裝置名,如果在/etc/multipath.conf中有設定各wwid 別名,別名會覆蓋此設定。

(2)# multipath -v3命令查詢

2、負載均衡測試

使用dd命令來對裝置進行寫操作,並同時通過iostat來檢視I/0狀態,命令及輸出如下: 
# dd if=/dev/zero of=/dev/mapper/iscsi-dm1p1 
開啟另外一個終端用以下命令檢視IO情況

# iostat 10 10

通過上述輸出,我們看到,在對/dev/mapper/iscsi-dm1p1讀寫時,實際上是通過對/dev/md-1包含的當前active的所有裝置,即/dev/sde1,/dev/shl這2條路徑來完成對實際的LUN的寫過程。

3、路徑切換測試

首先,我們拔掉伺服器上一根網線,經過不到10秒,我們看到:MPIO成功地從上述“失敗”的路徑/dev/sel切換到了另外一條路徑/dev/sdh1上。

相關推薦

路徑multipath 介紹

一、什麼是多路徑普通的電腦主機都是一個硬碟掛接到一個總線上,這裡是一對一的關係。而到了有光纖組成的SAN環境,或者由iSCSI組成的IPSAN環境,由於主機和儲存通過了光纖交換機或者多塊網絡卡及IP來連線,這樣的話,就構成了多對多的關係。也就是說,主機到儲存可以有多條路徑可以

LINUX下路徑multi-path介紹及使用

一、什麼是多路徑 普通的電腦主機都是一個硬碟掛接到一個總線上,這裡是一對一的關係。而到了有光纖組成的SAN環境,或者由iSCSI組成的IPSAN環境,由於主機和儲存通過了光纖交換機或者多塊網絡卡及IP來連線,這樣的話,就構成了多對多的關係。也就是說,主機到儲存可以有多條

最短路徑——源最短路徑

引出問題:多源最短路徑的問題 暑假,小文準備去一些城市旅遊。為了節省經費以及方便計劃旅程,小文希望知道任意兩個城市之間的最短路徑。假如有四個城市八條公路。 我們這時怎麼做? 首先用一個數據結構來儲存圖的資訊,因為是四個城市就可以選擇4*4的矩陣:

Python執行緒1——介紹

轉自:http://www.cnblogs.com/Security-Darren/p/4732842.html  Python對多執行緒提供了很好的支援,Python中多執行緒相關的模組包括:thread,threading,Queue。可以方便地支援建立執行緒、互斥鎖、訊號量、同步等特性。   1. 

bootstrap 學習筆記1---介紹bootstrap和柵格系統

優先 cal 圖片 應用 尺寸 文件中 lin png ice   學習前端許久,對於布置框架和響應瀏覽器用html 和javascript 寫的有點繁瑣,無意間看到這個框架,覺得挺好用的就開始學習了,但是這個框架上面有很多知識,不是所有的都要學的,故將學習筆記和覺得重點的

Nordic nRF52832 學習筆記1 介紹,入門,與準備工作

例程 盜版 path pdf 規範 準備 但是 依然 可能   近來,物聯網已成為大勢所趨,VR與AR正方興未艾,各種手環、遙控、智能家居也在粉墨登場。技術前沿的領航者們已經快馬加鞭,各種意誌與暗示也在上傳下達。物聯網,無線通訊,移動互聯,將成為新的目標與寵兒。最近開的電賽

響應式編程Reactive ProgrammingRx介紹

基本 master 個人 點擊 next() 展示 練習 already rand 很明顯你是有興趣學習這種被稱作響應式編程的新技術才來看這篇文章的。 學習響應式編程是很困難的一個過程,特別是在缺乏優秀資料的前提下。剛開始學習時,我試過去找一些教程,並找到了為數不多的實用教

JavaSE 學習筆記之

會有 轉換 容易 per 不同 如何 person 特點 一句話 多 態:函數本身就具備多態性,某一種事物有不同的具體的體現。 體現:父類引用或者接口的引用指向了自己的子類對象。//Animal a = new Cat(); 多態的好處:提高了程序的擴展性。 多態的弊端

51nod 1274 最長遞增路徑DP

string lose 自己 ring mat pri color 16px eve   一開始自己想了一種跑的巨慢。。寫了題解的做法又跑的巨快。。一臉懵逼   顯然要求邊權遞增就不可能經過重復的邊了,那麽設f[i]為第i條邊出發能走多遠就好了,這是我一開始的寫法,可能d

13.面向對象態//封裝

一次 mda else 可用 truct raise 靜態 有關 執行 多態封裝特性strstaticmethod解除綁定方法classmethod小結: 多態 同一種事物的多種形態 增加了程序的靈活性 增加了程序的可擴展性 封裝 封裝數據:保護隱私 封裝方法

分布式服務框架 Zookeeper介紹

出現 編寫 擁有 不同的 順序 高性能 場景 設計 分發 一、概述ZooKeeper(動物園管理員),顧名思義,是用來管理Hadoop(大象)、Hive(蜜蜂)、Pig(小豬)的管理員,同時Apache Hbase、Apache Solr、LinkedIn Sensei等眾

RabbitMQ學習系列: 介紹

ref 原理 二維碼 host 屬性 訂閱 什麽 設計 發的 1. 介紹   RabbitMQ是一個由erlang開發的基於AMQP(Advanced Message Queue )協議的開源實現。用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面都非

51 Nod 1247 可能的路徑數學

ble 中間 end html 證明 algorithm logs col 路徑 題目鏈接:點我點我 題意:中文題 題解:一位大佬寫了一段很精妙的證明(轉): 給個不太嚴謹的證明思路: 第一步:證明路徑可逆,也就是如果(a, b) -> (x, y)可行,則(

spring框架總結04----介紹的是Spring中的JDBC模板

aos 不用 get interface comm use clas table oid 1.1 Jdbc模板概述 它是spring框架中提供的一個對象,是對原始Jdbc API對象的簡單封裝。spring框架為我們提供了很多的操作模板類,入下圖所示: 我們今天的

summernote上傳圖片保存路徑C#

logs new 如果 com 失敗 ase sdn form || 1.寫一個div,ID為Content 1 <div id="Content" class="summernoteContent"> 2 3 </div> 2.讓其成為富文本

刷題總結———長跑路徑ssoj1982

lib pair n) 起點 empty 無向圖 最短 break cstring 題目: 給定一個無向圖···求特定幾個點中兩兩間的最短路中的最小值····其中1≤N,M≤100000;T≤5;1≤K≤n;1≤邊長≤100000,T為一個測試點的測試數··k為測試點數

[模板]單源最短路徑Dijkstra

。。 str using while isdigit etc strong sin inline 如題,給出一個有向圖,請輸出從某一點出發到所有點的最短路徑長度。 主要還是再打一遍最短路,這種算法我用的不多。。。 1 #include<bits/std

前端基於react,後端基於.net core2.0的開發之路1 介紹

tco ioc logs asp webpack 路由 src 部署 關鍵字 文章提綱目錄 1.前端基於react,後端基於.net core2.0的開發之路(1) 介紹 2.前端基於react,後端基於.net core2.0的開發之路(2) 開發環境的配置,

Spring Cloud Stream教程介紹Spring Cloud Stream

連接 測試 channel source 發布 構建 自動 ces oot Spring Cloud Stream是構建消息驅動的微服務應用程序的框架。Spring Cloud Stream基於Spring Boot建立獨立的生產級Spring應用程序,並使用Spring

mysql修改數據存放路徑linux

log chown dir datadir inux mod nas 文件權限 數據   親測可以的,記錄下來 2018年2月5日 11:03:22 1、 /etc/my.cnf [mysqld] 增加datadir = /data/nas 2、 /etc/rc.d/in