多路徑(multi-path)軟件的介紹

文章出處:http://blog.csdn.net/xushiyan/article/details/7079018


多路徑(multi-path)軟件的介紹

普通的電腦主機都是一個硬盤掛接到一個總線上,這裏是一對一的關係。而到了有光纖組成的SAN環境,由於主機和存儲通過了光纖交換機連接,這樣的話,就構成了多對多的關係。也就是說,主機到存儲可以有多條路徑可以選擇。主機到存儲之間的IO由多條路徑可以選擇,如下圖:
  
根據上圖所示,每個主機到所對應的存儲可以經過幾條不同的路徑,如果是同時使用的話,I/O流量如何分配?其中一條路徑壞掉了,如何處理?還有在操作系統的角度來看,每條路徑,操作系統會認爲是一個實際存在的物理盤,但實際上只是通向同一個物理盤的不同路徑而已,這樣是在使用的時候,就給用戶帶來了困惑。多路徑軟件就是爲了解決上面的問題應運而生的。多路徑的主要功能就是和存儲設備一起配合實現如下功能:
1.       故障的切換和恢復
2.       IO流量的負載均衡
3.       磁盤的虛擬化
由於多路徑軟件是需要和存儲在一起配合使用的,不同的廠商基於不同的操作系統,都提供了不同的版本。並且有的廠商,軟件和硬件也不是一起賣的,如果要使用多路徑軟件的話,可能還需要向廠商購買license才行。比如EMC公司基於linux下的多路徑軟件,就需要單獨的購買license。好在, RedHatSuse2.6的內核中都自帶了免費的多路徑軟件包,並且可以免費使用,同時也是一個比較通用的包,可以支持大多數存儲廠商的設備,即使是一些不是出名的廠商,通過對配置文件進行稍作修改,也是可以支持並運行的很好的。
     本文一下的部分將專門針對Linux下多路徑軟件的配置安裝,以及一些結合實際的操作進行詳細的介紹(以下操作均在Suse10 SP1下進行)


多路徑軟件包的構成

device-mapper-1.02.13-6.9.i586.rpm      
 該軟件運行在底層,主要進行設備虛擬化和映射。
multipath-tools-0.4.7-34.18.i586.rpm,這個軟件包可以在
多路徑的管理和監控工具,主要進行路徑狀態的檢測,管理工作
 
 

多路徑軟件包的安裝

 
 Rpm –ivh device-mapper-1.02.13-6.9.i586.rpm
 Rpm –ivh  multipath-tools-0.4.7-34.18.i586.rpm
安裝完成後,使用命令modprobe  dm_multipath來加載相應的模塊,可以使用lsmod |grep dm_multipath來檢查安裝是否正常。
 
 

配置文件的修改及創建

接下來的工作就是要創建一個multipath.conf的配置文件,該文件在安裝後不會自動創建。不過有一個模板可以使用,使用如下命令可以創建一個multipath.conf的文件了
 
  cp /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic  /etc/multipath.conf
 
然後再該文件的最後一段加上如下配置:
    
  devices {
       device {                                    
              vendor                  "EMC"   //廠商名稱
              product                 "CaXXXXX"  //產品型號
              path_grouping_policy     group_by_prio //默認的路徑組策略
              getuid_callout          "/sbin/scsi_id -p 0x80 -g -u -s /block/%n" //獲得唯一設備號使用的默認程序
        prio_callout            "/sbin/acs_prio_alua %d" //獲取有限級數值使用的默認程序
        hardware_handler        "1 acs" //確認用來在路徑切換和IO錯誤時,執行特定的操作的模塊。
              path_checker         hp_sw  //決定路徑狀態的方法
              path_selector         "round-robin 0" //選擇那條路徑進行下一個IO操作的方法
              failback          immediate  //故障恢復的模式
              no_path_retry        queue //disable queue之前系統嘗試使用失效路徑的次數的數值
              rr_min_io              100 //在當前的用戶組中,在切換到另外一條路徑之前的IO請求的數目
       }
  }
 
 
編輯modprobe.conf文件,用來設置驅動程序的參數。
/etc/modprobe.conf.local 
增加一行 "options scsi_mod dev_flags=Accusys:ACS92102:0x1000"
 

重新編譯引導文件

 
 "cp -f /boot/initrd-2.6.[kernel_version].img ./initrd-2.6.[k_v].img.bak"
 "mkinitrd"
 做完上述操作後,注意要將操作系統重新啓動

 磁盤的分區及使用

創建多路徑設備的分區,這裏主要一下,多路徑的分區只適合使用kpartx工具,不要使用fdisk進行分區。
---------------------------------
 
Step2,  kpartx -l /dev/dm-0            //lists all partitions on this device
Step3,  kpartx -a /dev/dm-0            //create all device node on this device
kpartx -a /dev/mapper/      //多路徑的設備不可以使用fdisk進行分區,必須使用kpartx -a進行分區後,再進行格式化。
 

