Linux配置和管理裝置對映多路徑multipath

gegeman發表於2020-10-28

 

(一)多路徑管理軟體的由來
在企業中,伺服器與儲存通常是分開放置的,伺服器上的硬碟通常用來安裝作業系統和應用軟體,業務資料則是儲存在單獨的儲存裝置上,那麼,伺服器與儲存是如何連線的呢?根據儲存協議,經常有2種方案:

  • NAS儲存(Network Attached Storage,網路附加儲存),NAS儲存使用基於檔案的協議(例如CIFS、NFS),其它計算機通過乙太網訪問NAS儲存,類似於一個共享目錄,NAS儲存好處多多,網路適配性好,只要網路互通,就能訪問,NAS儲存價格也較為便宜,缺點是相對SAN而言,網路頻寬受限、網路延遲較大,效能較差。
  • SAN儲存(Storage Area Network,儲存區域網路),SAN儲存基於Fabric協議,分配給其它機器的是LUN,SAN儲存可以來理解為一個虛擬的磁碟。通常價格昂貴,效能較好。

對於NAS儲存,只要使用IP訪問即可,但是對於SAN儲存,需要專業的硬體支援,主要是SAN HBA卡和SAN交換機。
在SAN網路中,大企業為了業務穩定,不因硬體損壞而導致業務停滯,在硬體採購時,往往採用“雙份”的策略:2個網路卡做繫結、2個CPU、2個風扇、2個HBA卡、2個SAN交換機等等。為了保障儲存的高可用性,儲存、SAN交換機、伺服器架構通常如下:
架構1:一臺伺服器擁有2個HBA卡,1臺SAN交換機,2個儲存控制器控制1臺儲存,這樣就形成了2條鏈路。
hba1 <--> SAN <--> cntrlr1 (Storage)
hba2 <--> SAN <--> cntrlr2 (Storage)

架構2:一臺伺服器擁有2個HBA卡,2臺SAN交換機,2個儲存控制器控制1臺儲存(這裡把RAID A和RAID B看做是同一臺儲存上劃出來的LUN,RAID A和RAID B使用相同的2個控制器),這樣就形成了4臺鏈路,但是對於每個LUN而言,還是2條鏈路:
hba1 <--> SAN1 <--> cntrlr1 (RAID A)
hba1 <--> SAN1 <--> cntrlr1 (RAID B)
hba2 <--> SAN2 <--> cntrlr2 (RAID A)
hba2 <--> SAN2 <--> cntrlr2 (RAID B)

這種多條鏈路架構帶來的好處有:
--冗餘。每個儲存都有2條鏈路,在active/standby模式下,如果HBA卡、SAN交換機、儲存控制器出現了單點故障,還有另外一條鏈路提供服務。
--改進的效能。2條鏈路設定為active/active模式,實現I/O負載平衡。
當然,壞處也非常明顯:
通過上面的2種架構可以發現,在SAN網路中,儲存分配出來的LUN(可以理解為一個硬碟),在多條儲存鏈路連線後,主機會將每條鏈路識別到的LUN當做一個硬碟,如果一個LUN被主機上的2個HBA卡各自識別了一次,那麼我們會在主機上看到2個一樣大小的硬碟。明明只有一個硬碟,卻因鏈路問題主機識別為了2個硬碟,給磁碟管理帶來了麻煩。
這時候,多路徑裝置管理軟體就應運而生了。每個多路徑裝置都有一個全球識別符(WWID),他是一個全球唯一的無法更改的號碼,通過WWID,多路徑軟體就可以將因路徑問題重複識別到了磁碟做一個整合對映,對外提供服務。例如,LUN A在通過儲存多路徑後,在主機上別識別為了/dev/sdc和/dev/sdd,然而sdc和sdd有相同的WWID,所以會將sdc和sdd整合為mpath1磁碟對外提供服務,解決了主機重複識別磁碟的問題。

 

(二)裝置對映多路徑問題展現
在《儲存系列1-openfiler開源儲存管理平臺實踐》文章第四節“(4.1)使用openfiler對外提供塊儲存(類似SAN儲存)”分配儲存之後,我們可以看到這樣的情況:


在儲存端分配了3個lv,大小分別為1GB、2GB、10GB。

