linux多重路徑配置

來源:互聯網
上載者:User

標籤:style   http   color   使用   strong   檔案   

一、什麼是多重路徑普通的電腦主機都是一個硬碟掛接到一個匯流排上,這裡是一對一的關係。而到了有光纖組成的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是否安裝如下: 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可和核心部分通訊,以指導核心驅動的行為,比如如何建立mappered device,這些divece的屬性等。linux device mapper的使用者空間部分主要包括device-mapper這個包。其中包括dmsetup工具和一些協助建立和配置mappered device的庫。這些庫主要抽象,封裝了與ioctr通訊的介面,以便方便建立和配置mappered device。multipath-tool的程式中就需要調用這些庫。  3 、dm-multipath.ko和dm.ko:dm.ko是device mapper驅動。它是實現multipath的基礎。dm-multipath其實是dm的一個target驅動。  4 、scsi_id: 包含在udev程式包中,可以在multipath.conf中配置該程式來擷取scsi裝置的序號。通過序號,便可以判斷多個路徑對應了同一裝置。這個是多重路徑實現的關鍵。scsi_id是通過sg驅動,向裝置發送EVPD page80或page83 的inquery命令來查詢scsi裝置的標識。但一些裝置並不支援EVPD 的inquery命令,所以他們無法被用來產生multipath裝置。但可以改寫scsi_id,為不能提供scsi裝置標識的裝置虛擬一個標識符,並輸出到標準輸出。multipath程式在建立multipath裝置時,會調用scsi_id,從其標準輸出中獲得該裝置的scsi id。在改寫時,需要修改scsi_id程式的傳回值為0。因為在multipath程式中,會檢查該直來確定scsi id是否已經成功得到。   /sbin/scsi_id -g -u -s /block/sda   返回scsi的WWID 三、multipath在CentOS 5中的基本配置過程: 
1 、安裝和載入多重路徑軟體包 
# yum –y install device-mapper device-mapper-multipath# chkconfig –level 2345 multipathd on #設定成開機自啟動multipathd# lsmod |grep dm_multipath #來檢查安裝是否正常 
如果模組沒有載入成功請使用下列命初始化DM,或重啟系統 
---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正常工作只需要如下配置即可:(如果需要更加詳細的配置,請看本文後續的介紹)blacklist {devnode "^sda"}defaults {user_friendly_names yespath_grouping_policy multibusfailback immediateno_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 {wwid 14945540000000000a67854c6270b4359c66c272e2f356321alias iscsi-dm0path_grouping_policy multibuspath_checker turpath_selector "round-robin 0"}multipath {wwid 14945540000000000dcca2eda91d70b81edbcfce2357f99eealias iscsi-dm1path_grouping_policy multibuspath_checker turpath_selector "round-robin 0"}multipath {wwid 1494554000000000020f763489c165561101813333957ed96alias iscsi-dm2path_grouping_policy multibuspath_checker turpath_selector "round-robin 0"}multipath {wwid 14945540000000000919ca813020a195422ba3663e1f03cc3alias iscsi-dm3path_grouping_policy multibuspath_checker turpath_selector "round-robin 0"}}devices {device {vendor "iSCSI-Enterprise"product "Virtual disk"path_grouping_policy multibusgetuid_callout "/sbin/scsi_id -g -u -s /block/%n"path_checker readsector0path_selector "round-robin 0"}} 擷取wwid的方法:(1)預設情況下,將使用 /var/lib/multipath/bindings 內的配置設定具體每個多重路徑裝置名稱,如果在/etc/multipath.conf中有設定各wwid 別名,別名會覆蓋此設定。(2)# multipath -v3命令尋找

 

 

 

 

 

 

 

 

測試步驟 
1.部署測試環境,主機上兩塊Emulex光線卡串連到光纖交換器,通過光纖交換器再串連到EMC CX儲存,形成SAN拓撲結構。並劃分1個100G的LUN分配給主機。  
9 5.8        SUSE9 9  SP1  5.9.2 9  SP3  5.9.4 9  SP4  6.1     
2.主機安裝作業系統(測試前準備),安裝最新版的device-mapper-multipath軟體包。 通過device-mapper-multipath使用者工具來驗證多重路徑的負載平衡及路徑失效切換功能: 使用fdisk命令能看到系統識別出來的4個磁碟裝置,這是多條路徑得到的裝置名稱,實際上指向儲存上的同一個LUN,這說明紅旗作業系統已經正確識別到了EMC CX儲存劃分出來的LUN,並為下一步多重路徑管理作準備。命令及輸出如下:

 #fdisk -l 
Disk /dev/sdf: 103 GB, 107374182400 bytes 64 heads, 32 sectors/track, 102400 cylinders 
Units = cylinders of 2048 0* 512 = 107374182400 bytes  
Disk /dev/sdf doesn‘t contain a valid partition table  
Disk /dev/sdh: 103 GB, 107374182400 bytes  
64 heads, 32 sectors/track, 102400 cylinders 
Units = cylinders of 2048 0* 512 = 107374182400 bytes  
Disk /dev/sdh doesn‘t contain a valid partition table  
Disk /dev/sdj: 103 GB, 107374182400 bytes 64 heads, 32 sectors/track, 102400 cylinders 
Units = cylinders of 2048 0* 512 = 107374182400 bytes  
Disk /dev/sdj doesn‘t contain a valid partition table  
Disk /dev/sdl: 103 GB, 107374182400 bytes 64 heads, 32 sectors/track, 102400 cylinders 
Units = cylinders of 2048 0* 512 = 107374182400 bytes  
Disk /dev/sdl doesn‘t contain a valid partition table  
實際上這4個裝置對應的是一個LUN,只是通過不同的路徑看到的。 

 
3.啟動多重路徑管理軟體 
# modprobe dm-multipath (載入dm-multipath核心模組)  
說明:系統啟動時預設地不載入這個模組。如果應用部署需要,可以在系統啟動時定製。 # /etc/init.d/multipathd start (啟動multipath daemon服務) # multipath –v3 (裝配多重路徑裝置) 
# multipath -ll (顯示當前多重路徑拓撲結構) 3600601604b991100f4e5b5c83ef5da11 
[size=100 GB][features="1 queue_if_no_path"][hwhandler="1 emc"]

 \_ round-robin 0 [active] 
   \_ 1:0:2:1 sdf  8:80    [ready ][active] 

   \_ 2:0:1:1 sdl  8:176   [ready ][active]

 \_ round-robin 0 [enabled] 

   \_ 1:0:3:1 sdh  8:112   [ready ][active]  

   \_2:0:0:1 sdj  8:144   [ready ][active]  
這裡的裝置被分成了兩組,實際上就是通過兩個控制器看到的裝置,其中一組的狀態為[active],表示這是當前的活動控制器。接下來的對裝置的讀寫都會通過該控制器下的/dev/sdf和/dev/sdl來進行操作。而只有當[active]控制器發生了故障或者執行了Tresspass後才會啟用目前處於[enabled]狀態的控制器下面的裝置/dev/sdh,/dev/sdj。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.