7.4 設定系統以進行多重路徑

7.4.1 準備 SAN 設備以進行多重路徑

在為 SAN 設備設定多重路徑 I/O 之前,請視需要執行以下步驟準備 SAN 設備:

  • 使用廠商工具對 SAN 進行設定並分區。

  • 使用廠商工具設定儲存陣列中主機 LUN 的許可權。

  • 安裝 Linux HBA 驅動程式模組。安裝模組時,驅動程式會自動掃描 HBA 以探查任何擁有存取主機的許可權的 SAN 設備。驅動程式會將這些設備提交至主機以供稍後設定之用。

    附註: 請確保您使用的 HBA 驅動程式沒有啟用本機多重路徑。

    如需更多詳細資料,請參閱廠商的特定指示。

  • 載入驅動程式模組後,探查指定給特定陣列 LUN 或分割區的設備節點。

  • 如果 SAN 設備將做為伺服器上的根設備使用,請依節 7.2.6, 根設備為多重路徑設備時的 SAN 逾時設定 中所述修改該設備的逾時設定。

如果 HBA 驅動程式無法探查到 LUN,可使用 lsscsi 來檢查作業系統是否能正常探查到 SCSI 設備。如果 HBA 驅動程式無法探查到 LUN,請檢查 SAN 的分區設定。尤其是要檢查 LUN 遮罩是否處於使用中,且 LUN 是否正確地指定給伺服器。

如果 HBA 驅動程式可以探查到 LUN,但不存在相應的區塊設備,則還需要其他核心參數來變更 SCSI 設備的掃描行為,如指出 LUN 沒有連續編號。如需資訊,請參閱 Novell 支援知識庫中的 Options for SCSI Device Scanning (SCSI 設備掃描的選項)

7.4.2 對多重路徑設備進行磁碟分割

不建議對含有多個路徑的設備進行磁碟分割,但這項操作是受支援的。

SUSE Linux Enterprise Server 10

在 SUSE Linux Enterprise Server 10 中,可以使用 kpartx 工具在不重新開機的情況下在多重路徑設備中建立分割區。在嘗試使用 YaST2 中的磁碟分割程式功能或使用協力廠商磁碟分割工具來設定多重路徑之前,也可以對設備進行分割。

SUSE Linux Enterprise Server 9

在 SUSE Linux Enterprise Server 9 中,如果要分割設備,應在嘗試使用 YaST2 中的磁碟分割程式功能或使用協力廠商磁碟分割工具來設定多重路徑之前,先設定其分割區。這是必要動作,因為系統不支援對現有多重路徑設備進行分割。若做此嘗試,對多重路徑設備的磁碟分割操作將會失敗。

如果為設備設定了分割區,則 DM-MPIO 會自動辨識這些分割區,並以在設備的 ID 中附加 p1 至 pn 的方式來標識它們,例如

/dev/disk/by-id/26353900f02796769p1

若要分割多重路徑設備,必須停用 DM-MPIO 服務,分割一般設備節點 (如 /dev/sdc),然後重新開機,讓 DM-MPIO 服務識別新的分割區。

7.4.3 設定伺服器以進行多重路徑

您必須手動設定系統,為多重路徑 IO 設備在 initrd 中所連接的控制器自動載入設備驅動程式。您需要將必要的驅動程式模組新增至檔案 /etc/sysconfig/kernel 中的變數 INITRD_MODULES。

例如,如果系統包含由 cciss 驅動程式存取的 RAID 控制器,且多重路徑設備連接至由 qla2xxx 驅動程式存取的 QLogic* 控制器,則此項目應為:

   INITRD_MODULES="cciss"

由於 QLogic 驅動程式並不會在系統啟動時自動載入,因此請新增在這裡:

   INITRD_MODULES="cciss qla23xx"

變更 /etc/sysconfig/kernel 後,必須使用 mkinitrd 指令在系統中重新建立 initrd,然後重新開機以使變更生效。

若您將 LILO 當作開機管理員使用,請使用 /sbin/lilo 指令將其重新安裝。若您使用 GRUB,則無須進一步動作。

7.4.4 新增 multipathd 至開機順序

使用本節所述的方法將多重路徑 I/O 服務 (multipathd) 新增至開機順序。

使用 YaST 新增 multipathd

  1. 在 YaST® 中,按一下系統 > 系統服務 (執行層級) > 簡單模式

  2. 選取multipathd,然後按一下啟用

  3. 按一下確定確認服務啟動訊息。

  4. 按一下完成,然後按一下

    這些變更只有在伺服器重新啟動後才會生效。

