7.13 在出錯狀況下管理 I/O

如果所有路徑同時失敗,您可能需要啟用 queue_if_no_path 設定多重路徑,以將 I/O 排入佇列。如果不啟用,I/O 便會在所有路徑都失敗時立即失敗。在驅動程式、HBA 或光纖出現假性錯誤,且這類錯誤會導致所有路徑遺失的特定情況下,應將 DM-MPIO 設定為將所有 I/O 排入佇列,且永不向上傳播錯誤。

在叢集中使用多重路徑設備時,您可以選擇停用 queue_if_no_path。如此,系統就不會將 I/O 排入佇列,而是自動使路徑失敗,並會將 I/O 錯誤升級,產生叢集資源容錯移轉。

啟用 queue_if_no_path 會導致 I/O 在有路徑重新啟用之前無限期地排入佇列,因此請確定 multipathd 正在執行,且對您的情況有效。否則,在重新開機或手動返回到容錯移轉以取代佇列之前,I/O 可能會無限期地擱置於受影響的多重路徑設備中。

若要測試案例,請執行下列步驟:

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

  2. 輸入以下指令啟動設備 I/O 的佇列功能而非容錯移轉:

    dmsetup message device_ID 0 queue_if_no_path
    

    用設備的 ID 取代 device_ID。例如,輸入︰

    dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path
    
  3. 輸入以下指令返回到設備 I/O 的容錯移轉:

    dmsetup message device_ID 0 fail_if_no_path
    

    此指令會立即使所有排入佇列的 I/O 失敗。

    用設備的 ID 取代 device_ID。例如,輸入︰

    dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path
    

若要對所有路徑都失敗的情況設定佇列 I/O,請執行下列步驟:

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

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

  3. 取消預設區段及其結束括號的註解,然後新增 default_features 設定,如下所示:

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

  5. 當您準備好返回到設備 I/O 的容錯移轉時,請輸入:

    dmsetup message mapname 0 fail_if_no_path
    

    用設備對應的別名或設備 ID 取代 mapname

    此指令會立即使所有排入佇列的 I/O 失敗,並將錯誤傳播到呼叫應用程式。