但是在客戶機上卻增加了6個磁碟,多了1倍的數量,仔細檢視,發現sdb和sdc、sdd和sde、sdf和sdg大小相同。

再確認磁碟路徑確認磁碟分配,發現如下,客戶機通過2條路徑訪問同一個磁碟,因為路徑不同,最終同一個LUN分配了2個不同的碟符。

這裡整理一下儲存、鏈路、主機之間的對應關係,如下:

同一塊磁碟對應2個或以上碟符,使用者在使用時如果稍不注意,肯定會出問題,因此需要使用多路徑軟體將多個碟符對映到同一個碟符下面。

 

(三)常見的多路徑配置管理軟體
通過上面的介紹,想必大家已經知道多路徑儲存帶來的問題了。針對多路徑問題,各個系統廠商和儲存廠商均開發了多路徑裝置管理軟體。常見的多路徑裝置管理軟體有:

  • EMC儲存廠商的PowerPath
  • Windows系統的MPIO
  • HP-UNIX系統的Native_Multi-Path
  • Linux系統的DM Multipath

下面以Linux的DM Multipath為例,學習多路徑軟體的配置和管理。

 

(四)裝置對映多路徑軟體安裝
我使用的環境為:
--儲存伺服器(iSCSI target):使用openfiler提供iSCSI儲存
--客戶機伺服器(iSCSI initiator):centos7(redhat7也一樣)
儲存伺服器openfiler的儲存分配方法不再贅述,可以參考文章:《儲存系列1-openfiler開源儲存管理平臺實踐》。接下來我們在客戶機安裝多路徑軟體

# 安裝多路徑軟體
yum install -y device-mapper*

# 將多路徑軟體新增至核心模組中
modprobe dm-multipath
modprobe dm-round-robin

# 檢查核心新增情況
[root@mysql8 ~]# lsmod |grep multipath
dm_multipath 27427 6 dm_round_robin,dm_service_time
dm_mod 123303 23 dm_round_robin,dm_multipath,dm_log,dm_mirror,dm_service_time

# 設定開機自啟動
systemctl enable multipathd.service

# 檢查開機自啟動
[root@mysql8 ~]# systemctl list-unit-files|grep multipath
multipathd.service enabled

# 建立多路徑引數配置檔案,該語句會建立multipath的引數配置檔案:/etc/multipath.conf
/sbin/mpathconf --enable

# 啟動多路徑軟體multipathd
systemctl start multipathd.service

在安裝並啟動multipath之後,我們並沒有做任何的引數配置,但是可以發現,主機上多了3塊磁碟:/dev/mapper/mpathe、/dev/mapper/mpathf、/dev/mapper/mpathg。我們知道,多路徑軟體就是用來管理磁碟對映的,把主機識別到的6塊磁碟對映為了3塊磁碟。

[root@testserver by-id]# fdisk -l
... 略 ...
Disk /dev/mapper/mpathe: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/mpathf: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/mpathg: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

那麼,這3塊磁碟又和主機識別到的6塊磁碟時上面關係呢?我們可以使用多路徑檢視命令來確認:

# 可以看到mpathe與sdc和sdb對應同一塊磁碟
[root@testserver by-id]# multipath -ll
mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK 
size=1.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 4:0:0:1 sdc 8:32 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 3:0:0:1 sdb 8:16 active ready running
mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK 
size=10G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 4:0:0:3 sdg 8:96 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 3:0:0:3 sdf 8:80 active ready running
mpathf (14f504e46494c4552336b535576772d6f5a556b2d5844746e) dm-4 OPNFILER,VIRTUAL-DISK 
size=2.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 4:0:0:2 sde 8:64 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 3:0:0:2 sdd 8:48 active ready running

最終,我們看到的磁碟關係就是這樣的了

總結一下:儲存端劃分了3個LUN(可以理解為邏輯卷lv,或者磁碟都行),在通過2條儲存鏈路對映之後,在主機端識別到了6個磁碟,2個碟符對應同一個LUN,在使用多路徑軟體multipath做了對映之後,6個磁碟對映為了3個磁碟,最終結果為:儲存的lvdata1對應mpathe、lvdata2對應mpathf、lvdata3對應mpathg。