查看映射關係

 
Suse3:/sbin # ls -la /dev/disk/by-name/
total 0
drwxr-xr-x 2 root root 200 Aug  1 09:01 .
drwxr-xr-x 7 root root 140 Jul 31 18:05 ..
lrwxrwxrwx 1 root root  10 Aug  1 09:01 SAccusys_ACS92102_010c3b973ffbc469ce11eb4d2db9d677 -> ../../dm-5
lrwxrwxrwx 1 root root  10 Aug  1 09:01 SAccusys_ACS92102_010c3b973ffbc469ce11eb4d2db9d677-part1 -> ../../dm-7
lrwxrwxrwx 1 root root  10 Aug  1 09:01 SAccusys_ACS92102_1fbdf62d63e62b625aaea9eb8c7e45cf -> ../../dm-4
lrwxrwxrwx 1 root root  10 Aug  1 09:01 SAccusys_ACS92102_1fbdf62d63e62b625aaea9eb8c7e45cf-part1 -> ../../dm-6
lrwxrwxrwx 1 root root  10 Aug  1 08:46 SAccusys_ACS92102_6d71358b45505925b5bd17ff49d554f3 -> ../../dm-0
lrwxrwxrwx 1 root root  10 Aug  1 08:46 SAccusys_ACS92102_6d71358b45505925b5bd17ff49d554f3-part1 -> ../../dm-1
lrwxrwxrwx 1 root root  10 Jul 31 18:08 SAccusys_ACS92102_f0ade6db4a8d13de2c30fd5efae7b91c -> ../../dm-2
lrwxrwxrwx 1 root root  10 Jul 31 18:10 SAccusys_ACS92102_f0ade6db4a8d13de2c30fd5efae7b91c-part1 -> ../../dm-3

幾個比較有用的命令

 
1.start/stop multipathd process "service multipathd start/stop"
2.display the multipath topology "multipath -ll" //非常有用的命令。
3.display the multipath debug info "multipath -v3"
4.Scan the HD "fdisk -l"
5.view the FC wwn " cat /sys/class/fc_host/host1/node_name "
下面是舉例:
 multipath -ll
 
 Successful info:
 
SAccusys_ACS92102_3a095edea90dc919f0da043d118fd8c5dm-0 Accusys,ACS92102
[size=20G][features=1 queue_if_no_path][hwhandler=1 acs]
\_ round-robin 0 [prio=400][active]----//表示當前的正在使用控制器
 \_ 1:0:1:0 sdc 8:32  [active][ready]
 \_ 1:0:2:0 sdd 8:48  [active][ready]
 \_ 2:0:1:0 sdg 8:96  [active][ready]
 \_ 2:0:2:0 sdh 8:112 [active][ready] ----//c,d,g,h可以理解爲路徑
\_ round-robin 0 [prio=0][enabled]-----//備份控制器
 \_ 1:0:0:0 sdb 8:16  [active][ghost]
 \_ 1:0:3:0 sde 8:64  [active][ghost]
 \_ 2:0:0:0 sdf 8:80  [active][ghost]
 \_ 2:0:3:0 sdi 8:128 [active][ghost]   //
 
 
 faulty info
 
sdc: checker msg is "hp_sw checker reports path is down" //路徑出現故障
sdd: checker msg is "hp_sw checker reports path is down" //路徑出現故障
sdh: checker msg is "hp_sw checker reports path is down" //路徑出現故障
SAccusys_ACS92102_3a095edea90dc919f0da043d118fd8c5dm-0 Accusys,ACS92102
[size=20G][features=1 queue_if_no_path][hwhandler=1 acs]
\_ round-robin 0 [prio=0][enabled]      ---- //兩個都是enabled狀態,一控制器故障,另外一個控制器沒有failover
 \_ 1:0:1:0 sdc 8:32  [failed][faulty]
 \_ 1:0:2:0 sdd 8:48  [failed][faulty]
 \_ 2:0:1:0 sdg 8:96  [failed][faulty]
 \_ 2:0:2:0 sdh 8:112 [failed][faulty]
\_ round-robin 0 [prio=0][enabled]      ----
 \_ 1:0:0:0 sdb 8:16  [active][ghost]
 \_ 1:0:3:0 sde 8:64  [active][ghost]
 \_ 2:0:0:0 sdf 8:80  [active][ghost]
 \_ 2:0:3:0 sdi 8:128 [active][ghost]
 
 控制器重新啓動後,Suse有時候需要重新啓動纔可以使用。
  multipath -ll
