7.13 エラーになったI/Oの管理

queue_if_no_pathを有効にすることで、すべてのパスで同時に障害が発生した場合は、I/Oをキューに登録するように、マルチパス処理を設定する必要があるかもしれません。設定しておかないと、すべてのパスに障害が発生するとI/Oもすぐに失敗してしまいます。ドライバ、HBA、またはファブリックにスプリアスエラーが発生したというシナリオでは、それらのエラーですべてのパスが失われるI/Oをすべて待ち行列に入れ、エラーを上方にプロパゲートしないように、DM-MPIOを設定してください。

マルチパスデバイスをクラスタで使用する場合は、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
    

    device_IDを実際のデバイスのIDに置き換えます。たとえば、次のように入力します。

    dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path
    
  3. 次の入力で、デバイスI/Oのフェールオーバーに戻ります。

    dmsetup message device_ID 0 fail_if_no_path
    

    このコマンドにより、ただちに、待ち行列に入ったすべてのI/Oがエラーになります。

    device_IDを実際のデバイスのIDに置き換えます。たとえば、次のように入力します。

    dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path
    

待ち行列内のI/Oをすべてのパスがエラーになるシナリオ用に設定するには:

  1. 端末コンソールで、rootユーザとしてログインします。

  2. /etc/multipath.confファイルをテキストエディタで開きます。

  3. defaultsセクションとその閉じ括弧を非コメント化した後、次のように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
    

    mapnameを該当デバイスのマップされたエイリアス名またはデバイスIDに置き換えます。

    このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。