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が無限に停止する可能性があります。
シナリオをテストするには:
端末コンソールで、rootユーザとしてログインします。
次の入力で、デバイスI/Oに関して、フェールオーバーの代わりに待ち行列処理をアクティブにします。
dmsetup message device_ID 0 queue_if_no_path
device_IDを実際のデバイスのIDに置き換えます。たとえば、次のように入力します。
dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path
次の入力で、デバイス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をすべてのパスがエラーになるシナリオ用に設定するには:
端末コンソールで、rootユーザとしてログインします。
/etc/multipath.confファイルをテキストエディタで開きます。
defaultsセクションとその閉じ括弧を非コメント化した後、次のようにdefault_features設定を追加します。
defaults { default_features "1 queue_if_no_path" }
/etc/multipath.confファイルの変更後、mkinitrdを実行してシステム上にINITRDを作成し、次に、再起動で変更内容を有効にします。
デバイスI/Oのフェールオーバーに戻る準備ができたら、次のように入力します。
dmsetup message mapname 0 fail_if_no_path
mapnameを該当デバイスのマップされたエイリアス名またはデバイスIDに置き換えます。
このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。