(五)裝置對映多路徑軟體配置
在上一步中,我們並沒有對multipath的引數配置檔案作任何修改,啟動multipath之後,就自動將重複的磁碟做了聚合對映,在這一章節。我們通過修改引數檔案,瞭解一下multipath軟體有哪些引數可以配置。
multipath軟體的引數配置檔案為 /etc/multipath.conf 。多路徑配置檔案主要分為以下幾個部分:

  • blacklist:多路徑裝置黑名單,該處的裝置不會被多路徑軟體識別管理
  • blacklist_exceptions:根據blacklist部分中的引數列出不在黑名單中的裝置
  • defaults:DM Multipath的常規配置
  • multipaths:各個獨立多路徑裝置的特性設定,該部分引數會覆蓋defaults和devices的引數
  • devices:各個儲存控制器的設定,如果要使用非預設的儲存裝置,則可能需要建立devices子部份,該部分引數會覆蓋defaults部分的引數

如果同一個引數在defaults,devices,multipaths部分都進行了配置,則優先順序從高到低為:multipaths,devices, defaults。

multipath預設配置檔案如下:

Linux配置和管理裝置對映多路徑multipath
[root@testserver ~]# cat /etc/multipath.conf 
# This is a basic configuration file with some examples, for device mapper
# multipath.
#
# For a complete list of the default configuration values, run either
# multipath -t
# or
# multipathd show config
#
# For a list of configuration options with descriptions, see the multipath.conf
# man page

## By default, devices with vendor = "IBM" and product = "S/390.*" are
## blacklisted. To enable mulitpathing on these devies, uncomment the
## following lines.
#blacklist_exceptions {
#    device {
#    vendor    "IBM"
#    product    "S/390.*"
#    }
#}

## Use user friendly names, instead of using WWIDs as names.
defaults {
user_friendly_names yes
find_multipaths yes
}
##
## Here is an example of how to configure some standard options.
##
#
#defaults {
#    polling_interval 10
#    path_selector    "round-robin 0"
#    path_grouping_policy    multibus
#    uid_attribute    ID_SERIAL
#    prio    alua
#    path_checker    readsector0
#    rr_min_io    100
#    max_fds    8192
#    rr_weight    priorities
#    failback    immediate
#    no_path_retry    fail
#    user_friendly_names    yes
#}
##
## The wwid line in the following blacklist section is shown as an example
## of how to blacklist devices by wwid. The 2 devnode lines are the
## compiled in default blacklist. If you want to blacklist entire types
## of devices, such as all scsi devices, you should use a devnode line.
## However, if you want to blacklist specific devices, you should use
## a wwid line. Since there is no guarantee that a specific device will
## not change names on reboot (from /dev/sda to /dev/sdb for example)
## devnode lines are not recommended for blacklisting specific devices.
##
#blacklist {
# wwid 26353900f02796769
#    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
#    devnode "^hd[a-z]"
#}
#multipaths {
#    multipath {
#    wwid    3600508b4000156d700012000000b0000
#    alias    yellow
#    path_grouping_policy    multibus
#    path_selector    "round-robin 0"
#    failback    manual
#    rr_weight    priorities
#    no_path_retry    5
#    }
#    multipath {
#    wwid    1DEC_____321816758474
#    alias    red
#    }
#}
#devices {
#    device {
#    vendor    "COMPAQ "
#    product    "HSV110 (C)COMPAQ"
#    path_grouping_policy    multibus
#    path_checker    readsector0
#    path_selector    "round-robin 0"
#    hardware_handler    "0"
#    failback    15
#    rr_weight    priorities
#    no_path_retry    queue
#    }
#    device {
#    vendor    "COMPAQ "
#    product    "MSA1000 "
#    path_grouping_policy    multibus
#    }
#}

blacklist {
}
View Code

 

 (5.1)配置檔案黑名單(blacklist部分)

如將 find_multipaths 引數設定為 yes,則您只需要將那些您不想使其具有多路徑功能的多路徑裝置列入黑名單,通常不需要將裝置列入黑名單。可以使用三種方法將裝置列入黑名單。


(5.1.1)根據WWID將裝置列入黑名單
要根據WWID配置黑名單,需要在blacklist中新增WWID條目
例子:將WWID為14f504e46494c4552336b535576772d6f5a556b2d5844746e加入黑名單

blacklist {
       wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e
}

 實戰過程:

# 1、新增黑名單之前
[root@testserver ~]# multipath -ll mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:0:1 sdc 8:32 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 3:0:0:1 sdb 8:16 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:0:3 sdg 8:96 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 3:0:0:3 sdf 8:80 active ready running mpathf (14f504e46494c4552336b535576772d6f5a556b2d5844746e) dm-4 OPNFILER,VIRTUAL-DISK size=2.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:0:2 sde 8:64 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 3:0:0:2 sdd 8:48 active ready running

# 2.使用wwid新增黑名單
[root@testserver
~]# vim /etc/multipath.conf blacklist { wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e }
# 3.使新新增的黑名單生效 [root@testserver
~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ] # 4.再次檢視多路徑資訊,mpathf磁碟已經不在了
[root@testserver
~]# multipath -ll mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:1 sdb 8:16 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:1 sdc 8:32 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:3 sdf 8:80 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:3 sdg 8:96 active ready running

 NOTE:如何檢視WWID

[root@testserver ~]# lsscsi -i
[0:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda -
[2:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0 -
[3:0:0:1] disk OPNFILER VIRTUAL-DISK 0 /dev/sdb 14f504e46494c45523838576731322d526231352d73794852
[3:0:0:2] disk OPNFILER VIRTUAL-DISK 0 /dev/sdd 14f504e46494c4552336b535576772d6f5a556b2d5844746e
[3:0:0:3] disk OPNFILER VIRTUAL-DISK 0 /dev/sdf 14f504e46494c45526463737145732d426f516a2d6f4c416d
[4:0:0:1] disk OPNFILER VIRTUAL-DISK 0 /dev/sdc 14f504e46494c45523838576731322d526231352d73794852
[4:0:0:2] disk OPNFILER VIRTUAL-DISK 0 /dev/sde 14f504e46494c4552336b535576772d6f5a556b2d5844746e
[4:0:0:3] disk OPNFILER VIRTUAL-DISK 0 /dev/sdg 14f504e46494c45526463737145732d426f516a2d6f4c416d

 

(5.1.2)根據裝置名稱將裝置列入黑名單
要根據裝置名稱配置黑名單,需要在blacklist中新增devnode條目
例子:將磁碟sdb和sdc加入黑名單

blacklist {
       devnode "sdb,sdc"
}

 實戰過程:

# 1.在上一步wwid的基礎上新增裝置名稱黑名單,把sdb、sdc加入黑名單
[root@testserver ~]# vim /etc/multipath.conf blacklist { wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e } # 在上面的基礎上多新增一個blacklist模組 blacklist { devnode "sdb|sdc" } # 2.使新增的黑名單生效
[root@testserver
~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ] # 3.確認mpathe磁碟,已經識別不到了
[root@testserver
~]# multipath -ll Oct 23 15:24:49 | /etc/multipath.conf line 97, duplicate keyword: blacklist mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:3 sdf 8:80 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:3 sdg 8:96 active ready running

 NOTE:預設情況下,以下 devnode 條目將會被列入預設黑名單中;因為這些條目而被列入黑名單的裝置通常不支援 DM Multipath。如需在這些裝置中啟用 multipath,則需要在配置檔案的 blacklist_exceptions 部分指定這些裝置。

blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^(td|ha)d[a-z]"
}

 

(5.1.3)根據裝置型別將裝置列入黑名單
要根據裝置型別配置黑名單,需要在blacklist中新增device條目
例子:將IBM 3S42儲存和惠普的所有儲存放入黑名單

blacklist {
       device {
               vendor  "IBM"
               product "3S42"       #DS4200 Product 10
       }
       device {
               vendor  "HP"
               product "*"
       }
}

 

(5.2)黑名單之外的裝置(blacklist_exceptions部分)
如果有大量的裝置,但只有一個裝置想要設定為多路徑,這是可以考慮將所有裝置新增到黑名單blacklist中,然後在blacklist_exceptions中單獨新增該裝置。當在配置檔案的 blacklist_exceptions 指定裝置時,您必須以指定黑名單的相同方法來指定例外情況。
例子:把所有裝置加入黑名單,然後將wwid為14f504e46494c4552336b535576772d6f5a556b2d5844746e的裝置新增到黑名單之外

blacklist{
       wwid *
}

blacklist_exceptions {
       wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e
}

 實戰過程:

# 1.將所有裝置新增到黑名單blacklist中,然後在blacklist_exceptions中單獨新增wwid為14f504e46494c4552336b535576772d6f5a556b2d5844746e的裝置
[root@testserver ~]# vim /etc/multipath.conf blacklist{ wwid * } blacklist_exceptions { wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e } # 2.使配置資訊生效
[root@testserver
~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ]
# 3.可以看到,只有該wwid的裝置能夠識別到 [root@testserver
~]# multipath -ll mpathf (14f504e46494c4552336b535576772d6f5a556b2d5844746e) dm-3 OPNFILER,VIRTUAL-DISK size=2.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:2 sdd 8:48 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:2 sde 8:64 active ready running

 