使用指令行新增 multipathd

  1. 開啟終端機主控台,以 root 使用者或同等身分登入。

  2. 在終端機主控台提示符下,輸入

    insserv multipathd
    

7.4.5 建立並設定 /etc/multipath.conf 檔案

在您建立 /etc/multipath.conf 檔案之前,該檔案並不存在。/usr/share/doc/packages/multipath-tools/multipath.conf.synthetic 檔案包含 /etc/multipath.conf 範例檔案,您可將其當成多重路徑的設定指南。請參閱 /usr/share/doc/packages/multipath-tools/multipath.conf.annotated,瞭解包含每個屬性及其選項之詳細備註的範本。

建立 multipath.conf 檔案

如果 /etc/multipath.conf 檔案不存在,請複製範例以建立此檔案:

  1. 在終端機主控台中,以 root 使用者身分登入。

  2. 輸入以下指令 (所有指令必須在一行中) 複製範例:

    cp /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic /etc/multipath.conf
    
  3. /usr/share/doc/packages/multipath-tools/multipath.conf.annotated 檔案作為參考,以決定如何為系統設定多重路徑。

  4. 請確保您的 SAN 有相應的 device 項目。大多數廠商會提供有關正確設定 device 區段的文件。

    /etc/multipath.conf 檔案中,不同的 SAN 需要不同的 device 區段。如果您使用的是自動偵測到的儲存子系統 (請參閱經測試支援多重路徑的儲存陣列),則可以使用該設備的預設項目;而不需要對 /etc/multipath.conf 檔案的組態做進一步的設定。

  5. 儲存檔案。

驗證 etc/multipath.conf 檔案中的設定

設定組態後,可以輸入以下指令執行試執行 (dry run)

multipath -v3 -d

此指令會掃描設備,然後顯示設定的內容。輸出類似下方所列:

26353900f02796769
[size=127 GB]
[features="0"]
[hwhandler="1    emc"] 
\_ round-robin 0 [first]
  \_ 1:0:1:2 sdav 66:240  [ready ]
  \_ 0:0:1:2 sdr  65:16   [ready ]
\_ round-robin 0 
  \_ 1:0:0:2 sdag 66:0    [ready ]
  \_ 0:0:0:2 sdc   8:32   [ready ] 

路徑會分為不同的優先程度群組。每次只有一個優先程度群組處於主動狀態。若要塑造主動/主動組態,所有路徑都必須分在相同的群組。若要塑造主動/被動組態,不應平行作用的路徑則會放置於不同的優先程度群組。這通常會在設備探查時自動進行。

輸出會顯示順序、群組中用來平衡 I/O 的排程規則,以及各優先程度群組的路徑。對於每個路徑,會顯示其實體位址 (host:bus:target:lun)、裝置節點名稱、主要和次要的設備編號和狀態。

在 /etc/multipath.conf 中設定易記名稱或別名

多重路徑設備可透過其 WWID (全球識別碼) 或為其指定的別名來識別。WWID 是多重路徑設備的識別碼,保證其全球唯一,永不變更。多重路徑中使用的預設名稱是邏輯單位的 ID,就是 /dev/disk/by-id 目錄中存放的 ID。由於以 /dev/sdn/dev/dm-n 形式表示的設備節點名稱會在系統重新開機時變更,因此最好使用其 ID 來表示多重路徑設備。

/dev/mapper 目錄中的多重路徑設備名稱會參考 LUN 的 ID,且始終保持一致,因為它們使用 /var/lib/multipath/bindings 檔案來追蹤其中的關聯。這些設備名稱是使用者易記名稱,例如 /dev/disk/by-id/dm-uuid-.*-mpath-.*

您可以在 /etc/multipath.conf 檔案中使用 ALIAS 指令,指定自己的設備名稱。別名會置換 ID 以及 /dev/disk/by-id/dm-uuid-.*-mpath-.* 名稱。

重要: 建議您不要對根設備使用別名,因為當該設備名稱變更後您將無法再透過核心指令行無縫關閉多重路徑。

如需 multipath.conf 設定的範例,請參閱 /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic 檔案。

  1. 在終端機主控台中,以 root 使用者身分登入。

  2. 在文字編輯器中開啟 /etc/multipath.conf 檔案。

  3. 取消 Defaults 指令及其結束括號的註解。

  4. 取消 user_friendly_names option 的註解,然後將「否」值變更為「是」。

    例如:

    ## Use user friendly names, instead of using WWIDs as names.
    defaults {
      user_friendly_names yes
    }
    
  5. 使用 multipath 區段中的 alias 指令,選擇性為設備指定自己的易記名稱。

    例如:

    multipath {
      wwid 26353900f02796769
      alias sdd4l0
    }
    
  6. 儲存變更,然後關閉檔案。

