25.19. リンクロス動作の変更
本セクションでは、ファイバーチャネルまたは iSCSI プロトコルのいずれかを使用するデバイスで、リンクロス動作を変更する方法を説明します。
25.19.1. ファイバーチャネル
ドライバーがトランスポートの
dev_loss_tmo
コールバックを実装している場合、トランスポートの問題が検出されるとリンクを介したデバイスへのアクセス試行がブロックされます。デバイスがブロックされているかどうかを確認するには、次のコマンドを実行します。
$ cat /sys/block/device/device/state
このコマンドは、デバイスが
ブロック
されている場合に blocked を返します。デバイスが正常に動作している場合、このコマンドは の 実行
を返します。
手順25.15 リモートポートの状態の判断
- リモートポートの状態を判断するには、次のコマンドを実行します。
$ cat /sys/class/fc_remote_port/rport-H:B:R/port_state
- このコマンドは、リモートポート(およびそのポートからアクセスされるデバイス)がブロックされると、
Blocked
を返します。リモートポートが正常に動作している場合、コマンドはOnline
を返します。 dev_loss_tmo
秒以内に問題が解決されない場合、rport およびデバイスはブロックされず、そのデバイスで実行しているすべての I/O (およびそのデバイスに送信される新しい I/O)は失敗します。
手順25.16 dev_loss_tmo
の変更
dev_loss_tmo
値を変更するには、目的の値を ファイルに echo します。たとえば、dev_loss_tmo
を 30 秒に設定するには、以下のコマンドを実行します。$ echo 30 > /sys/class/fc_remote_port/rport-H:B:R/dev_loss_tmo
dev_loss_tmo
の詳細は、「ファイバーチャネル API」 を参照してください。
リンクの損失が
dev_loss_tmo
を超えると、scsi_device
デバイスおよび sdN
デバイスが削除されます。通常、ファイバーチャネルクラスはデバイスをそのまま残します。つまり、/dev/sd x
は /dev/sdx
のままになります。これは、ターゲットのバインディングがファイバーチャネルドライバーにより保存されるため、ターゲットポートが戻ると、SCSI アドレスが忠実に再作成されます。ただし、これは保証されません。LUN のストレージ内ボックス設定に追加の変更がない場合に限り、sdx
が復元されます。
25.19.2. dm-multipathでの iSCSI 設定
dm-multipath が実装されている場合は、iSCSI タイマーを設定して、すぐにマルチパスレイヤーにコマンドを取得することが推奨されます。これを設定するには、
/etc/multipath.conf
の device { の下に以下の行をネストします。
features "1 queue_if_no_path"
これにより、dm-multipath レイヤーですべてのパスが失敗した場合に、I/O エラーが再試行され、キューに入れられます。
SAN で問題をより的確に監視するには、iSCSI タイマーの調整が必要になる場合があります。設定可能な iSCSI タイマーは、 NOP-Out 間隔/タイムアウト と replacement_timeout です。これについては、以下のセクションで説明します。
25.19.2.1. NOP-Out 間隔/タイムアウト
SAN の問題を監視するため、iSCSI レイヤーは各ターゲットに NOP-Out 要求を送信します。NOP-Out 要求がタイムアウトすると、iSCSI レイヤーは、実行中のコマンドに失敗し、可能な場合はそれらのコマンドを再キューイングするように SCSI レイヤーに指示することで応答します。
dm-multipath を使用すると、SCSI レイヤーは実行中のコマンドに失敗し、マルチパスレイヤーに延期します。次に、マルチパスレイヤーは、これらのコマンドを別のパスで再試行します。dm-multipath が使用されて いない 場合、これらのコマンドは、すべて失敗する前に 5 回再試行されます。
NOP-Out 要求の間隔は、デフォルトで
5
秒です。これを調整するには、/etc/iscsi/iscsid.conf
を開き、以下の行を編集します。
node.conn[0].timeo.noop_out_interval = [interval value]
設定されると、iSCSI レイヤーは、[interval value] 秒ごとに、各ターゲットに NOP-Out 要求を送信します。
node.conn[0].timeo.noop_out_timeout = [timeout value]
これにより、iSCSI レイヤーは [timeout value] 秒後に NOP-Out 要求をタイムアウトするように設定されます。
SCSI エラーハンドラー
SCSI エラーハンドラーが実行されている場合、パスで NOP-Out 要求がタイムアウトしても、パスでのコマンドの実行がすぐに失敗することはありません。代わりに、これらのコマンドは replacement_timeout 秒 後 に失敗します。replacement_timeout の詳細は、「replacement_timeout」 を参照してください。
SCSI エラーハンドラーが実行されているかどうかを確認するには、次のコマンドを実行します。
# iscsiadm -m session -P 3
25.19.2.2. replacement_timeout
replacement_timeout は、コマンドが失敗する前に、タイムアウトしたパス/セッションが再確立されるまで iSCSI レイヤーが待機する時間を制御します。replacement_timeout のデフォルト値は 120 秒です。
replacement_timeout を調整するには、
/etc/iscsi/iscsid.conf
を開き、以下の行を編集します。
node.session.timeo.replacement_timeout = [replacement_timeout]
/etc/multipath.conf
の 1 queue_if_no_path オプションは、iSCSI タイマーを設定して、マルチパス層に直ちにコマンドを推測します( 「dm-multipathでの iSCSI 設定」を参照)。この設定により、I/O エラーがアプリケーションに伝搬されなくなります。このため、replacement_timeout を 15-20 秒に設定することができます。
下限に replacement_timeout を設定すると、iSCSI レイヤーが失敗したパス/セッションの再確立を試みる間(NOP-Out タイムアウトの場合)、I/O は新しいパスにすばやく送信され、実行されます。すべてのパスがタイムアウトすると、マルチパスおよびデバイスマッパー層は、
/etc/iscsi/iscsid.conf
ではなく、/etc/multipath.conf
の設定に基づいて I/O を内部でキューに入れます。
重要な影響
フェイルオーバーの速度とセキュリティーのどちらが検討されているかにかかわらず、replacement_timeout に推奨される値は他の要因によって異なります。これらの要因には、ネットワーク、ターゲット、およびシステムのワークロードが含まれます。そのため、ミッションクリティカルなシステムに適用する前に、新しい設定を replacements_timeout に完全にテストすることが推奨されます。
iSCSI および DM Multipath のオーバーライド
recovery_tmo
sysfs
オプションは、特定の iSCSI デバイスのタイムアウトを制御します。以下のオプションは、システム全体の recovery_tmo
値を上書きします。
replacement_timeout
設定オプションは、すべての iSCSI デバイスのrecovery_tmo
値をグローバルに上書きします。- DM Multipath が管理するすべての iSCSI デバイスについては、DM Multipath の
fast_io_fail_tmo
オプションがグローバルにrecovery_tmo
値を上書きします。DM Multipath のfast_io_fail_tmo
オプションは、ファイバーチャネルデバイスのfast_io_fail_tmo
オプションを上書きします。DM Multipathfast_io_fail_tmo
オプションはreplacement_timeout
よりも優先されます。Red Hat では、replacement_timeout
を使用して、DM Multipath が管理するデバイスでrecovery_tmo
を上書きすることは推奨していません。これは、multipathd
サービスが再読み込みされると、DM Multipath が常にrecovery_tmo
をリセットするためです。
25.19.3. iSCSI ルート
iSCSI ディスクから直接 root パーティションにアクセスする場合は、iSCSI レイヤーがパス/セッションの再確立を試行する機会が数回あるように、iSCSI タイマーを設定する必要があります。さらに、コマンドを SCSI レイヤーにすばやく再キューイングしないでください。これは、dm-multipath の実装時に行うべき動作とは逆になります。
まず、NOP-Outs を無効にする必要があります。これを行うには、NOP-Out の間隔とタイムアウトの両方をゼロに設定します。これを設定するには、
/etc/iscsi/iscsid.conf
を開き、以下のように編集します。
node.conn[0].timeo.noop_out_interval = 0 node.conn[0].timeo.noop_out_timeout = 0
これに合わせて、replacement_timeout を高い数値に設定する必要があります。これにより、パスやセッションが再確立されるのをシステムが長い間待機するようになります。replacement_timeout を調整するには、
/etc/iscsi/iscsid.conf
を開き、以下の行を編集します。
node.session.timeo.replacement_timeout = replacement_timeout
/etc/iscsi/iscsid.conf
を設定したら、影響を受けるストレージのリ検出を実行する必要があります。これにより、システムが /etc/iscsi/iscsid.conf
の新しい値を読み込み、使用できるようになります。iSCSI デバイスの検出方法に関する詳細は、「iSCSI 相互接続のスキャン」 を参照してください。
特定セッションのタイムアウトの設定
特定のセッションのタイムアウトを設定し、(
/etc/iscsi/iscsid.conf
を使用する代わりに)永続化しないようにすることもできます。これを行うには、次のコマンドを実行します (必要に応じて変数を置き換えます)。
# iscsiadm -m node -T target_name -p target_IP:port -o update -n node.session.timeo.replacement_timeout -v $timeout_value
重要な影響
ここで説明する設定は、root パーティションアクセスを含む iSCSI セッション用として推奨されます。他のタイプのストレージ( dm-multipathを使用するシステム)へのアクセスを含む iSCSI セッションについては、「dm-multipathでの iSCSI 設定」 を参照してください。