(5.3)配置檔案預設(defaults部分)
defaults部分時DM Multipath的常規屬性配置,通常格式如下:

defaults {
        user_friendly_names     yes
        path_grouping_policy    multibus
}

 defaults部分有較多的引數,主要引數有(這裡主要記錄常用的):

引數 解釋
polling_interval 以秒(s)為單位指定兩次路徑檢查的時間間隔
find_multipaths

設定多路徑裝置的模式。如果這個引數為yes,多路徑將不會嘗試為不在黑名單中的每個路徑都建立裝置,而是滿足一下3個條件之一才建立裝置:

  • 對於相同WWID裝置,在黑名單指定的路徑外還有2個或以上的路徑
  • 使用者通過使用multipath命令指定裝置強制建立該裝置
  • 路徑擁有與之前建立的多路徑裝置相同的WWID。無論何時使用 find_multipaths 元件建立多路徑裝置後,多路徑都會記住該裝置的 WWID 以便在再次看到使用那個 WWID 的路徑時自動建立裝置。這可讓您自動選擇正確的所路徑建立多路徑裝置而無需編輯多路徑黑名單。
預設為no。
path_selector 指定I/O所使用路徑演算法,可能的值包括
  • round-robin 0:在路徑中迴圈使用每個路徑,像每個路徑傳送同樣的I/O,預設;
  • queue-length 0:將下一組I/O請求傳送到I/O佇列最短的路徑;
  • service-time 0:將下一組 I/O 傳送到具有最短預計服務時間的路徑
path_grouping_policy 用於指定分組策略,我的理解為指定多路徑為active/active還是active/standby模式
  • failover:每個優先組群有一個路徑。預設
  • multibus:所有有效路徑在一個優先組中
  • group_by_serial:每個檢測到的系列號有一個優先組群
  • group_by_prio:每個優先組群有一個路徑優先值。優先權根據指定為 global、per-controller 或者 per-multipath 選項的呼叫程式決定
  • group_by_node_name:每個目標節點名有一個優先組
failback

管理路徑群組出錯切換,值有:

  • immediate:立即恢復到包含活躍路徑的最高階別路徑組群
  • manual:不需要立即恢復,只有在操作者干預的情況下發生恢復。預設
  • followover:指定當路徑組的第一個路徑成為活躍路徑時應執行自動恢復。這可讓節點在另一個節點請求故障修復時不會自動恢復。
  • 大於0的數字值指定推遲出錯切換時間,以秒(s)表示。
user_friendly_names
  • 如果設定為yes,則該作業系統會使用檔案/etc/multipath/bindings為該多路徑分配一個持久且唯一的別名,格式為mpath n
  • 如果為no,則該系統使用WWID作為多路徑的別名。預設
  • 在這兩種情況下,你在這裡指定的數值將被你在配置檔案multipaths部分指定的別名覆蓋

NOTE:如果為yes,多路徑別名與wwid的關係:

[root@testserver ~]# cat /etc/multipath/bindings 
... 略 ...
mpathe 14f504e46494c45523838576731322d526231352d73794852
mpathf 14f504e46494c4552336b535576772d6f5a556b2d5844746e
mpathg 14f504e46494c45526463737145732d426f516a2d6f4c416d

 

checker_timeout 路徑檢查器和排序器執行帶顯式超時SCSI命令的超時時間,以秒(s)為單位。預設是/sys/block/sdc/device/timeout的值
force_sync 如果將其設定為yes,則會阻止路徑檢查程式在非同步(async)模式下執行。預設值為no。