在 /etc/multipath.conf 中將非多重路徑設備列入黑名單

/etc/multipath.conf 檔案應該包含 blacklist 區段,其中列出了所有非多重路徑設備。例如,本地 IDE 硬碟與軟碟機通常為非多重路徑設備。如果 multipath 會嘗試管理您的單一路徑設備,而您希望 multipath 忽略這些設備,只需將它們加入 blacklist 區段便可解決問題。

附註: 關鍵字 devnode_blacklist 已廢棄,被關鍵字黑名單取代。

例如,若要將本地設備與 cciss 驅動程式中的所有陣列列入黑名單,以免受到多重路徑的管理,則 blacklist 區段應為:

blacklist {
      wwid 26353900f02796769
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"
      devnode "^hd[a-z][0-9]*"
      devnode "^cciss!c[0-9]d[0-9].*"
}

您也可以只將驅動程式中的分割區 (而不是整個陣列) 列入黑名單。例如,使用下列正規表示式可以只將 cciss 驅動程式中的分割區 (而不是整個陣列) 列入黑名單:

^cciss!c[0-9]d[0-9]*[p[0-9]*]

修改 /etc/multipath.conf 檔案後,必須執行 mkinitrd 在系統中重新建立 initrd,然後重新開機以使變更生效。

此後,當您發出 multipath -ll 指令時,本地設備將不再列於多重路徑映射中。

在 /etc/multipath.conf 中設定預設多重路徑行為

/etc/multipath.conf 檔案應包含 defaults 區段,您可在其中指定預設行為。如果 device 區段中沒有指定此欄位,系統會為該 SAN 組態套用預設設定。

下面的 defaults 區段指定了一個簡單的容錯移轉規則:

defaults {
       multipath_tool  "/sbin/multipath -v0"
       udev_dir        /dev
       polling_interval 10
       default_selector        "round-robin 0"
       default_path_grouping_policy    failover
       default_getuid  "/sbin/scsi_id -g -u -s /block/%n"
       default_prio_callout    "/bin/true"
       default_features        "0"
       rr_min_io               100
       failback                immediate

附註:default_getuid 指令行中,使用上例所述的路徑 /sbin/scsi_id 代替 /lib/udev/scsi_id 的範例路徑 (位於範例檔案 /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic 以及預設和註記範例檔案中)。在 SLES 11 SP1 及更高版本中,範例檔案應包含 /sbin/scsi_id 的正確路徑。

在 /etc/multipath.conf 中為 zSeries 設定預設設定值

對支援多重路徑的 IBM zSeries 設備進行的測試表明,應將 dev_loss_tmo 參數設定為 90 秒,將 fast_io_fail_tmo 參數設定為 5 秒。若您使用的是 zSeries 設備,請依照以下方式修改 /etc/multipath.conf 檔案以指定這些值:

defaults {
       dev_loss_tmo 90
       fast_io_fail_tmo 5
}

dev_loss_tmo 參數設定將某個多重路徑連結標示為失敗之前需等待的秒數。若該路徑失敗,則目前在該路徑上的所有 I/O 都會失敗。預設值會因所用的設備驅動程式而有所不同。值的有效範圍為 0 至 600 秒。若要使用驅動程式的內部逾時,請將該值設定為零 (0) 或任何大於 600 的值。

fast_io_fail_tmo 參數設定偵測到連結問題後將 I/O 確定為失敗之前需等待的時間。到達該驅動程式的 I/O 都會失敗。如果 I/O 排在擁堵的佇列中,則未到 dev_loss_tmo 時間且佇列未疏通之前 I/O 不會失敗。

套用 /etc/multipath.conf 檔案變更

multipathd 正在執行時,對 /etc/multipath.conf 檔案所做的變更無法生效。在進行變更後,儲存並關閉檔案,然後執行以下操作以套用變更:

  1. 停止 multipathd 服務。

  2. 輸入以下指令清除舊的多重路徑繫結

    /sbin/multipath -F
    
  3. 輸入以下指令建立新的多重路徑繫結

    /sbin/multipath -v2 -l
    
  4. 啟動 multipathd 服務。

  5. 執行 mkinitrd 在系統中重新建立 initrd,然後重新開機以使變更生效。