SAccusys_ACS92102_3a095edea90dc919f0da043d118fd8c5dm-0 Accusys,ACS92102
[size=20G][features=1 queue_if_no_path][hwhandler=1 acs]
\_ round-robin 0 [prio=200][active]
 \_ 1:0:0:0 sdb 8:16  [active][ready]
 \_ 1:0:1:0 sdc 8:32  [active][ready]
 \_ 2:0:0:0 sdd 8:48  [active][ready]
 \_ 2:0:1:0 sde 8:64  [active][ready]
 
 
 multipath的所有的相關的文件
 
-rwxr--r--    1 root    root             2554 Jun 30 16:26 /etc/init.d/boot.multipath
-rwxr--r--    1 root    root             3700 Jun 30 16:26 /etc/init.d/multipathd
drwxr-xr-x    2 root    root                0 Jun 30 16:26 /etc/udev
drwxr-xr-x    2 root    root                0 Jun 30 16:26 /etc/udev/rules.d
-rw-r--r--    1 root    root             1185 Jun 30 16:26 /etc/udev/rules.d/71-multipath.rules
-rw-r--r--    1 root    root              262 Jun 30 16:26 /etc/udev/rules.d/72-multipath-compat.rules
-rwxr-xr-x    1 root    root             4872 Jun 30 16:26 /sbin/devmap_name
-rwxr-xr-x    1 root    root            22824 Jun 30 16:26 /sbin/kpartx
-rwxr-xr-x    1 root    root             1114 Jun 30 16:26 /sbin/kpartx_id
-rwxr-xr-x    1 root    root              296 Jun 30 16:26 /sbin/mpath_id
-rwxr-xr-x    1 root    root             8404 Jun 30 16:26 /sbin/mpath_prio_alua
-rwxr-xr-x    1 root    root             7852 Jun 30 16:26 /sbin/mpath_prio_balance_units
-rwxr-xr-x    1 root    root             4208 Jun 30 16:26 /sbin/mpath_prio_emc
-rwxr-xr-x    1 root    root             5492 Jun 30 16:26 /sbin/mpath_prio_hds_modular
-rwxr-xr-x    1 root    root             5984 Jun 30 16:26 /sbin/mpath_prio_netapp
-rwxr-xr-x    1 root    root             3284 Jun 30 16:26 /sbin/mpath_prio_random
-rwxr-xr-x    1 root    root             4184 Jun 30 16:26 /sbin/mpath_prio_tpc
-rwxr-xr-x    1 root    root           121888 Jun 30 16:26 /sbin/multipath
-rwxr-xr-x    1 root    root           146996 Jun 30 16:26 /sbin/multipathd
drwxr-xr-x    2 root    root                0 Jun 30 16:26 /usr/share/doc/packages/multipath-tools
-rw-r--r--    1 root    root               49 Nov 11  2005 /usr/share/doc/packages/multipath-tools/AUTHOR
-rw-r--r--    1 root    root            25284 Nov 11  2005 /usr/share/doc/packages/multipath-tools/COPYING
-rw-r--r--    1 root    root              195 Jun 30 16:25 /usr/share/doc/packages/multipath-tools/ChangeLog
-rw-r--r--    1 root    root               15 Jun 30 16:25 /usr/share/doc/packages/multipath-tools/README
-rw-r--r--    1 root    root             9238 Jun 30 16:25 /usr/share/doc/packages/multipath-tools/multipath.conf.annotated
-rw-r--r--    1 root    root             1499 Jun 30 16:25 /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic
-rw-r--r--    1 root    root              424 Jun 30 16:26 /usr/share/man/man8/devmap_name.8.gz
-rw-r--r--    1 root    root              544 Jun 30 16:26 /usr/share/man/man8/kpartx.8.gz
-rw-r--r--    1 root    root             2048 Jun 30 16:26 /usr/share/man/man8/mpath_prio_alua.8.gz
-rw-r--r--    1 root    root              979 Jun 30 16:26 /usr/share/man/man8/multipath.8.gz
-rw-r--r--    1 root    root              489 Jun 30 16:26 /usr/share/man/man8/multipathd.8.gz
drwx------    2 root    root                0 Jun 30 16:26 /var/cache/multipath
 
 

小技巧

存儲添加映射或者做了修改,主機不用重新啓動的方法
  echo 1 > /sys/class/fc_host/host1/issue_lip
  echo 1 > /sys/class/fc_host/host2/issue_lip
  echo "- - -" > /sys/class/scsi_host/host1/scan
  echo "- - -" > /sys/class/scsi_host/host2/scan
 
  重啓服務,讓配置文件生效的方法:
   1.     Stop the multipathd service.
   2.     Clear old multipath bindings by entering
/sbin/multipath -F
   3.      Create new multipath bindings by entering
/sbin/multipath -v2 -l
Start the multipathd service. //更改配置文件後需要做上面的操作纔可以讓配置文件的更改生效。
 
如果連接一切都正常,但是suse在操作系統下看不到磁盤。這時可能需要重新啓動存儲系統。
發佈了6 篇原創文章 · 獲贊 4 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章