NOTE:path_grouping_policy這個引數我的理解是用來做多路徑的路徑訪問方式的,簡單來說就是多條路徑是以active/active這種負載均衡的方式工作,還是以active/standby這種鏈路冗餘的方式工作,我們不妨測試一下具體值的效果:

(1)當 path_grouping_policy=failover時,路徑為active/standby

[root@testserver lib]# multipath -ll
Oct 23 16:49:17 | /etc/multipath.conf line 96, duplicate keyword: defaults
mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-4 OPNFILER,VIRTUAL-DISK 
size=1.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 3:0:0:1 sdb 8:16 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 4:0:0:1 sdc 8:32 active ready running

 (2)當 path_grouping_policy=multibus時,路徑為active/active

[root@testserver lib]# multipath -ll
Oct 23 16:49:47 | /etc/multipath.conf line 96, duplicate keyword: defaults
mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-4 OPNFILER,VIRTUAL-DISK 
size=1.0G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
|- 3:0:0:1 sdb 8:16 active ready running
`- 4:0:0:1 sdc 8:32 active ready running

 

(5.4)多路徑裝置配置屬性(multipaths部分)
在multipath.conf配置檔案multipaths部分可為每個多路徑裝置設定(可以理解為一個多路徑磁碟)的屬性,這些屬性只適用於一個特定的multipath。這部分有較多的引數屬性,其中大部分引數都與上面的defaults部分重合,這裡只介紹2個引數。

引數 解釋
wwid 指定使用multipath屬性的多路徑裝置的符號名稱,這個引數在multipath部分是必須的。
alias

指定使用multipath屬性的多路徑裝置的符號名稱,如果使用了user_friendly_names,這裡不要將別名設定為mpath n,這樣可能會與自動分配的友好使用者名稱衝突,進而給出不正確的裝置節點名稱。

 實戰過程:

將wwid為14f504e46494c45523838576731322d526231352d73794852的儲存名稱從mpathe改為datadisk1,以便於使用者識別,將路徑選擇方式改為failover

# 1.新增multipaths之前的多路徑資訊
[root@testserver device]# multipath -ll Oct 28 14:29:48 | /etc/multipath.conf line 96, duplicate keyword: defaults mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:1 sdb 8:16 active ready running `- 4:0:0:1 sde 8:64 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:3 sdd 8:48 active ready running `- 4:0:0:3 sdg 8:96 active ready running # 2.新增multipaths部分資訊 [root@testserver ~]# vim /etc/multipath.conf multipaths { multipath { wwid 14f504e46494c45523838576731322d526231352d73794852 alias datadisk1 path_grouping_policy failover path_selector "round-robin 0" failback manual rr_weight priorities no_path_retry 5 } } # 3.使配置資訊生效 [root@testserver ~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ] [root@testserver ~]# vim /etc/multipath.conf # 4.檢視修改之後的多路徑資訊 [root@testserver device]# multipath -ll Oct 28 14:42:45 | /etc/multipath.conf line 96, duplicate keyword: defaults datadisk1 (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='1 queue_if_no_path' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 3:0:0:1 sdb 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 4:0:0:1 sde 8:64 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:3 sdd 8:48 active ready running `- 4:0:0:3 sdg 8:96 active ready running # 5.通過fdisl -l也可以看到磁碟名稱已經發生變化 [root@testserver device]# fdisk -l ... Disk /dev/mapper/datadisk1: 1073 MB, 1073741824 bytes, 2097152 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes

 

(5.5)多路徑儲存裝置屬性(devices部分)
在multipath.conf配置檔案devices部分可為每個儲存裝置設定(可以理解為儲存廠商的一款儲存產品)的屬性。多路徑配置中預設包含許多的儲存產品,要檢視已經包含了哪些儲存產品,可以使用以下檢視:

multipathd show config
# 或者
multipath -t

 正常情況下,無需修改這些儲存裝置的預設值,如果想要修改可以在配置檔案的devices部分新增條目來覆蓋修改。對於不在multipath預設裡面的儲存裝置,也可以在devices部分手動新增一個裝置。

這部分有較多的引數屬性,其中大部分引數都與上面的defaults、multipaths部分重合,這裡只介紹幾個引數。

引數 解釋
ventor 儲存裝置廠商名稱,可檢視/sys/block/sdc/device/vendor
product

儲存裝置產品名稱,可檢視/sys/block/sdc/device/model

alias_prefix

這個裝置使用的user_friendly_name字首,而不是預設的mpath。

參考配置:

device {
        vendor            "COMPAQ"
        product            "MSA1000"
        path_grouping_policy    multibus
        path_checker        tur
        rr_weight        priorities
    }

 

(六)裝置對映多路徑軟體管理及故障排除
(6.1)multipathd啟動與關閉

multipathd啟動與關閉命令如下:

[root@testserver mapper]# service multipathd 
Usage: /etc/init.d/multipathd {start|stop|force-stop|status|restart|force-restart|condrestart|reload}

# 啟動
service multipathd start

# 關閉
service multipathd stop

# 重新啟動
service multipathd restart

# 不重啟multipathd使修改的引數生效
service multipathd reload 

 

(6.2)multipath命令

選項  描述
-l  顯示來自 sysfs 和裝置對映器的當前多路徑配置
-ll 顯示來自 sysfs 、裝置對映器以及系統中其他所有可用元件的當前多路徑配置
-f device 刪除命名的多路徑裝置
-F 刪除所有不使用的多路經裝置
-w device 從 wwids 檔案中刪除指定裝置的 wwid。
-W 重新設定 wwids 檔案使其只包含當前 multipath 裝置

 

(6.3)multipathd命令
可以使用multipathd命令管理multipathd守護程式。關於multipathd命令的使用,可以使用命令"man multipathd"檢視手冊,或者使用"multipathd show"命令也會有提示。

[root@testserver mapper]# multipathd show maps format "%n %w %d %s"
name uuid sysfs vend/prod/rev 
datadisk1 14f504e46494c45523838576731322d526231352d73794852 dm-3 OPNFILER,VIRTUAL-DISK 
mpathf 14f504e46494c4552336b535576772d6f5a556b2d5844746e dm-4 OPNFILER,VIRTUAL-DISK 
mpathg 14f504e46494c45526463737145732d426f516a2d6f4c416d dm-5 OPNFILER,VIRTUAL-DISK

 multipath -k命令是multipathd守護程式的互動式介面,使用help命令幫助,使用Ctrl+D命令退出互動

[root@testserver mapper]# multipathd -k
multipathd> help
multipath-tools v0.4.9 (05/33, 2016)
CLI commands reference:
list|show paths
list|show paths format $format
... 略 ...
map|multipath $map unsetprkey
forcequeueing daemon
restorequeueing daemon
multipathd> show maps    #檢視對映關係
name sysfs uuid 
datadisk1 dm-3 14f504e46494c45523838576731322d526231352d73794852
mpathf dm-4 14f504e46494c4552336b535576772d6f5a556b2d5844746e
mpathg dm-5 14f504e46494c45526463737145732d426f516a2d6f4c416d

 

(6.4)使用dmsetup命令檢視裝置對映條目
使用dmsetup找出作業系統記憶體裝置對映條目與多路徑裝置的對映關係。以下命令顯示所有對映裝置及其主副號碼,副號確定dm裝置的名稱,例如datadisk1的副號碼為3,則datadisk1與/dev/dm-3對映。

[root@testserver ~]# dmsetup ls
datadisk1    (253:3)
centos-home    (253:2)
mpathg    (253:5)
mpathf    (253:4)
centos-swap    (253:1)
centos-root    (253:0)

裝置對映關係也可以從這檢視:

[root@testserver block]# cd /dev/mapper/
[root@testserver mapper]# ll
total 0
lrwxrwxrwx. 1 root root 7 Oct 28 15:48 centos-home -> ../dm-2
lrwxrwxrwx. 1 root root 7 Oct 28 15:48 centos-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 Oct 28 15:48 centos-swap -> ../dm-1
crw-------. 1 root root 10, 236 Oct 28 15:48 control
lrwxrwxrwx. 1 root root 7 Oct 28 15:54 datadisk1 -> ../dm-3
lrwxrwxrwx. 1 root root 7 Oct 28 15:54 mpathf -> ../dm-4
lrwxrwxrwx. 1 root root 7 Oct 28 15:54 mpathg -> ../dm-5

 

 

 【完】


相關文章