目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / ストレージ管理ガイド / ネットワークストレージ / デバイスのマルチパスI/Oの管理
適用項目 SUSE Linux Enterprise Server 15 SP4

18 デバイスのマルチパスI/Oの管理

本項では、マルチパスI/O (MPIO)を使用して、サーバ/ブロックストレージデバイス間のマルチパスのフェールオーバーおよびパスの負荷分散を管理する方法について説明します。

18.1 マルチパスI/Oの理解

マルチパス処理とは、サーバのホストバスアダプタおよびデバイスのストレージコントローラ間で、複数の物理パスをまたいで、同じ物理または論理ブロックストレージデバイスと通信するサーバの機能です。これは、通常、FC (Fibre Channel)環境またはiSCSI SAN環境で行われます。

Linuxマルチ処理は、接続に耐障害性を与え、アクティブな接続全体.に負荷を分散します。マルチパス処理が設定および実行されていると、自動的に、デバイス接続の障害が特定され、I/Oが代替の接続に再経路指定されます。

マルチパス処理は、接続の障害に対して耐障害性を提供しますが、ストレージデバイス自体の障害に対する耐障害性は提供しません。後者は、ミラーリングのような補完テクニックによって提供されます。

18.1.1 マルチパスの用語

ストレージアレイ

SANストレージまたはNASストレージをクライアントに提供する多数のディスクおよび複数のファブリック接続(コントローラ)を備えたハードウェアデバイス。通常、ストレージアレイはRAIDおよびフェールオーバー機能を備えていて、マルチパス処理をサポートしています。これまでは、アクティブ/パッシブ(フェールオーバー)ストレージアレイおよびアクティブ/アクティブ(ロードバランシング)ストレージアレイは区別されていました。このような概念は依然として存在していますが、最新ハードウェアによってサポートされるパスグループおよびアクセス状態の特殊な概念に過ぎません。

ホスト、ホストシステム

ストレージアレイのクライアントシステムとして動作するSUSE Linux Enterprise Serverを実行しているコンピュータ。

マルチパスマップ、マルチパスデバイス

一連のパスデバイスです。これは、ストレージアレイのストレージボリュームを表し、ホストシステムからは単一のブロックデバイスとして見なされます。

パスデバイス、低レベルデバイス

マルチパスマップのメンバー(通常はSCSIデバイス)です。ホストコンピュータと実際のストレージボリューム(iSCSIセッションの論理ユニットなど)との間における一意の接続を各パスデバイスが表します。Linuxデバイスマッパーマルチパスでは、ホストシステムから認識可能かつアクセス可能な状態がパスデバイスで維持されます。

WWID、UID、UUID

「World Wide Identifier」、「Unique Identifier」、「Universally Unique Identifier」です。WWIDは、ストレージボリュームのプロパティであるため、マルチパスマップのすべてのパスデバイスで同じです。multipath-toolsではWWIDを使用して、マルチパスマップにアセンブルする必要がある低レベルデバイスを判断します。マルチパスではudevを使用してパスデバイスのWWIDを判断します。マルチパスマップのWWIDは変更されません。マルチパスデバイスには/dev/disk/by-id/dm-uuid-mpath-WWIDを使用して安定してアクセスできます。

WWIDは設定可能なマップ名と区別する必要があります(18.9項 「ユーザフレンドリ名または別名の設定」を参照)。

uevent、udevイベント

カーネルによってユーザスペースに送信されてudevサブシステムによって処理されるイベント。デバイスの追加や削除、またはプロパティの変更を行うと、ueventが生成されます。

デバイスマッパー

仮想ブロックデバイスを作成するためのLinuxカーネルのフレームワークです。マップデバイスに対するI/O操作は基礎となるブロックデバイスにリダイレクトされます。デバイスマッピングはスタックされる場合があります。デバイスマッパーでは独自のイベントシグナル処理を実装します。これは「デバイスマッパーイベント」または「dmイベント」とも呼ばれます。

18.2 ハードウェアサポート

SUSE Linux Enterprise Serverがサポートしているすべてのアーキテクチャで、マルチパス処理のドライバおよびツールが使用できます。プロトコルを区別しない汎用ドライバは、市販のほとんどのマルチパス対応ストレージハードウェアで動作します。一部のストレージアレイベンダは、独自のマルチパス処理管理ツールを提供しています。ベンダのハードウェアマニュアルを参照して、どのような設定が必要か判別してください。

18.2.1 マルチパス実装: デバイスマッパーとNVMe

Linuxにおけるマルチパス処理で従来の一般的な実装では、デバイスマッパーフレームワークを使用します。SCSIデバイスなどのほとんどのデバイスタイプでは、デバイスマッパーのマルチパス処理が唯一使用可能な実装です。デバイスマッパーのマルチパス処理は高度に設定可能であり、柔軟です。

Linux NVM Express (NVMe)カーネルサブシステムでは、カーネルでマルチパス処理をネイティブに実装します。通常高速で遅延が非常に小さいNVMeデバイスの演算オーバーヘッドが、この実装で軽減されています。ネイティブNVMeマルチパス処理ではユーザスペースコンポーネントは不要です。SLE 15以降、ネイティブマルチパス処理がNVMeマルチパスデバイスのデフォルトになっています。

この章の残りの部分ではデバイスマッパーのマルチパスについて説明します。

18.2.2 マルチパス処理のストレージアレイ自動検出

デバイスマッパーのマルチパスは一般的な技術です。マルチパスデバイスの検出で必要なことは、低レベルデバイス(SCSIなど)がカーネルによって検出されることと、デバイスのプロパティが複数の低レベルデバイスを(実際に異なるデバイスではなく)同じボリュームへの異なる「パス」として安定的に特定することのみです。

multipath-toolsパッケージはベンダおよび製品名でストレージアレイを検出します。これには、広範なストレージ製品に対して検証済みのデフォルト設定が組み込まれています。ご使用のストレージアレイのハードウェアドキュメントを参照してください。Linuxのマルチパス処理設定に対して独自の推奨事項を提示しているベンダもあります。ご使用のシステムで検出されたストレージの組み込み設定を確認するには、コマンドmultipath -Tを実行します。18.4.5項 「multipathコマンド」を参照してください。

ご使用のストレージアレイ用に組み込み設定を変更する必要がある場合、/etc/multipath.confファイルを作成して設定します。18.6項 「マルチパス設定」を参照してください。

注記
注記

multipath-toolsには、多くのストレージアレイ用の事前設定が組み込まれています。あるストレージ製品用にこのような事前設定が存在することは、そのストレージ製品のベンダがdm-multipathで製品をテストしたことを意味しませんし、ベンダがその製品でdm-multipathの使用に関して保証やサポートを行うことも意味しません。サポート関連の質問については、ベンダのドキュメントを必ず参照してください。

18.2.3 特定のハードウェアハンドラを必要とするストレージアレイ

あるパスから別のパスにフェールオーバーするための特殊なコマンドや標準と異なるエラー処理方法が必要なストレージアレイもあります。これらの特殊なコマンドや処理方法は、Linuxカーネルのハードウェアハンドラによって実装されています。最新のSCSIストレージアレイは、SCSI標準で定義されている「Asymmetric Logical Unit Access」(ALUA)ハードウェアハンドラをサポートしています。ALUAに加えて、SLEカーネルにはNetapp E-Series (RDAC)、Dell/EMC CLARiiON CXアレイファミリ、およびHPのレガシアレイのハードウェアハンドラが含まれています。Linuxカーネル4.4以降では、ほとんどのアレイ(ALUAをサポートするすべてのアレイを含む)のハードウェアハンドラをLinuxカーネルで自動検出します。

18.3 マルチパス処理のプラニング

マルチパスI/Oソリューションのプラニング時には、本項のガイドラインに従ってください。

18.3.1 前提条件

  • マルチパス処理対象のデバイスに使用するストレージアレイで、マルチパス処理がサポートされている必要があります。詳細については、18.2項 「ハードウェアサポート」を参照してください。

  • サーバのホストバスアダプタおよびブロックストレージデバイスのバスコントローラ間に複数の物理パスが存在している場合のみ、マルチパス処理を設定する必要があります。

  • 一部のストレージアレイについては、アレイの物理および論理デバイスのマルチパス処理を管理するための独自のマルチパス処理ソフトウェアがベンダから提供されます。この場合は、ベンダの指示に従って、それらのデバイスのマルチ処理を設定してください。

  • 仮想化環境でマルチパス処理を使用する場合、マルチパス処理は、ホストサーバ環境で制御されます。デバイスのマルチパス処理を設定してから、デバイスを仮想ゲストマシンに割り当ててください。

18.3.2 マルチパスのインストールタイプとinitramfs

18.3.2.1 マルチパスのルートファイルシステム(SANブート)

ルートファイルシステムはマルチパスデバイス上にあります(通常、他のすべてのファイルシステムもマルチパスストレージ上にあります)。これは通常、ディスクのないサーバでSANストレージまたはNASストレージのみを使用する場合です。このようなシステムでは、起動時にマルチパスのサポートが必須で、マルチパス処理をinitramfs (initrd)で有効にする必要があります。18.3.2.3項 「初期RAMディスクの同期状態を維持する」を参照してください。

18.3.2.2 ローカルディスクのルートファイルシステム

ルートファイルシステム(および場合によってはその他のファイルシステム)はローカルストレージ(直接アタッチされているSATAディスク、ローカルRAIDなど)にありますが、このシステムはマルチパスのSANストレージまたはNASストレージのファイルシステムを追加で使用します。このシステムタイプは次の3つの方法で設定できます。

root-on-multipathセットアップの使用

すべてのブロックデバイスはローカルディスクを含むマルチパスマップの一部です。このようなセットアップでは、1つのパスのみを含むディグレードマルチパスマップとして現れます。YaSTによる初期システムインストール中にマルチパス処理が有効になると、この設定が作成されます。これは最も単純な設定ですが、パフォーマンスのオーバーヘッドがあります。

multipath-toolsでローカルディスクを無視する

この設定では、マルチパス処理はinitramfsで有効になります。ブラックリスト化によるインストール後や、find_multipaths設定パラメータで、この設定を実行できます。

initramfsでマルチパス処理を無効にする

YaSTがマルチパスデバイスを検出しなかったことやユーザがインストール中にマルチパスを有効にしなかったことのいずれかが原因で、YaSTによる初期システムインストール中にマルチパス処理が有効にされなかった場合、このセットアップが作成されます。これは18.3.2.3項 「初期RAMディスクの同期状態を維持する」が適用されない唯一の状況です。

18.3.2.3 初期RAMディスクの同期状態を維持する

重要
重要

すべてのブロックデバイスでマルチパス処理の使用に関して一貫性のある動作が初期RAMディスクおよびブートシステムで確保されることを確認してください。マルチパス設定の変更を適用した後にinitramfsを再構築します。

システムでマルチパス処理が有効になっている場合はinitramfsでも有効にする必要があり、その逆も同様です。このルールの唯一の例外は18.3.2.2項 「ローカルディスクのルートファイルシステム」のオプションinitramfsでマルチパス処理を無効にするです。

このマルチパス設定はブートシステムとinitrdの間で同期させる必要があります。したがって、/etc/multipath.conf/etc/multipath/wwids/etc/multipath/bindingsなどの設定ファイルが変更されたり、デバイス識別に関するudevルールが変更されると、次のコマンドを使用して初期のRAM FSを再構築する必要があります。

> sudo dracut -f

initrdとシステムが同期されていない場合、システムは正しくブートせず、起動手順を実行すると緊急シェルが起動する場合があります。このようなシナリオを回避または修復する方法については、18.15.2項 「マルチパスが有効な場合、ブート時にシステムが終了して緊急シェルが起動する」を参照してください。

初期のRAMディスクが非標準的な状況で再構築される場合(カーネルパラメータのmultipath=offを使用してブートした後やレスキューシステムからなど)、特別な注意が必要です。dracutでは、initrdが構築されるときにルートファイルシステムがマルチパスデバイス上にあることを検出した場合のみ初期RAMディスクにマルチパス処理のサポートを自動的に組み込みます。このような場合、マルチパス処理を明示的に有効または無効にする必要があります。

initrdでマルチパスのサポートを有効にするには、次のコマンドを実行します。

> sudo dracut --force --add multipath

initrdでマルチパスのサポートを無効にするには、次のコマンドを実行します。

> sudo dracut --force --omit multipath

18.3.3 ディスク管理タスク

サードパーティのSANアレイ管理ツールまたはご使用のストレージアレイのユーザインタフェースを使用して、論理デバイスを作成し、それらをホストに割り当てます。両側でホストの資格情報を正しく設定してください。

実行中のホストでボリュームの追加や削除ができますが、変更を検出するには、SCSIターゲットを再スキャンし、ホストでマルチパス処理を再設定する必要がある場合があります。

18.3.4 ソフトウェアRAIDと複雑なストレージスタック

マルチパス処理は、SCSIデバイスなどの基本的なストレージデバイスの上にセットアップされます。マルチレイヤのストレージスタックでは、マルチパス処理は常に最下位レイヤです。ソフトウェアRAID、論理ボリューム管理、ブロックデバイスの暗号化などのその他のレイヤは、マルチパス処理の上に重ねられます。したがって、複数のI/Oパスを持ち、ソフトウェアRAIDで使用予定の各デバイスは、まず、マルチパス処理用に設定してから、ソフトウェアRAIDデバイスとして作成する必要があります。

既存のソフトウェアRAID用のマルチパス処理の設定については、18.12項 「既存ソフトウェアRAID用マルチパスI/Oの設定」を参照してください。

18.3.5 高可用性ソリューション

ストレージリソースのクラスタリング用の高可用性ソリューションは、各ノード上でマルチパス処理サービスをベースとして実行されます。各ノード上の/etc/multipath.confファイル内の構成設定が、クラスタ全体で同一であるようにしてください。

マルチパスデバイスがすべてのデバイス間で同じ名前であるようにしてください。詳細については、18.9.1項 「HAクラスタにおけるマルチパスデバイスの名前」を参照してください。

LAN上のデバイスをミラーリングするDRBD (Distributed Replicated Block Device)高可用性ソリューションは、マルチパス処理をベースとして実行されます。複数のI/Oパスを持ち、DRDBソリューションで使用予定のデバイスごとに、マルチパス処理用デバイスを設定してから、DRBDを設定する必要があります。

pacemakersbdなどフェンシングに共有ストレージを使用するクラスタリングソフトウェアと共にマルチパス処理を使用する場合、特別な注意が必要です。詳細については18.7項 「ポーリング、待ち行列、およびフェールバック用のポリシーの設定」を参照してください。

18.4 マルチパス管理ツール

SUSE Linux Enterprise Serverのマルチパス処理のサポートは、Linuxカーネルのデバイスマッパーマルチパスモジュールとmultipath-toolsユーザスペースパッケージに基づいています。MDADM (Multiple Devices Administration)ユーティリティ(multipath)を使用すると、マルチパスデバイスの状態を表示できます。

18.4.1 デバイスマッパーマルチパスモジュール

デバイスマッパーマルチパス(DM-MP)モジュールは、Linuxに一般的なマルチパス処理機能を提供します。DM-MPIOは、SCSIデバイスおよびDASDデバイスに対してSUSE Linux Enterprise Serverでマルチパス処理を行う際に推奨されるソリューションであり、NVMeデバイスにも使用できます。

注記
注記: NVMeデバイスに対してDM-MPを使用する

SUSE Linux Enterprise Server 15以降、ネイティブNVMeマルチパス処理(18.2.1項 「マルチパス実装: デバイスマッパーとNVMe」を参照)がNVMeに対して推奨されており、デフォルトで使用されます。ネイティブのNVMeマルチパス処理を無効にして、デバイスマッパーマルチパスで代用するには、カーネルパラメータのnvme-core.multipath=0を指定してブートします。

DM-MPIOは、多様なセットアップでマルチパス処理サブシステムを自動設定します。

マルチパスデーモンのmultipathdにより、自動的なパス検出とグループ化のほか、自動的なパス再テストが実行されるので、障害が発生したパスは、正常に戻ると自動的に復帰します。これにより、管理者の手間を最低限に抑えることができます。

DM-MPIOは、デバイス自体の障害ではなく、デバイスへのパスの障害からシステムを保護します。アクティブなパスの1つが失われると(たとえば、ネットワークアダプタが破損する、光ファイバケーブルが外れるなど)、残りのパスにI/Oをリダイレクトします。すべての有効なパスで障害が発生すると、無効なセカンダリパスを有効にする必要があるため、ストレージアレイのプロパティに応じて最長30秒の遅延の後にフェールオーバーが行われます。

指定デバイスへのすべてのパスで障害が発生すると、カーネルではこのデバイスとのI/Oを指定時間または無期限でキューに格納できます(無期限の場合、キューに格納するIOの総数はシステムメモリで制限されます)。

ディスクアレイに複数のストレージプロセッサがある場合は、アクセスしたいLUNを所有するストレージプロセッサにSANスイッチが接続していることを必ず確認してください。ほとんどのディスクアレイでは、すべてのLUNが両方のストレージプロセッサに属しているので、両方の接続がアクティブです。

注記
注記: ストレージプロセッサ

一部のディスクアレイでは、ストレージアレイがストレージプロセッサを介してトラフィックを管理するので、一度に1つのストレージプロセッサだけが提示されます。1つのプロセッサがアクティブとなり、もう1つのプロセッサは障害が発生するまでパッシブとなります。間違ったストレージプロセッサ(パッシブなパスをもつプロセッサ)に接続している場合は、予期されたLUNが表示されなかったり、それらのLUNが表示されてもアクセスしようとするとエラーが発生することがあります。

18.4.2 マルチパスI/O管理ツール

パッケージmultipath-toolsおよびkpartxでは、自動パス検出とグループ化を扱うツールが提供されています。

multipathd

マルチパスマップをセットアップして監視するデーモン、およびデーモンプロセスと通信するコマンドラインクライアント。18.4.4項 「multipathdデーモンおよびmultipathコマンド」を参照してください。

multipath

マルチパスオペレーション用のコマンドラインツール。18.4.5項 「multipathコマンド」を参照してください。

kpartx

マルチパスデバイスの「パーティション」を管理するためのコマンドラインツール。18.5.3項 「マルチパスデバイスのパーティション」を参照してください。

mpathpersist

SCSIの永続的な予約を管理するためのコマンドラインツール。18.4.6項 「mpathpersistユーティリティ」を参照してください。

18.4.3 マルチパスデバイスのMD RAID

マルチパス処理の上部でMD RAIDアレイは、システムのudevルールによって自動的にセットアップされます。/etc/mdadm.confの特別な設定は不要です。

18.4.4 multipathdデーモンおよびmultipathコマンド

multipathdは、最新Linuxデバイスマッパーのマルチパスにおけるセットアップの最重要部分です。これは通常、systemdサービスmultipathd.serviceを通じて開始されます。multipathd.socketを介したソケットのアクティブ化はサポートされていますが、マルチパスハードウェアを備えたシステムでmultipathd.serviceを有効にすることを強くお勧めします。

multipathdは次のタスクを実行します(設定によって異なるものもあります)。

  • 起動時、パスデバイスを検出し、検出したデバイスからマルチパスマップをセットアップします。

  • ueventおよびデバイスマッパーイベントを監視し、必要に応じてマルチパスマップでパスマッピングの追加や削除を行い、フェールオーバー操作またはフェールバック操作を開始します。

  • 新しいパスデバイスが検出されるとすぐに新しいマップをセットアップします。

  • 一定の間隔でパスデバイスをチェックして障害を検出し、障害が発生したパスをテストして正常に戻った場合には復帰させます。

  • すべてのパスで障害が発生した場合、multipathdはそのマップを無効にするか、またはマップデバイスを指定時間でキュー待ちモードに切り替えます。

  • パス状態の変更を処理し、必要に応じてパスグループの切り替えまたはパスの再グループ化を行います。

  • パスをテストし、「ぎりぎりの」状態(つまり、パスの状態が正常と異常の間で切り替わる不安定な状態)かどうかを確認します。

  • 設定されている場合、パスデバイスでSCSIの永続的な予約キーを処理します。18.4.6項 「mpathpersistユーティリティ」を参照してください。

multipathdでは、コマンドラインのクライアントとしても動作し、インタラクティブコマンドを実行デーモンに送信することでコマンドを処理します。デーモンにコマンドを送信する一般的な構文は次のとおりです。

multipathd COMMAND

あるいは、

multipathd -k"COMMAND"

デーモンでインタラクティブモードにするには、次のコマンドを実行します。

multipathd -k
注記
注記: multipathとmultipathdを同時動作させる方法

multipathdのコマンドにはmultipathのコマンドと同等のものが多数あります。たとえば、multipathd show topologyの動作はmultipath -llの動作と同じです。重要な差異は、multipathdのコマンドでは実行中のmultipathdデーモンの内部状態を問い合わせるのに対して、multipathではカーネルおよびI/O操作から情報を直接取得することです。

マルチパスデーモンが実行中の場合、multipathdのコマンドを使用してシステムを変更することをお勧めします。このようにしないと、デーモンが設定変更に気付き、変更に反応する場合があります。場合によっては、適用された変更をデーモンで元に戻そうとします。したがって、multipathは、実行中のデーモンが検出されると、マップの破棄やフラッシュなど危険性のあるコマンドをmultipathdに自動的に委任します。

下記のリストでは、使用頻度が高いmultipathdコマンドについて説明します。

show topology

現在のマップトポロジおよびプロパティを表示します。

show paths

現在既知のパスデバイスを表示します。

show paths format "FORMAT STRING"

フォーマット文字列を使用して現在既知のパスデバイスを表示します。サポートされているフォーマット指定子のリストを表示するには、show wildcardsを使用します。

show maps

現在設定されているマップデバイスを表示します。

show maps format FORMAT STRING

フォーマット文字列を使用して、現在設定されているマップデバイスを表示します。サポートされているフォーマット指定子のリストを表示するには、show wildcardsを使用します。

show config local

multipathdが使用している現在の設定を表示します。

reconfigure

設定ファイルを再度読み込み、デバイスを再スキャンし、マップを再度セットアップします。これはmultipathdの再起動と基本的に同じです。いくつかのオプションは再起動しないと変更できません。これらについてはマニュアルページのmultipath.conf(5)で説明します。reconfigureコマンドを実行すると、何らかの方法で変更されたマップデバイスのみが再ロードされます。すべてのマップデバイスを強制的に再ロードするには、reconfigure allを使用します。

del map MAP DEVICE NAME

指定のマップデバイスおよびそのパーティションを設定解除して削除します。MAP DEVICE NAMEには、dm-0などのデバイスノード名、WWID、またはマップ名を使用できます。このコマンドは、デバイスを使用中には失敗します。

パスの状態の変更、キューの有効化または無効化などを実行できるコマンドもあります。詳細についてはmultipathd(8)を参照してください。

18.4.5 multipathコマンド

マルチパスのセットアップはほぼ自動でmultipathdによって処理されますが、multipathも依然として一部の管理タスクで有用です。このコマンドの使用例を次に示します。

multipath

パスデバイスを検出し、すべての検出マルチパスマップを設定します。

multipath -d

multipathに似ていますが、マップをセットアップしません(試行動作)。

multipath DEVICENAME

特定のマルチパスデバイスを設定します。DEVICENAMEは、デバイスノード名(/dev/sdb)またはデバイス番号(major:minorフォーマット)でメンバーパスデバイスを示すことができます。または、WWIDやマルチパスマップの名前も使用できます。

multipath -f DEVICENAME

マルチパスマップおよびそのパーティションマッピングを設定解除(「フラッシュ」)します。そのパーティションのいずれかまたはマップが使用中の場合、このコマンドは失敗します。DEVICENAMEで使用できる値については上記を参照してください。

multipath -F

すべてのマルチパスマップおよびそのパーティションマッピングを設定解除(「フラッシュ」)します。マップを使用中の場合、このコマンドは失敗します。

multipath -ll

現在設定されているすべてのマルチパスデバイスのステータスおよびトポロジを表示します。

multipath -ll DEVICENAME

指定されたマルチパスデバイスのステータスを表示します。DEVICENAMEで使用できる値については上記を参照してください。

multipath -t

マルチパスの内部ハードウェアテーブルとアクティブな設定を表示します。設定パラメータの詳細については、multipath.conf(5)を参照してください。

multipath -T

multipath -tコマンドの機能と似ていますが、ホストで検出されたハンドウェアのハードウェアエントリのみを表示します。

-vオプションによって、出力の詳細レベルが制御されます。0(重大なエラー)から4(詳細ロギング)の値を使用できます。デフォルトは-v2です。/etc/multipath.confverbosityオプションを使用すると、multipathmultipathdの両方でデフォルトの詳細レベルを変更できます。

18.4.6 mpathpersistユーティリティ

mpathpersistユーティリティを使用して、デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理します。永続的な予約を行うと、SCSIの論理ユニットへのアクセスが特定のSCSIイニシエータに制限されます。マルチパス設定では、指定ボリュームですべてのI_T関連付け(パス)に同じ予約キーを使用することが重要です。そのようにしないと、あるパスで予約を作成すると別のパスで障害が発生する場合があります。

このユーティリティを/etc/multipath.confファイルのreservation_key属性と共に使用して、SCSIデバイスの永続的な予約を設定します。このオプションが設定されている場合(のみ)、multipathdデーモンは、新しく検出したパスまたは復帰したパスについて永続的な予約をチェックします。

この属性は、multipath.confdefaultsセクションまたはmultipathsセクションに追加できます。例:

multipaths {
    multipath {
        wwid             3600140508dbcf02acb448188d73ec97d
        alias            yellow
        reservation_key  0x123abc
    }
}

永続的な管理に適用可能なすべてのmpathデバイスに対してreservation_keyパラメータを設定した後、multipathd reconfigureを使用して設定を再ロードします。

注記
注記: 「reservation_key file」の使用

特別な値であるreservation_key filemultipath.confdefaultsセクションで使用される場合、mpathpersistを使用して/etc/multipath/prkeysファイルで予約キーを動的に管理できます。

これは、マルチパスマップで永続的な予約を処理する際のお勧めの方法です。この方法はSUSE Linux Enterprise Server 12 SP4から使用できます。

mpathpersistコマンドを使用して、SCSIデバイスで構成されているマルチパスマップの永続的な予約を問い合わせて設定します。詳細については、mpathpersist(8)のマニュアルページを参照してください。このコマンドラインオプションは、sg3_utilsパッケージのsg_persistのオプションと同じです。sg_persist(8)のマニュアルページでは、このオプションの意味を詳細に説明しています。

次の例では、DEVICE/dev/mapper/mpathaなど、デバイスマッパーのマルチパスデバイスを示しています。下記のコマンドは、読みやすくするために長いオプションと共にリストしています。すべてのオプションには、mpathpersist -oGS 123abc DEVICEのように1文字の置換文字が含まれています。

mpathpersist --in --read-keys DEVICE

デバイスに登録されている予約キーを読み取ります。

mpathpersist --in --read-reservation DEVICE

デバイスの既存の予約を表示します。

mpathpersist --out --register --param-sark=123abc DEVICE

デバイスの予約キーを登録します。これにより、ホストですべてのI_T関連付け(パスデバイス)の予約キーが追加されます。

mpathpersist --out --reserve --param-rk=123abc --prout-type=5 DEVICE

以前登録したキーを使用して、デバイスのタイプ5(登録者のみの排他書き込み)の予約を作成します。

mpathpersist --out --release --param-rk=123abc --prout-type=5 DEVICE

デバイスのタイプ5の予約を解放します。

mpathpersist --out --register-ignore --param-sark=0 DEVICE

以前存在していた予約キーをデバイスから削除します。

18.5 マルチパス処理用システムの設定

18.5.1 マルチパスサービスの有効化、起動、および停止

マルチパスサービスを有効にしてブート時に起動するには、次のコマンドを実行します。

> sudo systemctl enable multipathd

実行中のシステムでサービスを手動で開始するには、次のように入力します。

> sudo systemctl start multipathd

サービスを再開するには、次のように入力します。

> sudo systemctl restart multipathd

ほとんどの状況で、サービスの再開は不要です。単にmultipathdに設定を再ロードさせるには、次のコマンドを実行します。

> sudo systemctl reload multipathd

サービスのステータスを確認するには、次のように入力します。

> sudo systemctl status multipathd

現行セッションのマルチパスサービスを停止するには、次のコマンドを実行します。

> sudo systemctl stop multipathd
> sudo systemctl stop multipathd.socket
警告
警告: multipathdの無効化

multipathd.serviceは常に有効にしておき、マルチパスハードウェアにアクセスできるすべてのホストで実行することを強くお勧めします。ただし、マルチパスハードウェアが撤去されたり、別のマルチパス処理ソフトウェアが導入されたため、またはトラブルシューティングの目的で、サービスを無効にする必要が生じる場合があります。

1回のシステムブートに対してのみマルチパス処理を無効にするには、カーネルパラメータのmultipath=offを使用します。これは、ブートシステムと初期のramfsの両方に影響します。この場合、ramfsを再構築する必要はありません。

multipathdサービスを恒久的に無効にして、今後のシステムブートでこのサービスが開始されないようにするには、次のコマンドを実行します。

> sudo systemctl disable multipathd
> sudo systemctl disable multipathd.socket
> sudo dracut --force --omit multipath

(マルチパスサービスを無効または有効にするときには必ずinitrdを再構築してください。詳細については、18.3.2.3項 「初期RAMディスクの同期状態を維持する」を参照してください。)

(オプション)さらに、multipathを手動で実行するときにもマルチパスデバイスが設定されないようにする場合は、initrdを再構築する前に、/etc/multipath.confの最後に次の行を追加します。

blacklist {
    wwid .*
}

18.5.2 マルチパス処理用SANデバイスの準備

SANデバイスのマルチパスI/Oを設定する前に、必要に応じて、次のようにSANデバイスを準備してください。

  • ベンダのツールで、SANデバイスを設定し、ゾーン化します。

  • ベンダのツールで、ストレージアレイ上のホストLUNのパーミッションを設定します。

  • SUSE Linux Enterprise Serverでホストバスアダプタ(HBA)用ドライバが同梱されていない場合、HBAベンダからLinuxドライバをインストールします。詳細については、ベンダの特定マニュアルを参照してください。

マルチパスデバイスが検出され、multipathd.serviceが有効になっている場合、マルチパスマップは自動的に作成されます。作成されない場合、lsscsiなどのコマンドを使用して下位レベルデバイスを確認してください。また、journalctl -bでシステムログを調査してください。LUNがHBAドライバによって認識されない場合は、SANのゾーン化セットアップをチェックします。特に、LUNのマスキングがアクティブであるかどうか、LUNがサーバに正しく割り当てられているかどうかをチェックしてください。

LUNがHBAドライバによって認識できるが、対応するブロックデバイスが作成されない場合は、追加のカーネルパラメータが必要な場合があります。SUSEナレッジベース(https://www.suse.com/support/kb/doc.php?id=3955167)で「TID 3955167: Troubleshooting SCSI (LUN) Scanning Issues」を参照してください。

18.5.3 マルチパスデバイスのパーティション

マルチパスマップには、そのパスデバイスのようなパーティションを設けることができます。パーティションテーブルのスキャンおよびパーティションのデバイスノード作成は、ユーザスペースでkpartxツールによって実行されます。kpartxは、udevルールによって自動的に起動します。通常、手動での実行は不要です。技術的には、kpartxによって作成される「パーティション」デバイスは、親デバイスからのブロックの線形範囲をマップするだけのデバイスマッパーのデバイスでもあります。既知のWWIDを持つマルチパスデバイスでN番目のパーティションには、/dev/disk/by-id/dm-uuid-partN-mpath-WWIDを介して安定的にアクセスできます。

注記
注記: kpartxの起動の無効化

/etc/multipath.confskip_kpartxオプションを使用して、選択したマルチパスマップでのkpartxの起動を無効にできます。たとえば、これは仮想化ホストで有用である場合があります。

マルチパスデバイスのパーティションテーブルおよびパーティションは、YaSTまたはfdiskpartedのようなツールを使用して普通に操作できます。パーティションテーブルに適用する変更は、パーティション処理ツールが終了するとシステムによって記録されます。これが動作しない場合(デバイスがビジーであることが原因であることが多い)、multipathd reconfigureを試すか、またはシステムを再起動してください。

パーティション化されたマルチパスデバイスはそれ以外の方法では使用できません。たとえば、パーティション化されたデバイスからLVM物理ボリュームは作成できません。これを実行する前にパーティションテーブルを消去する必要があります。

18.6 マルチパス設定

組み込みのmultipath-toolsは、ほとんどのセットアップでデフォルトで正しく動作します。カスタマイズが必要な場合、設定ファイルを作成する必要があります。主要設定ファイルは/etc/multipath.confです。また、/etc/multipath/conf.d/*.confのパターンと一致するファイルはアルファベット順に読み込まれます。優先されるルールについては、18.6.2項 「multipath.confの構文」を参照してください。

注記
注記: 生成される設定ファイル

/etc/multipath/wwids/etc/multipath/bindings、および/etc/multipath/prkeysのファイルはmultipath-toolsによって管理され、前に作成されたマルチパスマップ、マップ名、およびSCSIの永続的な予約の予約キーに関して永続的な情報をそれぞれ格納します。これらの生成された設定ファイルは編集しないでください。

注記
注記: 設定可能なパス

/etc/multipath.confを除いて、設定ディレクトリおよびファイルのパスは設定可能ですが、これらのパスを変更しないことを強くお勧めします。

18.6.1 /etc/multipath.confファイルの作成

組み込みのデフォルトテンプレートからmultipath.confテンプレートを生成できます。これを行うことによってすべてのデフォルト設定が明示的になります。生成されたファイルを変更しない限りmultipath-toolsの動作は変わりません。設定テンプレートを生成するには、次のコマンドを実行します。

multipath -T >/etc/multipath.conf

または、変更する設定のみを含む最低限の/etc/multipath.confを作成できます。この動作は、生成されたテンプレートの該当行のみを変更する操作と同じです。

18.6.2 multipath.confの構文

/etc/multipath.confファイルでは、セクション、サブセクション、および属性/値のペアで階層を使用します。

  • 空白によってトークンが分離されます。連続する空白文字は、引用符で囲まれていない限り1つの空白に圧縮されます(下記参照)。

  • ハッシュ(#)および感嘆符(! )文字を使用すると、残りの行はコメントとして無視されます。

  • セクションとサブセクションは、同じ行の開き中かっこ({)で始まり、その行の閉じ中かっこ(})で終わります。

  • 属性および値は1行に書き込まれます。行の継続はサポートされていません。

  • 属性とセクション名はキーワードにする必要があります。使用できるキーワードについては、multipath.conf(5)を参照してください。

  • 値は二重引用符(")で囲むことができます。値に空白またはコメント文字が含まれている場合、その値を引用符で囲む必要があります。値の内側にある二重引用符文字は二重引用符のペア("")で表されます。

  • 一部の属性の値はPOSIXの正規表現です(regex(7)を参照)。これらは大文字と小文字が区別され、固定されないため、“bar”と“rhabarber”は一致します。

構文の例

section {
    subsection {
        attr1 value
	   attr2      "complex value!"
	attr3    "value with ""quoted"" word"
    } ! subsection end
} # section end

優先ルール

18.6項 「マルチパス設定」の最初に記述されているとおり、複数の設定ファイルを備えることができます。追加のファイルは/etc/multipath.confと同じ構文ルールに従います。セクションと属性は複数回使用できます。同じ属性が複数のファイルで設定されたり、同じファイルの複数の行で設定されると、最後に読み取られた値が優先されます。

18.6.3 /etc/multipath.confのセクション

/etc/multipath.confファイルは、以下のセクションで構成されています。一部の属性は複数のセクションで使用できます。詳細についてはmultipath.conf(5)を参照してください。

defaults

一般的なデフォルト設定。

blacklist

無視するデバイスをリストします。18.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。

blacklist_exceptions

マルチパス処理されるデバイスをリストします(ブラックリストに含まれている場合もリストされます)。18.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。

devices

ストレージコントローラ専用の設定。このセクションはデバイスサブセクションのコレクションです。このセクションの値は、defaultsセクションの同じ属性の値を上書きします。

multipaths

個々のマルチパスデバイスの設定。このセクションはマルチパスサブセクションのリストです。値はdefaultsセクションとdevicesセクションを上書きします。

上書き

他のすべてのセクションの値を上書きする設定。

18.6.4 /etc/multipath.confの変更の適用

設定変更を適用するには、次のコマンドを実行します。

> sudo multipathd reconfigure

忘れずにinitrdの設定と同期してください。18.3.2.3項 「初期RAMディスクの同期状態を維持する」を参照してください。

警告
警告: multipathを使用して設定を適用しない

multipathdを実行中にmultipathコマンドを使用して新しい設定を適用しないでください。これを行うと、セットアップの整合性が失われ、セットアップが破損する場合があります。

注記
注記: 変更したセットアップの確認

変更した設定を適用する前にテストできます。そのためには次のコマンドを実行します。

multipath -d -v2

このコマンドを実行すると、指定したトポロジを使用して作成される新しいマップが表示されます。ただし、マップの削除やフラッシュが実行されるかどうかはこのコマンドで示されません。さらに詳細を取得するには、次のコマンドを実行します。

multipath -d -v3 2>&1 | less

18.6.5 WWIDの生成

異なるパス上のデバイスを識別するため、マルチパスは、各デバイスに対してWorld Wide Identification (WWID)を使用します。2つのデバイスパスのWWIDが同じである場合、それらは同じデバイスを表すものと想定されます。やむを得ない理由がある場合を除き、WWIDの生成方法を変更しないことをお勧めします。詳細については、man multipath.confを参照してください。

18.7 ポーリング、待ち行列、およびフェールバック用のポリシーの設定

このセクションでは、耐障害性を実現するために最も重要なmultipath-tools設定パラメータについて説明します。

polling_interval

パスデバイスの正常性チェック間の間隔(秒単位)。デフォルトは5秒です。障害が発生したデバイスはこの間隔でチェックされます。デバイスが正常な場合、この間隔を最長max_polling_interval秒まで長くすることができます。

no_path_retry

指定マルチパスマップのすべてのパスで障害が発生した場合やパスが存在しなくなった場合における処理を決定します。次の値を使用できます。

fail

マルチパスマップのI/Oは失敗します。そのため、マウントされたファイルシステムなどの上位レイヤでI/Oエラーが発生します。影響を受けるファイルシステム、および場合によってはホスト全体がディグレードモードになります。

queue

マルチパスマップのI/Oがデバイスマッパーレイヤのキューに入り、パスデバイスを再度使用できるようになると、そのデバイスに送信されます。これは、データ損失を回避するための最も安全なオプションですが、パスデバイスが長時間復帰しないと悪影響を被る可能性があります。デバイスからの読み取りプロセスは中断できないスリープ(D)状態でハングします。キューに格納されたデータでメモリが一杯になり、処理できなくなります。最終的にメモリが枯渇します。

N

Nは正の整数です。N秒のポーリング間隔でマップデバイスをキューモードのままにします。この時間が経過すると、マップデバイスのmultipathdは失敗します。polling_intervalが5秒でno_path_retryが6の場合、multipathdはI/Oをキューに約30秒間(5秒X6)格納し、時間が経過するとそのマップデバイスのI/Oは失敗します。タイムアウト値を注意深く選択すると、多くの場合、障害キューの間の良い折衷点になります。

マルチパスI/Oの最終目標は、ストレージシステムとサーバ間のコネクティビティ耐障害性を提供することです。望ましいデフォルトの動作は、サーバがスタンダロンのサーバか、高可用性クラスタ内のノードかによって異なります。

スタンドアロンサーバに対してマルチパスI/Oを構成する際は、no_path_retryの設定により、サーバのオペレーティングシステムを、I/Oエラーの受信から可能な限り保護することができます。この設定により、メッセージはマルチパスのフェールオーバーが発生するまで待ち行列に入れられ、正常な接続が保たれます。

高可用性クラスタ内のノードに対してマルチパスI/Oを構成するときには、マルチパスでリソースのフェールオーバーをトリガするためにI/O障害が報告されるようにして、マルチパスのフェールオーバーが解決されるのを待たなくて済むようにするとよいでしょう。クラスタ環境では、no_path_retry設定を、ストレージシステムへの接続が失われた場合に、クラスタノードがクラスタ検証プロセスに関連するI/Oエラー(ハートビート許容値の50%を推奨)を受信するように変更する必要があります。また、パスの障害によるリソースのピンポンを避けるため、マルチパスI/Oのフェールバックをマニュアルに設定するとよいでしょう。

/etc/multipath.confファイルには、ポーリング、待ち行列、およびフェールバックのデフォルト動作を指定できるdefaultsセクションが含まれています。deviceセクションで、フィールドが別途指定されていない場合は、そのSAN構成にデフォルト設定が適用されます。

デフォルト設定では、以下のようにコンパイルされています。パーソナライズした/etc/multipath.confファイルを作成して構成することでこれらの値を上書きしない限り、この設定が使用されます。

defaults {
  verbosity 2
#  udev_dir is deprecated in SLES 11 SP3
#  udev_dir              /dev
  polling_interval      5
#  path_selector default value is service-time in SLES 11 SP3
#  path_selector         "round-robin 0"
  path selector         "service-time 0"
  path_grouping_policy  failover
#  getuid_callout is deprecated in SLES 11 SP3 and replaced with uid_attribute
#  getuid_callout        "/usr/lib/udev/scsi_id --whitelisted --device=/dev/%n"
#  uid_attribute is new in SLES 11 SP3
  uid_attribute         "ID_SERIAL"
  prio                  "const"
  prio_args             ""
  features              "0"
  path_checker          "tur"
  alias_prefix          "mpath"
  rr_min_io_rq          1
  max_fds               "max"
  rr_weight             "uniform"
  queue_without_daemon  "yes"
  flush_on_last_del     "no"
  user_friendly_names   "no"
  fast_io_fail_tmo      5
  bindings_file         "/etc/multipath/bindings"
  wwids_file            "/etc/multipath/wwids"
  log_checker_err       "always"

  retain_attached_hw_handler  "no"
  detect_prio           "no"
  failback              "manual"
  no_path_retry         "fail"
  }

ポーリング、待ち行列、およびフェールバックの詳細については、18.10項 「パスフェールオーバーのポリシーと優先度の設定」に記載のパラメータを参照してください。

/etc/multipath.confファイルの変更後、dracut -fを実行してシステム上にinitrdを再作成してから、サーバを再起動して変更内容を有効にする必要があります。詳細については18.6.4項 「/etc/multipath.confの変更の適用」を参照してください。

18.8 非マルチパスデバイスのブラックリスト化

/etc/multipath.confファイルにblacklistセクションを含め、すべての非マルチパスデバイスを一覧にできます。WWID (wwidキーワード)、デバイス名(devnodeキーワード)、またはデバイスタイプ(deviceセクション)を使用してデバイスをブラックリスト化できます。blacklist_exceptionsセクションを使って、blacklistセクションで使用している正規表現によってブラックリスト化された特定のデバイスに対してマルチパスを有効にすることもできます。

注記
注記: 推奨するブラックリスト化方法

デバイスをブラックリスト化する場合に推奨する方法は、「WWID」または「ベンダーと製品」です。「devnode」によるブラックリスト化は推奨しません。デバイスノードは変わる可能性があり、デバイスを常時識別する目的では役に立たないからです。

警告
警告: multipath.confの正規表現

/etc/multipath.confでは、正規表現は一般に「無効」です。正規表現は、一般的な文字列を検索する場合にのみ有効です。ただし、マルチパスの標準設定には、すでにさまざまなデバイスとベンダーを表す正規表現が含まれています。正規表現で別の正規表現を検索することはできません。multipath -tで表示される文字列のみを検索するようにしてください。

通常、非マルチパスデバイス(hpsafdhdmddmsrscdstramrawloopなど)は無視できます。たとえば、ローカルのSATAハードディスクやフラッシュディスクにはマルチパスはありません。multipathで単一パスデバイスを無視する場合は、それらのデバイスをblacklistセクションに記述します。

注記
注記: 互換性

キーワードdevnode_blacklistは廃止され、キーワードblacklistに代わりました。

SUSE Linux Enterprise Server 12では、glibcで提供されている正規表現が使用されます。任意の文字列に一致させるには、"."*"ではなく*"を使用する必要があります。

たとえば、hpsaドライバからローカルデバイスとすべてのアレイを、multipathによる管理から外してブラックリストに載せるには、blacklistセクションを次のように指定します。

blacklist {
      wwid "26353900f02796769"
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
      devnode "^sd[a-z][0-9]*"
}

アレイ全体でなく、ドライバからのパーティションだけをブラックリスト化することもできます。たとえば、次の正規表現を使用すると、アレイ全体ではなく、ccissドライバからのパーティションだけをブラックリスト化できます。

blacklist {
      devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

特定のデバイスタイプをブラックリスト化するには、ブラックリストにdeviceセクションを追加して、キーワードvendorおよびproductを使用します。

blacklist {
      device {
           vendor  "DELL"
           product ".*"
       }
}

blacklist_exceptionsセクションを使って、blacklistセクションで使用している正規表現によってブラックリスト化された特定のデバイスに対してマルチパスを有効にできます。WWID (wwidキーワード)、デバイス名(devnodeキーワード)、またはデバイスタイプ(deviceセクション)を使用して例外を追加します。例外は、対応するデバイスをブラックリスト化したときと同じ方法で指定する必要があります。つまり、wwid例外はwwidブラックリストに適用され、devnode例外はdevnodeブラックリストに適用され、デバイスタイプ例外はデバイスタイプブラックリストに適用されます。

たとえば、同じベンダのデバイスタイプが複数ある場合、目的のデバイスタイプに対してマルチパスを有効にできます。そのベンダのデバイスタイプすべてをblacklistセクションに記述してブラックリスト化してから、blacklist_exceptionsセクションにdeviceセクションを追加し、目的のデバイスタイプに対してマルチパスを有効にします。

blacklist {
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"
      device {
           vendor  "DELL"
           product ".*"
       }
}

blacklist_exceptions {
      device {
           vendor  "DELL"
           product "MD3220i"
       }
}

blacklist_exceptionsを使用して、特定のデバイスに対してのみマルチパスを有効にすることもできます。例:

blacklist {
      wwid ".*"
}

blacklist_exceptions {
        wwid "3600d0230000000000e13955cc3751234"
        wwid "3600d0230000000000e13955cc3751235"
}

/etc/multipath.confファイルの変更後、dracut -fを実行してシステム上にinitrdを再作成してから、サーバを再起動して変更内容を有効にする必要があります。詳細については18.6.4項 「/etc/multipath.confの変更の適用」を参照してください。

再起動後は、multipath -llコマンドを発行しても、ローカルデバイスはマルチパスマップにリストされません。

注記
注記: find_multipathsオプションの使用

SUSE Linux Enterprise Server 12 SP2より、マルチパスツールは、/etc/multipath.confdefaultsセクションでオプションfind_multipathsをサポートするようになりました。このオプションは、マルチパスとmultipathdが、パスが1つだけのデバイスにマルチパスマップを設定しないようにします(詳細については、man 5 multipath.confを参照してください)。特定の設定では、これによって、管理者がローカルSATAディスクなどのブラックリストエントリを作成する手間を省くことができます。

find_multipathsオプションを使用すると一見便利そうですが、欠点もあります。まず、システムのブートが複雑化して低速になります。見つかったすべてのデバイスについて、そのデバイスに2つ目のパスが存在するかどうかを確認するため、すべてのデバイスが検出されるまでブートロジックが待機しなければならないからです。さらに、ブート時に一部のパスがダウンしていたり、他の理由で不可視になっていたりすると、問題が発生する可能性もあります。つまり、デバイスがシングルパスデバイスとして誤検出されてアクティブ化され、後で他のパスを追加できなくなる可能性があります。

find_multipathsは、WWIDが一致すれば、/etc/multipath/wwidsに一覧にされたデバイスをすべてマルチパスデバイスとみなします。これは、find_multipathsを初めて有効にする場合に重要です。wwidsファイルには既存のすべてのマルチパスマップ(シングルパスマップを含む)が一覧にされているため、/etc/multipath/wwidsを削除または編集しない限り、このオプションを有効にしても効果はありません。マルチパスルートファイルシステムを持つSANブートシステムでは、初期RAMディスクとファイルシステムとの間で/etc/multipath/wwidsの同期が維持されるようにしてください。

まとめると、find_multipathsを使用すると便利ですが、SUSEは、これまでと同様に適切に設定されたブラックリストとブラックリスト例外を使うデフォルト設定をお勧めします。

18.9 ユーザフレンドリ名または別名の設定

マルチパスデバイスは、そのWWID、ユーザフレンドリな名前、またはそれに割り当てた別名で識別されます。/dev/sdnおよび/dev/dm-nの形式のデバイスノード名は、再起動の際に変わる可能性があり、毎回異なるデバイスに割り当てられることになります。デバイスのWWID、ユーザフレンドリ名、および別名は、再起動の際にも変わることなく、デバイスの識別には望ましい方法です。

重要
重要: 永続的な名前の使用の推奨

/dev/sdnおよび/dev/dm-n形式のデバイスノード名は、再起動時に変更される可能性があるので、マルチパスデバイスは、そのWWIDで参照することを推奨します。また、再起動時にデバイスを一意に識別するために、WWIDにマップされたユーザフレンドリ名または別名を使用することもできます。

次の表では、/etc/multipath.confファイル内のデバイスに使用できるデバイス名のタイプについて説明しています。multipath.conf設定の例については、/usr/share/doc/packages/multipath-tools/multipath.conf.syntheticファイルを参照してください。

表 18.1: マルチパスデバイス名のタイプの比較

名前のタイプ

説明

WWID (デフォルト)

シリアルWWID (Worldwide Identifier)は、グローバルに固有または非変更であることを保証されたマルチパスデバイスの識別子です。マルチパス処理で使用されるデフォルト名は、/dev/disk/by-idディレクトリにある論理ユニットのIDです。たとえば、WWIDが3600508e0000000009e6baa6f609e7908のデバイスは、/dev/disk/by-id/scsi-3600508e0000000009e6baa6f609e7908と記載されています。

ユーザフレンドリ

/dev/mapperディレクトリ内のデバイスマッパーマルチパスのデバイス名は、論理ユニットのIDも参照します。これらのマルチパスデバイス名は、/dev/mapper/mpathN形式を使用するユーザフレンドリな名前です(たとえば、/dev/mapper/mpath0)。これらの名前は、/var/lib/multipath/bindingsファイルを使用してUUIDとユーザフレンドリな名前の関連付けを追跡するので、固有かつ永続的です。

別名

別名は、グローバルに固有な名前であり、管理者がマルチパスデバイスに提供します。別名は、WWIDとユーザフレンドリな/dev/mapper/mpathN名に優先します。

user_friendly_nameを使用している場合は、別名をmpathN形式に設定しないでください。mpathN形式にすると、自動的に割り当てられたユーザフレンドリ名と競合し、デバイスノードが正しくなくなる可能性があります。

/etc/multipath.confファイルのグローバルマルチパスオプションuser_friendly_namesは、マルチパスデバイスのユーザフレンドリ名の使用を有効または無効にするために使用されます。このオプションがno (デフォルト)に設定されている場合、マルチパスはデバイス名としてWWIDを使用します。このオプションがyesに設定されている場合は、/var/lib/multipath/bindingsファイルが使用されて、mpath<N>形式の永続的で固有の名前が、/dev/mapperディレクトリ内でデバイスに割り当てられます。/etc/multipath.confファイルのbindings fileオプションを使用すると、bindingsファイルに代替の場所を指定できます。

/etc/multipath.confファイルのグローバルマルチパスオプションaliasは、デバイスに名前を明示的に割り当てるために使用されます。別名がマルチパスデバイスに設定されている場合は、WWIDまたはユーザフレンドリ名の代わりにその別名が使用されます。

user_friendly_namesオプションの使用は、以下の状況では問題を引き起こす可能性があります。

ルートデバイスでマルチパスを使用している場合:

システムルートデバイスでマルチパスを使用中に、user_friendly_namesオプションを使用する場合は、 option, the user-friendly settings in the /var/lib/multipath/bindingsファイルのユーザフレンドリ設定がinitrdに組み込まれます。デバイスの追加や削除などで、後でストレージのセットアップを変更した場合は、initrd内のバインディング設定と/var/lib/multipath/bindings内のバインディング設定に不一致が生じます。

警告
警告: バインディングの不一致

initrd/var/lib/multipath/bindingsのバインディングが不一致だと、デバイスに間違ったマウントポイントが割り当てられることがあり、その場合は、ファイルシステムが破損し、データが失われます。

この問題を回避するには、システムルートデバイスにデフォルトのWWID設定を使用することを推奨します。システムのルートデバイスには、別名を使用してはなりません。デバイス名が異なることがあるため、別名を使用すると、カーネルのコマンドラインを通じてマルチパス処理をシームレスにスイッチオフすることができなくなります。

別のパーティションから/varをマウントする場合:

user_friendly_names設定ファイルのデフォルトの格納場所は、/var/lib/multipath/bindingsです。/varデータがシステムルートデバイス上になく、このデータを別のパーティションからマウントする場合は、マルチパス処理のセットアップ時にbindingsファイルを利用できません。

/var/lib/multipath/bindingsファイルをシステムルートデバイスで使用し、マルチパスで検出できるようにしてください。これは、たとえば、次の手順で実行できます。

  1. /var/lib/multipath/bindingsファイルを/etc/multipath/bindingsに移動します。

  2. この新しい場所に、/etc/multipath.confdefaultsセクションにあるbindings_fileオプションを設定します。例:

    defaults {
                   user_friendly_names yes
                   bindings_file "/etc/multipath/bindings"
    }
マルチパスがinitrdに含まれている場合:

システムルートデバイスがマルチパス上にない場合でも、マルチパスがinitrdに含まれることがあります。これは、たとえば、システムルートデバイスがLVM上にある場合に起こります。user_friendly_namesオプションを使用し、マルチパスがinitrd内にある場合は、パラメータmultipath=offでブートして問題を回避してください。

これにより、システムブート中は、initrd内でのみマルチパスが無効になります。システムブート後は、ブートスクリプトboot.multipathおよびmultipathdによって、マルチパス処理を有効にすることができます。

HAクラスタでマルチパス処理を行う場合:

詳細については18.9.1項 「HAクラスタにおけるマルチパスデバイスの名前」を参照してください。

ユーザフレンドリな名前を有効にするか、別名を指定する場合:

  1. root特権を使用して/etc/multipath.confファイルをテキストエディタで開きます。

  2. (オプション)/var/lib/multipath/bindingsファイルの場所を変更します。

    代替パスは、マルチパスが代替パスを見つけることができるシステムルートデバイス上に存在する必要があります。

    1. /var/lib/multipath/bindingsファイルを/etc/multipath/bindingsに移動します。

    2. この新しい場所に、/etc/multipath.confdefaultsセクションにあるbindings_fileオプションを設定します。例:

      defaults {
                user_friendly_names yes
                bindings_file "/etc/multipath/bindings"
      }
  3. (オプション、非推奨)ユーザフレンドリ名の有効にする:

    1. defaultsセクションとその閉じ括弧を非コメント化します。

    2. user_friendly_namesオプションを非コメント化し、次に、その値をNoからYesに変更します。

      例:

      ## Use user-friendly names, instead of using WWIDs as names.
      defaults {
        user_friendly_names yes
      }
  4. (オプション)aliasオプション(multipathセクションにある)を使用して、独自のデバイス名を指定します。

    例:

    ## Use alias names, instead of using WWIDs as names.
    multipaths {
           multipath {
                   wwid           36006048000028350131253594d303030
                   alias             blue1
           }
           multipath {
                   wwid           36006048000028350131253594d303041
                   alias             blue2
           }
           multipath {
                   wwid           36006048000028350131253594d303145
                   alias             yellow1
           }
           multipath {
                   wwid           36006048000028350131253594d303334
                   alias             yellow2
           }
    }
    重要
    重要: WWNと比較したWWID

    /etc/multipath.confファイル内でデバイスの別名を定義する場合は、必ず各デバイスのWWID (3600508e0000000009e6baa6f609e7908など)を使用し、そのWWNは使用しないようにしてください。WWNは、デバイスIDの最初の文字を0xで置き換えます(0x600508e0000000009e6baa6f609e7908など)。

  5. 変更内容を保存し、ファイルを閉じます。

  6. /etc/multipath.confファイルの変更後、dracut -fを実行してシステム上にinitrdを再作成してから、サーバを再起動して変更内容を有効にする必要があります。詳細については18.6.4項 「/etc/multipath.confの変更の適用」を参照してください。

LUNディレクトリ全体を使用する場合は(たとえばSAN機能を使用してストレージのパーティションを行っている場合など)、mkfs/etc/fstab、ご使用のアプリケーションなどに、/dev/disk/by-id/xxxという名前を使用することができます。パーティションで分割されたデバイスは、デバイス名の後ろに_part<n>が付加されます(/dev/disk/by-id/xxx_part1など)。

/dev/disk/by-idディレクトリでは、マルチパスのマップ処理がなされたデバイスは、dm-uuid*名または別名(/etc/multipath.confファイル内で別名を割り当てている場合)で表されます。scsi-およびwwn-のデバイス名は、そのデバイスへの物理的パスを表します。

18.9.1 HAクラスタにおけるマルチパスデバイスの名前

以下を行って、マルチパスデバイスがすべてのデバイス間で同じ名前であるようにしてください。

  • UUIDと別名を使用して、マルチパスデバイスの名前が、クラスタ内のすべてのノードで同一となるようにします。別名は、すべてのノードにわたって一意である必要があります。/etc/multipath.confファイルを、ノードからクラスタ内の他のすべてのノードの/etc/ディレクトリにコピーします。

  • マルチパスがマップされたデバイスを使用する場合は、dm-uuid*名または別名を/dev/disk/by-idディレクトリ内で指定し、デバイスの固定パスインスタンスは指定しないようにします。詳細については、「18.9項 「ユーザフレンドリ名または別名の設定」」を参照してください。

  • user_friendly_names構成オプションを、無効にしないよう設定します。ユーザフレンドリ名はノードに固有ですが、クラスタ内のすべてのノードにおいてデバイスに同じユーザフレンドリ名が割り当てられてはいない可能性があります。

注記
注記: ユーザフレンドリ名

実際にユーザフレンドリ名を使用する必要がある場合は、以下の操作により、システム定義のユーザフレンドリ名を、クラスタ内のすべてのノードについて同一にすることができます。

  1. 1つのノード上の/etc/multipath.confファイル内で、

    1. user_friendly_names構成オプションをyesに設定して有効にします。

      マルチパスは、/var/lib/multipath/bindingsファイルを使用して、/dev/mapperディレクトリ内でmpath<N>の形式で、デバイスに永続的かつ固有の名前を割り当てます。

    2. (オプション) bindingsファイルに対して別の場所を指定するには、/etc/multipath.confファイルのdefaultsセクションにある、bindings_fileオプションを設定します。

      デフォルトの場所は、/var/lib/multipath/bindingsです。

  2. ノード上のマルチパスデバイスをすべて設定します。

  3. /etc/multipath.confファイルを、ノードからクラスタ内の他のすべてのノードの/etc/ディレクトリにコピーします。

  4. bindingsファイルを、ノードから、クラスタ内の他のすべてのノード上のbindings_fileパスにコピーします。

  5. /etc/multipath.confファイルの変更後、dracut -fを実行してシステム上にinitrdを再作成してから、ノードを再起動して変更内容を有効にする必要があります。詳細については18.6.4項 「/etc/multipath.confの変更の適用」を参照してください。これは、影響を受けるすべてのノードに適用されます。

18.10 パスフェールオーバーのポリシーと優先度の設定

Linuxホスト内で、ストレージコントローラへのパスが複数ある場合は、各パスが別個のブロックデバイスとして表示され、その結果、1つのLUNに複数のブロックデバイスが存在することになります。デバイスマッパーマルチパスサービスは、同じLUN IDをもつ複数のパスワードを検出し、そのIDで新しいマルチパスデバイスを作成します。たとえば、1つの非ゾーン化されたファイバチャネルのスイッチを介して2つのポートでストレージコントローラに接続した2つのHBAをもつホストは、4つのブロックデバイスを認識します(/dev/sda/dev/sdb/dev/sdc/dev/sdd)。デバイスマッパーマルチパスサービスは、1つのブロックデバイス/dev/mpath/mpath1を作成します。このデバイスは、既に示した4つのブロックデバイスを介してI/Oを再経路指定します。

本項では、フェールオーバーのポリシーを指定し、パスの優先順位を設定する方法について説明します。/etc/multipath.confファイルの変更後、dracut -fを実行してシステム上にinitrdを再作成してから、サーバを再起動して変更内容を有効にする必要があることに注意してください。詳細については18.6.4項 「/etc/multipath.confの変更の適用」を参照してください。

18.10.1 パスのフェールオーバーポリシーの設定

multipathコマンドを-pオプション付きで使用して、パスフェールオーバーポリシーを設定します。

> sudo multipath DEVICENAME -p POLICY

次のポリシーオプションの1つで、POLICYを置き換えます。

表 18.2: multipath -pコマンドのグループポリシーオプション

ポリシーオプション

説明

failover (フェールオーバー)

(デフォルト)優先度グループごとに1つのパス

multibus

1つの優先度グループ内にすべてのパス

group_by_serial

検出されたシリアル番号ごとに1つの優先度グループ

group_by_prio

パス優先度値ごとに1つの優先度グループ優先度は、コールアウトプログラムで決定されます。それらのプログラムは、グローバル、コントローラごと、またはマルチパスごとのオプションとして/etc/multipath.conf環境設定ファイルで指定されます。

group_by_node_name

ターゲットノード名ごとに1つの優先度グループターゲットノード 名は、 /sys/class/fc_transport/target*/node_nameにフェッチされます。

18.10.2 フェールオーバーポリシーの設定

デバイスのフェールオーバーポリシーは、手動で、/etc/multipath.confファイルに入力する必要があります。すべての設定とオプションの例は、/usr/share/doc/packages/multipath-tools/multipath.conf.annotatedファイルにあります。

18.10.2.1 優先度グループと属性の理解

優先度グループは、同じ物理LUNに属するパスのコレクションです。デフォルトでは、I/Oは、グループ内のすべてのパス全体にラウンドロビン方式で配分されます。multipathコマンドは、SANのpath_grouping_policy設定に基づいてそのSANの各LUNごとに、自動的に優先度グループを作成します。multipathコマンドは、グループ内のパス数にグループの優先度を掛け合わせて、どのグループがプライマリか決定します。計算された値が最も高いグループがプライマリグループです。プライマリグループ内のすべてのパスが失敗すると、次に値の高い優先度グループがアクティブになります。

パス優先度は、パスに割り当てられた整数値です。値が高いほど、優先度が高くなります。パスごとに優先度を割り当てるには、外部プログラムが使用されます。所定のデバイスに関して、同じ優先度のパスが同じ優先度グループに属します。

prio設定は、/etc/multipath.confファイルのdefaults{}またはdevices{}セクションで使用します。multipath{)セクションの個別のmultipaths定義に指定されている場合は、暗黙のうちに無視されます。prio行で、Prioritizerが指定されます。Prioritizerが引数を必要とする場合、その引数は2行目のprio_argsキーワードで指定します。

デフォルトセクションまたはデバイスセクションのprio設定

prio

パス優先度の値を取得するために呼び出すPrioritizerプログラムを指定します。加重は、障害の発生時に使用する次のパスグループを決定するため、それぞれのパスグループに対して合計されます。

指定したPrioritizerで引数が必要な場合は、prio_argsキーワードを使用して、引数を指定します。

prioキーワードを指定しない場合は、すべてのパスが同等になりますデフォルトの設定はconstで、prio_argsの設定には値がありません。

prio "const"
prio_args ""

Prioritizerのプログラム例には、以下のものがあります。

Prioritizerプログラム

説明

alua

SCSI-3 ALUA設定に基づいてパス優先度を生成します。

const

すべてのパスに同じ優先度を生成します。

emc

EMCアレイのパス優先度を生成します。

hdc

Hitachi HDS Modularストレージアレイのパス優先度を生成します。

hp_sw

アクティブ/スタンバイモードのCompaq/HPコントローラのパス優先度を生成します。

ontap

NetAppアレイのパス優先度を生成します。

random

パスごとにランダムな優先度を生成します。

rdac

LSI/Engenio RDACコントローラのパスの優先度を生成します。

weightedpath

prio_argsに対する引数内で指定した加重値に基づいて、パス優先度を生成します。

path_latency

prio_argsキーワードで設定されているレイテンシアルゴリズムに基づいて、パスの優先度を生成します。

prio_args引数

これらは、引数を必要とするPrioritizerプログラムの引数です。ほとんどのprioプログラムでは、引数は不要です。デフォルト値はありません。値は、prioの設定と、Prioritizerが次の引数のいずれかを必要とするかどうかによります。

weighted

フォーム[hbtl|devname|serial|wwn] REGEX1 PRIO1 REGEX2 PRIO2の値が必要です...

Regexでは、SCSI H:B:T:L形式(1:0:.:.および*:0:0:.など)を、加重値とともに使用する必要があります。ここで、H、B、T、Lはそれぞれ、デバイスのホスト、バス、ターゲット、およびLUN IDを示します。例:

prio "weightedpath"
prio_args "hbtl 1:.:.:. 2 4:.:.:. 4"
devname

Regexはデバイス名形式です。例: sda, sd.e

serial

Regexはシリアル番号形式です。例: .*J1FR.*324.multipathd show paths format %zコマンドを使用してシリアル番号を検索します。(multipathd show wildcardsでは、すべてのformatのワイルドカードが表示されます。)

alua

exclusive_pref_bitがデバイスに対して設定される場合(alua exclusive_pref_bit)、preferred pathビットセットを持つパスは常に独自のパスグループ内になります。

path_latency

path_latencyでは、リモートとローカルの両方のストレージアレイが同じタイプのハードウェアを使用する場合に、これらのアレイ間のレイテンシを調整します。通常、リモートアレイのレイテンシは高くなるため、レイテンシを調整してそれらを互いに近づけることができます。これにはio_num=20 base_num=10という形式の値ペアが必要です。

io_numは、現在のパスに継続的に送信される読み込みIO数で、平均のパスレイテンシを計算するために使用されます。有効な値は2~200の間の整数です。

base_numは、異なる優先順位を分割するために使用される対数の基数です。有効な値は2~10の間の整数です。最大平均レイテンシ値は100s、最小は1μsです。たとえば、base_num=10の場合、パスはパスレイテンシが <=1 μs、(1 μs, 10 μs]、(10 μs, 100 μs)、(100 μs, 1 ms)、(1 ms, 10 ms)、(10 ms, 100 ms)、(100 ms, 1 s)、(1 s, 10 s)、(10 s, 100 s)、>100 sの優先グループにグループ化されます。

マルチパス属性

デバイスに対するマルチパスI/Oの動作を制御するには、マルチパス属性を使用します。すべてのマルチパスデバイスに対して、デフォルトとして属性を指定できます。また、あるマルチパスデバイスにのみ適用する属性を、そのデバイス用のエントリを、マルチパス設定ファイルのmultipathsセクションで作成することで、指定することもできます。

user_friendly_names

WWID(world-wide ID)を使用するか、または/var/lib/multipath/bindingsファイルを使用して永続的で固有な別名を/dev/mapper/mpathN形式のマルチパスデバイスに割り当てるか指定します。

このオプションは、devicesセクションおよびmultipathsセクションで使用できます。

説明

×

(デフォルト) /dev/disk/by-id/に示されたWWIDを使用します。

yes

実際のIDの代わりに、マルチパスデバイスのエイリアスとして、ユーザフレンドリな名前を自動生成します。

failback (フェールバック)

エラーになったパスの回復を監視するかどうか指定し、パスサービス回復後のグループのフェールバックのタイミングを示します。

エラーになったパスは、回復すると、この設定に基づいてマルチパス対応パスのリストに戻されます。multipathは、優先度グループを評価し、プライマリパスの優先度がセカンダリパスのそれを超えると、アクティブな優先度グループを変更します。

説明

manual

デフォルト。エラーになったパスの回復は監視されません。管理者がmultipathコマンドを実行して、有効なパスと優先度グループを更新します。

followover

パスグループの最初のパスがアクティブになるときにのみ自動フェールバックを実行します。これにより、別のノードがフェールオーバーを要求したときに、ノードが自動的にフェールバックされないようにします。

immediate

パスが回復したら、ただちにパスを有効にします。

N

パスが回復したら、N秒後にパスを有効にします。0より大きい整数値を指定してください。

クラスタ環境内のマルチパスに対するフェールバックの設定は、マルチパスのフェールオーバーのピンポンを避けるため、manualにすることを推奨します。

failback "manual"
重要
重要: 検証

フェールバックの設定については、ストレージシステムのベンダに確認するようにしてください。ストレージシステムが異なれば、必要な設定も異なります。

no_path_retry

パスの障害時に使用する動作を指定します。

説明

N

multipathコマンドで待ち行列が停止し、パスがエラーになるまでの再試行数を指定します。0より大きい整数値を指定してください。

クラスタでは、「0」を指定して、待ち行列を回避し、リソースのフェールオーバーを許可することができます。

fail

即時失敗(待ち行列なし)を指定します。

queue

待ち行列を停止しません(パスが復帰するまで永久に待機します)。

クラスタでの作業では、/etc/multipath.confファイルの再試行設定を、failまたは0にすることを推奨します。これにより、ストレージへの接続が失われた場合に、リソースのフェールオーバーが起こります。そうしないと、メッセージの待ち行列とリソースのフェールオーバーが行えません。

no_path_retry "fail"
no_path_retry "0"
重要
重要: 検証

再試行設定については、ストレージシステムのベンダに確認するようにしてください。ストレージシステムが異なれば、必要な設定も異なります。

path_checker

パスの状態を判別します。

説明

directio

直接I/Oを持つ最初のセクタを読み込みます。DASDデバイスの場合、有用です。障害メッセージをsystemdジャーナルに記録します(第21章 「journalctl: systemdジャーナルのクエリを参照してください)。

tur

デバイスに対してSCSIテストユニットレディコマンドを発行します。これはLUNによってサポートされている場合の推奨設定です。このコマンドは、障害時に、systemdログジャーナルにメッセージを出力しません。

CUSTOM_VENDOR_VALUE

一部のSANベンダは、カスタムオプションとしてpath_checkerを提供しています。

  • cciss_tur: HP Smart Storage Arrayへのパスの状態をチェックします。

  • emc_clariion: EMC ClariionのEVPDページ0xC0をクエリしてパスの状態を判別します。

  • hp_sw: Active/StandbyファームウェアをもつHPストレージアレイのパスの状態(アップ、ダウン、またはゴースト)をチェックします。

  • rdac: LSI/Engenio RDACストレージコントローラのパスmp状態をチェックします。

path_grouping_policy

所定のコントローラがホストとなるマルチパスデバイスのパスグループ化ポリシーを指定します。

説明

フェールオーバー

(デフォルト)一度に1つのパスだけ使用されるように、優先度グループごとに1つのパスが割り当てられます。

multibus

すべての有効なパスが1つの優先度グループに含まれます。トラフィックが、グループ内のアクティブなパスすべてに渡って負荷分散されます。

group_by_prio

パス優先度値ごとに、1つの優先度グループが存在します。同じ優先度のパスは同じ優先度グループに属します。優先度は外部プログラムによって割り当てられます。

group_by_serial

パスがSCSIターゲットシリアル番号(コントローラノードのWWN)でグループ化されます。

group_by_node_name

ターゲットノード名ごとに1つの優先度グループが割り当てられます。ターゲットノード名は/sys/class/fc_transport/target*/node_nameにフェッチされます。

path_selector

負荷分散に使用するパスセレクタアルゴリズムを指定します。

説明

round-robin 0

優先度グループ内のすべてのアクティブパスに渡るトラフィックの分散に使用される負荷分散アルゴリズム。

queue-length 0

least-pendingオプションと同様に、パス上で実行中のI/Oの数に基づく、動的負荷分散装置。

service-time 0

(デフォルト)遅延に従って、パス上のI/Oを調整するサービス時間に基づく負荷分散装置。

pg_timeout

パスグループのタイムアウト処理を指定します。値を指定することはできません。内部のデフォルトが設定されています。

polling_interval

1つのパスチェックサイクルの終了から次回のパスチェックサイクルの開始までの時間を、秒単位で指定します。

0より大きい整数値を指定してください。デフォルト値は5です。polling_intervalの設定については、ストレージシステムのベンダに確認するようにしてください。ストレージシステムが異なれば、必要な設定も異なります。

rr_min_io_rq

現在のパスグループ内の次のパスに切り替える前に、リクエストベースのデバイス-マッパー-マルチパスを使用して、あるパスへルートするI/Oリクエストの回数を指定します。

0より大きい整数値を指定してください。デフォルト値は「1」です。

rr_min_io_rq "1"
rr_weight

パスの重み付けの方法を指定します。

説明

uniform

(デフォルト)すべてのパスが同じラウンドロビン方式の重み付けを持ちます。

priorities

各パスの重み付けは、パスの優先度にrr_min_io_rq設定値を掛け合わせて決定します。

uid_attribute

固有のパス識別子を提供するudev属性。デフォルト値はID_SERIALです。

18.10.2.2 ラウンドロビン式負荷分散の設定

すべてのパスがアクティブです。一定の秒数または一定数のI/Oトランザクションの後で、シーケンスの次のオープンパスに移動するように、I/Oを設定します。

18.10.2.3 単一パスフェールオーバーの設定

優先度が最も高い(最も低い値の)単一パスがトランザクションに対してアクティブになります。他のパスは、フェールオーバーに使用できますが、フェールオーバーの発生までは使用されません。

18.10.2.4 ラウンドロビン式負荷分散用I/Oパスのグループ化

同じ優先度をもつ複数のパスがアクティブグループを形成します。そのグループのすべてのパスがエラーになると、デバイスが優先度の次に高いグループにフェールオーバーします。グループのすべてのパスが、ラウンドロビン方式の負荷分散で、トラフィックロードを共有します。

18.10.3 ターゲットパスグループの報告

SCSIターゲットポートグループの報告(sg_rtpg(8))コマンドを使用します。詳細については、sg_rtpg(8)のマニュアルページを参照してください。

18.11 ルートデバイスのマルチパスI/Oの設定

SUSE Linux Enterprise Serverでは、DM-MPIO (デバイスマッパーマルチパスI/O)が使用可能であり、/boot/rootに対してサポートされています。また、YaSTインストーラ内のYaSTパーティショナは、インストール中のマルチパスの有効化をサポートします。

18.11.1 インストール時にマルチパスI/Oを有効にする

オペレーティングシステムをマルチパスデバイスにインストールするには、マルチパスソフトウェアがインストール時に実行されている必要があります。multipathdデーモンは、システムのインストール時に自動的にアクティブになりません。このデーモンは、YaSTパーティショナのマルチパスの設定オプションを使用することによって起動できます。

18.11.1.1 アクティブ/アクティブマルチパスストレージLUNでインストール時にマルチパスI/Oを有効にする

  1. インストール時に推奨されたパーティション分割画面でエキスパートパーティショナを選択します。

  2. ハードディスクメインアイコンを選択し、設定ボタンをクリックし、最後に、マルチパスの設定を選択します。

  3. multipathを起動します。

    YaSTがディスクの再スキャンを開始し、利用可能なマルチパスデバイスを表示します(/dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65など)。これが、以降の処理すべての対象デバイスになります。

  4. 次へをクリックして、インストールを続行します。

18.11.1.2 アクティブ/パッシブマルチパスストレージLUNでインストール時にマルチパスI/Oを有効にする

multipathdデーモンは、システムのインストール時に自動的にアクティブになりません。このデーモンは、YaSTパーティショナのマルチパスの設定オプションを使用することによって起動できます。

アクティブ/パッシブマルチパスストレージLUNに対するインストール時にマルチパスI/Oを有効にするには:

  1. インストール時に推奨されたパーティション分割画面でエキスパートパーティショナを選択します。

  2. ハードディスクメインアイコンを選択し、設定ボタンをクリックし、最後に、マルチパスの設定を選択します。

  3. multipathを起動します。

    YaSTがディスクの再スキャンを開始し、利用可能なマルチパスデバイスを表示します(/dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65など)。これが、以降の処理すべての対象デバイスになります。デバイスのパスとUUIDを書き留めてください。後で必要になります。

  4. 次へをクリックして、インストールを続行します。

  5. すべての設定が完了し、インストールが終了すると、YaSTは、ブートローダ情報の書き込みを開始し、システム再起動のカウントダウンを表示します。中止をクリックしてカウンタを中止し、CtrlAltF5を押してコンソールにアクセスします。

  6. コンソールを使用して、/boot/grub/device.mapファイルのhd0エントリにパッシブパスが入力されているかどうか判別します。

    これは、インストールではアクティブパスとパッシブパスが区別されないので必要です。

    1. 次のように入力して、ルートデバイスを/mntにマウントします。

      > sudo mount /dev/disk/by-id/UUID;_part2 /mnt

      例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。

      > sudo mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt
    2. 次のように入力して、ブートデバイスを/mnt/bootにマウントします。

      > sudo mount /dev/disk/by-id/UUID_part1 /mnt/boot

      例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。

      > sudo mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    3. /mnt/boot/grub/device.mapファイルでhd0エントリがパッシブパスをポイントしているかどうか判別し、次のいずれかを実行します。

      • アクティブパス: 操作は必要ありません。残りの手順をすべてスキップし、CtrlAltF7を押してYaSTグラフィック環境に戻り、インストールを続行します。

      • パッシブパス: 設定を変更し、ブートローダを再インストールする必要があります。

  7. hd0エントリがパッシブパスをポイントする場合は、設定を変更し、ブートローダを再インストールします。

    1. コンソールプロンプトで、次のコマンドを入力します。

                mount -o bind /dev /mnt/dev
                mount -o bind /sys /mnt/sys
                mount -o bind /proc /mnt/proc
                chroot /mnt
    2. コンソールで、multipath -llを実行し、その出力をチェックして、アクティブパスを見つけます。

      パッシブパスにはghostフラグが付いています。

    3. /boot/grub/device.mapファイルでhd0エントリをアクティブパスに変更し、変更内容を保存し、ファイルを閉じます。

    4. 次のコマンドを入力して、ブートローダを再インストールします。

      grub-install /dev/disk/by-id/UUID_part1 /mnt/boot

      例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。

      grub-install /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    5. 次のコマンドを入力します。

      exit
      umount /mnt/*
      umount /mnt
  8. CtrlAltF7を押して、YaSTグラフィック環境に戻ります。

  9. OKをクリックして、インストールを再起動します。

18.11.2 既存ルートデバイス用マルチパスI/Oの有効化

  1. Linuxをインストールし、1つだけパスをアクティブにします。このパスは、パーティショナでby-idシンボリックリンクがリストされるパスがお勧めです。

  2. インストール時に使用した/disk/disk/by-idパスを使用してデバイスをマウントします。

  3. /etc/dracut.conf.d/10-mp.confを開くか作成し、次の行を追加してください(行頭の空白に注意):

    force_drivers+=" dm-multipath"
  4. IBM Zの場合、dracutの実行前に、/etc/zipl.confファイルを編集してzipl.conf内のby-path情報を、/etc/fstabで使用されたby-id情報に変更します。

  5. dracut -fを実行して、initrdイメージを更新します。

  6. IBM Zの場合は、dracutの実行後、ziplを実行します。

  7. サーバを再起動します。

18.11.3 ルートデバイスのマルチパスI/Oの無効化

multipath=offをカーネルコマンドラインに追加します。この変更はYaSTのブートローダモジュールで行うことができます。ブートローダのインストール › Kernel Parameters (カーネルパラメータ)の順に開き、両方のコマンドラインにパラメータを追加します。

これは、ルートデバイスだけに影響します。他のすべてのデバイスは影響されません。

18.12 既存ソフトウェアRAID用マルチパスI/Oの設定

理想的には、デバイスのマルチパス処理を設定してから、それらのデバイスをソフトウェアRAIDデバイスのコンポーネントとして使用してください。ソフトウェアRAIDデバイスの作成後にマルチパス処理を追加した場合は、再起動時にmultipathサービスの後でDM-MPIOサービスが開始することがあります。その場合は、マルチパス処理がRAIDに使用できないように見えます。本項の手順を使用すると、すでに存在しているソフトウェアRAIDに対してマルチパス処理を実行できます。

たとえば、次のような場合は、ソフトウェアRAID内のデバイスにマルチパス処理を設定する必要があることがあります。

  • 新規インストールまたはアップグレード時にパーティショニング設定の一部として、新しいソフトウェアRAIDを作成する場合

  • マルチパス処理用に設定しなかったデバイスをメンバーデバイスまたはスペアとしてソフトウェアRAIDで使用する場合

  • 新しいHBAアダプタをサーバに追加するか、またはSAN内でストレージサブシステムを拡張することで、システムを大きくする場合

注記
注記: 前提

以降の説明では、ソフトウェアRAIDデバイスを/dev/mapper/mpath0(カーネルによって認識されるデバイス名)と想定しています。/etc/multipath.confファイルで、ユーザフレンドリ名を有効にしている(18.9項 「ユーザフレンドリ名または別名の設定」に記載)ことを想定しています。

ソフトウェアRAIDのデバイス名の指定は、必ず変更してください。

  1. 端末コンソールを開きます。

    特に指示のない限り、この端末を使用して、以降のステップでコマンドを入力します。

  2. ソフトウェアRAIDデバイスが現在マウントされているか、または実行中の場合、デバイスごとに次のコマンドを入力して、デバイスをアンマウントし、停止します。

    > sudo umount /dev/mapper/mpath0
    > sudo mdadm --misc --stop /dev/mapper/mpath0
  3. 次のように入力して、mdサービスを停止します。

    > sudo systemctl stop mdmonitor
  4. 次のコマンドを入力することにより、multipathdデーモンを起動します。

    > systemctl start multipathd
  5. マルチパス処理サービスの開始後、ソフトウェアRAIDのコンポーネントデバイスが/dev/disk/by-idディレクトリにリストされているかどうか確認します。次のいずれかの操作を行います。

    • デバイスがリストされている: デバイス名に、デバイスマッパーマルチパスのデバイス名(/dev/dm-1など)へのシンボリックリンクがあるはずです。

    • デバイスがリストされていない: 次のように入力して、デバイスをフラッシュし、再検出することで、マルチパスサービスにデバイスを認識させます。

      > sudo multipath -F
      > sudo multipath -v0

      これで、デバイスが/dev/disk/by-id内にリストされ、デバイスマッパーマルチパスのデバイス名へのシンボリックリンクを持ちます。例:

      lrwxrwxrwx 1 root root 10 2011-01-06 11:42 dm-uuid-mpath-36006016088d014007e0d0d2213ecdf11 -> ../../dm-1
  6. 次のように入力して、mdmonitorサービスとRAIDデバイスを再起動します。

    > sudo systemctl start mdmonitor
  7. 次のように入力して、ソフトウェアRAIDの状態をチェックします。

    > sudo mdadm --detail /dev/mapper/mpath0

    RAIDのコンポーネントデバイスは、そのデバイスマッパーマルチパスのデバイス名(/dev/disk/by-idディレクトリにデバイスのシンボリックリンクとしてリストされている)と一致する必要があります。

  8. ルート(/)デバイス、またはそのいずれかの要素(/var/etc/logなど)がSAN上にあり、ブートするためにマルチパスが必要な場合、initrdを再構築します。

    > dracut -f --add-multipath
  9. サーバを再起動して、変更内容を適用します。

  10. RAIDステータスをチェックして、ソフトウェアRAIDアレイが、マルチパスデバイスの上に正しく示されることを確認します。以下を入力してください。

    > sudo mdadm --detail /dev/mapper/mpath0

    例:

    メジャーマイナーRaidDevice状態の数
    0 253 0 0アクティブ同期/dev/dm-0
    1 253 1 1アクティブ同期/dev/dm-1
    2 253 2 2アクティブ同期/dev/dm-2
注記
注記: マルチパスデバイスでのmdadmの使用

mdadmツールでは、デバイスのノードパスではなく、IDでデバイスにアクセスする必要があります。詳細については、18.4.3項 「マルチパスデバイスのMD RAID」を参照してください。

18.13 マルチパスデバイスでのLVM2の使用

マルチパス使用時に、リソースへのすべてのパスがデバイスツリーのデバイスとして存在します。デフォルトでは、LVMは、デバイスツリーの任意のデバイス上にマルチパスデバイスがあるかどうかを確認します。LVMがマルチパスデバイスを検出すると、そのデバイスはマルチパスコンポーネントであるとみなされ、(基盤となっている)デバイスは無視されます。ほとんどの場合はこの動作で問題ありませんが、/etc/lvm/lvm.confで設定を変更できます。multipath_component_detectionを1に設定すると、LVMはマルチパスコンポーネントデバイスをスキャンします。lvm.confのデフォルトのエントリは次のとおりです。

    # By default, LVM2 will ignore devices used as component paths
    # of device-mapper multipath devices.
    # 1 enables; 0 disables.
    multipath_component_detection = 1

18.14 ベストプラクティス

18.14.1 新規デバイスのスキャン(再起動なし)

ご使用のシステムがマルチパス処理用に設定されており、後からSANにストレージを追加する必要がある場合は、rescan-scsi-bus.shスクリプトを使用して新しいデバイスをスキャンすることができます。デフォルトでは、このスクリプトは典型的なLUN範囲ですべてのHBAをスキャンします。このコマンドの一般的な構文は、次のようになります。

> sudo rescan-scsi-bus.sh [options] [host [host ...]]

ほとんどのストレージサブシステムでは、このスクリプトはオプションを指定しなくても正常に実行されます。ただし、特殊な場合は、次のオプションを1つ以上使用する必要があります。詳細については、rescan-scsi-bus.sh --helpを実行してください。

警告
警告: EMC PowerPath環境

EMC PowerPath環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.shユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。

次のプロシージャを使用して、システムを再起動せずに、デバイスをスキャンして、マルチパス処理に使用できるようにします。

  1. ストレージサブシステムで、ベンダのツールを使用してデバイスを割り当て、そのアクセス制御設定を更新して、Linuxシステムが新しいストレージをアクセスできるようにします。詳細については、ベンダのマニュアルを参照してください。

  2. すべてのターゲットをスキャンしてホストの有無を調べ、LinuxカーネルのSCSIサブシステムのミドルレイヤに新しいデバイスを認識させます。端末コンソールのプロンプトで、次のように入力します。

    > sudo rescan-scsi-bus.sh

    セットアップによっては、オプションのパラメータを指定してrescan-scsi-bus.shを実行しなければならない場合があります。詳細については、rescan-scsi-bus.sh --helpを参照してください。

  3. systemdジャーナルでスキャンの進行状況を確認します(詳細については、第21章 「journalctl: systemdジャーナルのクエリを参照してください)。端末コンソールのプロンプトで、次のように入力します。

    > sudo journalctl -r

    このコマンドは、ログの最後の行を表示します。例:

    > sudo journalctl -r
    Feb 14 01:03 kernel: SCSI device sde: 81920000
    Feb 14 01:03 kernel: SCSI device sdf: 81920000
    Feb 14 01:03 multipathd: sde: path checker registered
    Feb 14 01:03 multipathd: sdf: path checker registered
    Feb 14 01:03 multipathd: mpath4: event checker started
    Feb 14 01:03 multipathd: mpath5: event checker started
    Feb 14 01:03:multipathd: mpath4: remaining active paths: 1
    Feb 14 01:03 multipathd: mpath5: remaining active paths: 1
    [...]
  4. 前の各手順を繰り返し、新しいデバイスに接続しているLinuxシステム上の他のHBAアダプタを介して、パスを追加します。

  5. multipathコマンドを実行して、DM-MPIO設定用のデバイスを認識します。端末コンソールのプロンプトで、次のように入力します。

    > sudo multipath

    これで、新しいデバイスをマルチパス処理用に設定できます。

18.14.2 パーティショニングされた新規デバイスのスキャン(再起動なし)

本項の例を使用して、新たに追加したマルチパスLUNを再起動なしで検出します。

警告
警告: EMC PowerPath環境

EMC PowerPath環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.shユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。

  1. 端末コンソールを開きます。

  2. すべてのターゲットをスキャンしてホストの有無を調べ、LinuxカーネルのSCSIサブシステムのミドルレイヤに新しいデバイスを認識させます。端末コンソールのプロンプトで、次のように入力します。

    > rescan-scsi-bus.sh

    セットアップによっては、オプションのパラメータを指定してrescan-scsi-bus.shを実行しなければならない場合があります。詳細については、rescan-scsi-bus.sh --helpを参照してください。

  3. 次のように入力して、デバイスが認識されていること(リンクに新しいタイムスタンプが付いているかどうかなど)を確認します。

    > ls -lrt /dev/dm-*

    次のように入力して、/dev/disk/by-id内のデバイスを確認することもできます。

    > ls -l /dev/disk/by-id/
  4. 次のように入力して、新しいデバイスがログに表示されることを確認します。

    > sudo journalctl -r
  5. テキストエディタで、デバイスの新しいエイリアス定義を/etc/multipath.confファイルに追加します(data_vol3など)。

    たとえば、UUIDが36006016088d014006e98a7a94a85db11であれば、次の変更を行います。

    defaults {
         user_friendly_names   yes
      }
    multipaths {
         multipath {
              wwid    36006016088d014006e98a7a94a85db11
              alias  data_vol3
              }
      }
  6. 次の入力で、デバイスのパーティションテーブルを作成します。

    > fdisk /dev/disk/by-id/dm-uuid-mpath-<UUID>

    UUIDをデバイスのWWID(36006016088d014006e98a7a94a85db11など)で置き換えます。

  7. 次のように入力して、udevをトリガします。

    > sudo echo 'add' > /sys/block/DM_DEVICE/uevent

    たとえば、dm-8上のパーティションに対して、デバイスマッパーデバイスを生成するには、次のように入力します。

    > sudo echo 'add' > /sys/block/dm-8/uevent
  8. デバイス/dev/disk/by-id/dm-uuid-mpath-UUID_partN上にファイルシステムを作成します。選択するファイルシステムに応じて、このためにmkfs.btrfs mkfs.ext3mkfs.ext4、またはmkfs.xfsのいずれかのコマンドを使用できます。詳細については、それぞれのマニュアルページを参照してください。UUID_partNを、実際のUUIDおよびパーティション番号(36006016088d014006e98a7a94a85db11_part1など)で置き換えます。

  9. 次のコマンドを入力して、新しいパーティションのラベルを作成します。

    > sudo tune2fs -L LABELNAME /dev/disk/by-id/dm-uuid-UUID_partN

    UUID_partNを、実際のUUIDおよびパーティション番号(36006016088d014006e98a7a94a85db11_part1など)で置き換えます。LABELNAMEは好みのラベルに代えてください。

  10. 次の入力で、DM-MPIOを再設定して、エイリアスを読み込ませます。

    > sudo multipathd -k'reconfigure'
  11. 次の入力で、デバイスがmultipathdによって認識されていることを確認します。

    > sudo multipath -ll
  12. テキストエディタで、/etc/fstabファイルにマウントエントリを追加します。

    この時点では、前の手順で作成したエイリアスは、まだ/dev/disk/by-labelディレクトリにあります。マウントエントリを/dev/dm-9パスに追加した後、次回の再起動の前に、マウントエントリを次のように変更します。

    LABEL=LABELNAME
  13. マウントポイントとして使用するディレクトリを作成し、デバイスをマウントします。

18.14.3 マルチパスI/Oステータスの表示

マルチパスI/Oのステータスをクエリすると、マルチパスマップの現在のステータスが出力されます。

multipath -lオプションを使用すると、パスチェッカが最後に実行された時点での現行パスステータスが表示されます。ただし、パスチェッカは実行されません。

multipath -llオプションを使用すると、パスチェッカが実行され、パス情報が更新され、最後に、現在のステータス情報が表示されます。このコマンドは、常にパスステータスの最新情報を表示します。

> sudo multipath -ll
3600601607cf30e00184589a37a31d911
[size=127 GB][features="0"][hwhandler="1 emc"]

\_ round-robin 0 [active][first]
  \_ 1:0:1:2 sdav 66:240  [ready ][active]
  \_ 0:0:1:2 sdr  65:16   [ready ][active]

\_ round-robin 0 [enabled]
  \_ 1:0:0:2 sdag 66:0    [ready ][active]
  \_ 0:0:0:2 sdc  8:32    [ready ][active]

デバイスごとに、デバイスのID、サイズ、機能、およびハードウェアハンドラが表示されます。

デバイスへのパスは、自動的に、デバイス検出時に優先度グループとしてグループ化されます。一度に1つの優先度グループだけがアクティブになります。アクティブ/アクティブ構成の場合、すべてのパスが同じグループに属します。アクティブ/パッシブ構成の場合、パッシブパスは別個の優先度グループに属します。

グループごとに、次の情報が表示されます。

  • ラウンドロビン方式など、グループ内でのI/O負荷の分散に使用されるスケジューリングポリシー

  • グループがアクティブか、無効か、または有効か

  • 最初の(優先度の最も高い)グループかどうか

  • グループ内に含まれるパス

パスごとに、次の情報が表示されます。

  • HOST:BUS:TARGET:LUNとしての物理アドレス(1:0:1:2など)

  • デバイスノード 名(sdaなど)

  • メジャー/マイナー番号

  • デバイスのステータス

注記
注記: マルチパスセットアップでiostatを使用する

マルチパス環境では、iostatコマンドによって予期しない結果が発生する可能性があります。デフォルトでは、iostatは、I/Oのないすべてのブロックデバイスをフィルタして排除します。iostatすべてのデバイスを表示するには、次のコマンドを使用します。

iostat -p ALL

18.14.4 エラーになった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. 端末コンソールを開きます。

  2. 次のように入力して、デバイスI/Oに関して、フェールオーバーの代わりに待ち行列処理をアクティブにします。

    > sudo dmsetup message DEVICE_ID 0 queue_if_no_path

    DEVICE_IDを実際のデバイスのIDに置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。

    たとえば、次のように入力します。

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

    > sudo dmsetup message DEVICE_ID 0 fail_if_no_path

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

    DEVICE_IDを実際のデバイスのIDに置き換えます。例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。

    > sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path

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

  1. 端末コンソールを開きます。

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

  3. defaultsセクションとその閉じ括弧を非コメント化した後、次のようにdefault_features設定を追加します。

    defaults {
      default_features "1 queue_if_no_path"
    }
  4. /etc/multipath.confファイルの変更後、dracut -fを実行してシステム上にinitrdを再作成してから、再起動して変更内容を有効にします。

  5. デバイスI/Oのフェールオーバーに戻る準備ができたら、次のように入力します。

    > sudo dmsetup message MAPNAME 0 fail_if_no_path

    MAPNAMEを該当デバイスのマップされたエイリアス名またはデバイスIDに置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。

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

18.14.5 停止したI/Oの解決

すべてパスが同時にエラーとなり、I/Oが待ち行列に入って停止している場合は、次のプロシージャを実行します。

  1. 端末コンソールのプロンプトで、次のコマンドを入力します。

    > sudo dmsetup message MAPNAME 0 fail_if_no_path

    MAPNAMEをデバイスの正しいデバイスIDまたはマップされたエイリアス名で置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。

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

  2. 次のコマンドを入力して、待ち行列を再びアクティブにします。

    > sudo dmsetup message MAPNAME 0 queue_if_no_path

18.14.6 IBM Zデバイスのデフォルト設定

IBM Zデバイスのマルチパス処理に関するテストを実施した結果、dev_loss_tmoパラメータをinfinity (2147483647)に、fast_io_fail_tmoパラメータを 5秒に設定する必要があることわかりました。IBM Zデバイスを使用している場合は、/etc/multipath.confファイルを変更して、値を次のように指定します。

defaults {
       dev_loss_tmo 2147483647
       fast_io_fail_tmo 5
}

dev_loss_tmoパラメータは、マルチパスリンクに不良のマーキングがされるまでの秒数を設定します。パスに障害が発生したら、そのパスの現在のI/Oが失敗します。デフォルト値は使用するデバイスドライバによって異なります。ドライバの内部タイムアウトを使用するには、値をゼロ(0)に設定します。「infinity」(2147483647)に設定することもできます。これにより、最大値が2147483647秒(68年)に設定されます。

fast_io_fail_tmoパラメータは、リンク障害を検出した場合に、I/Oが失敗するまでの待機時間を設定します。ドライバに到達したI/Oは失敗します。ブロックしたキューにI/Oがある場合は、I/Oはdev_loss_tmoで指定された時間が経過するまでは失敗せず、キューのブロックが解除されます。

/etc/multipath.confファイルを変更した場合、その変更内容は、マルチパスマップを更新するまで、またはmultipathdデーモンを再起動(systemctl restart multipathd)するまで適用されません。

18.14.7 NetAppデバイスでのマルチパスの使用

NetAppデバイスでマルチパスを使用する場合は、/etc/multipath.confファイルで次の設定を行うことを推奨します。

  • NetAppデバイスに対してグローバルに、次のパラメータにデフォルト値を設定する。

    max_fds max
    queue_without_daemon no
  • ハードウェアテーブル内で、NetAppデバイスに対する次のパラメータにデフォルト値を設定する。

    dev_loss_tmo infinity
    fast_io_fail_tmo 5
    features "3 queue_if_no_path pg_init_retries 50"

18.14.8 マルチパスデバイスでの--noflushの使用

マルチパスデバイス上で実行する場合は、オプション--noflushを必ず使用する必要があります。

たとえば、テーブルのリロードを行うスクリプトでは、マルチパストポロジ情報が必要なので、再開時に--noflushオプションを使用して、残っているI/Oがフラッシュされないようにします。

load
resume --noflush

18.14.9 ルートデバイスがマルチパスの場合のSANタイムアウト設定

マルチパスデバイスにルート(/)があるシステムは、すべてのパスに障害が発生し、それらのパスがシステムから削除されると、停止することがあります。これは、ストレージサブシステム(ファイバチャネルストレージアレイなど)からdev_loss_tmoタイムアウトを受信するからです。

システムデバイスがマルチパスを使用して設定され、マルチパスのno_path_retry設定がアクティブな場合は、ストレージサブシステムのdev_loss_tmo設定を適宜変更して、すべてのパスがダウンするシナリオでデバイスが削除されないようにする必要があります。dev_loss_tmo値をマルチパスのno_path_retry設定以上にすることを強くお勧めします。

ストレージサブシステムのdev_los_tmoの推奨設定は、次のとおりです。

<dev_loss_tmo> = <no_path_retry> * <polling_interval>

マルチパス値については、次の定義が適用されます。

  • no_path_retryは、パスが失われたとみなされて入出力のキューイングが停止されるまでのマルチパス入出力の再試行数です。

  • polling_intervalは、パッチチェックの間隔(秒単位)です。

これらの各マルチパス値は、/etc/multipath.conf環境設定ファイルから設定する必要があります。詳細については、「18.6項 「マルチパス設定」」を参照してください。

18.15 MPIOのトラブルシューティング

本項では、MPIOに関するいくつかの既知の問題と、考えられる解決手段について説明します。

18.15.1 マルチパスデバイスへのGRUB2のインストール

Btrfsを使用したレガシBIOSシステムでは、許可がないためgrub2-installが失敗する可能性があります。これを修正するには、/boot/grub2/SUBDIR/サブボリュームが読み書き(rw)モードでマウントされるようにしてください。SUBDIRx86_64-efiまたはi386-pcにできます。

18.15.2 マルチパスが有効な場合、ブート時にシステムが終了して緊急シェルが起動する

ブート中にシステムが終了して緊急シェルが起動し、次のようなメッセージが表示されます。

[  OK  ] Listening on multipathd control socket.
         Starting Device-Mapper Multipath Device Controller...
[  OK  ] Listening on Device-mapper event daemon FIFOs.
         Starting Device-mapper event daemon...
         Expecting device dev-disk-by\x2duuid-34be48b2\x2dc21...32dd9.device...
         Expecting device dev-sda2.device...
[  OK  ] Listening on udev Kernel Socket.
[  OK  ] Listening on udev Control Socket.
         Starting udev Coldplug all Devices...
         Expecting device dev-disk-by\x2duuid-1172afe0\x2d63c...5d0a7.device...
         Expecting device dev-disk-by\x2duuid-c4a3d1de\x2d4dc...ef77d.device...
[  OK  ] Started Create list of required static device nodes ...current kernel.
         Starting Create static device nodes in /dev...
[  OK  ] Started Collect Read-Ahead Data.
[  OK  ] Started Device-mapper event daemon.
[  OK  ] Started udev Coldplug all Devices.
         Starting udev Wait for Complete Device Initialization...
[  OK  ] Started Replay Read-Ahead Data.
         Starting Load Kernel Modules...
         Starting Remount Root and Kernel File Systems...
[  OK  ] Started Create static devices
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)

...

Timed out waiting for device dev-disk-by\x2duuid-c4a...cfef77d.device.
[DEPEND] Dependency failed for /opt.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Postfix Mail Transport Agent.
Welcome to emergency shell
Give root password for maintenance
(or press Control-D to continue):

このステージでは、initrd環境から一時的にdracut緊急シェルを使用しています。以下で説明される設定の変更を永続的にするには、インストールされたシステムの環境で実行する必要があります。

  1. システムのルート(/)ファイルシステムを識別します。/proc/cmdlineのコンテンツを調べて、root=パラメータを探します。

  2. ルートファイルシステムがマウントされているかどうかを確認します。

    > sudo systemctl status sysroot.mount
    ヒント
    ヒント

    dracutはデフォルトで/sysrootの下にルートファイルシステムをマウントします。

    これからは、/sysrootの下にルートファイルシステムがマウントされていることを前提とします。

  3. /sysrootの下にシステムが必要とするファイルシステムをマウントし、chrootを実行してから、すべてのファイルシステムをマウントします。例:

    > sudo for x in proc sys dev run; do mount --bind /$x /sysroot/$x; done
    > sudo chroot /sysroot /bin/bash
    > sudo mount -a

    詳細については、48.5.2.3項 「インストール済みシステムへのアクセス」を参照してください。

  4. 次の手順で提示されているように、マルチパスまたはdracut設定に変更を行います。変更を含めるようにinitrdを再構築してください。

  5. exitコマンドを入力してchroot環境を終了し、緊急シェルを終了して、CtrlDを押してサーバを再起動します。

手順 18.1: 緊急シェル: ファイルシステムのブラックリスト化

この修正は、ルートファイルシステムがマルチパス上にないにもかかわらずマルチパスが有効になっている場合に必要です。このようなセットアップの場合、マルチパスはブラックリスト化されていないすべてのデバイスに対してパスを設定しようとします。ルートファイルシステムがあるデバイスは既にマウントされているためマルチパスではアクセスできず、これが失敗の原因になります。この問題を修復するには、/etc/multipath.confでルートデバイスをブラックリスト化して、マルチパスを正しく設定します。

  1. 緊急シェルでmultipath -v2を実行し、ルートファイルシステムのデバイスを特定します。この結果、次のような出力が表示されます。

    # multipath -v2
    Dec 18 10:10:03 | 3600508b1001030343841423043300400: ignoring map

    | :の間の文字列が、ブラックリスト化に必要なWWIDです。

  2. /etc/multipath.confを開いて以下を追加します。

    blacklist {
      wwid "WWID"
    }

    WWIDは、前の手順で取得したIDに置き換えます。詳細については、18.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。

  3. 次のコマンドを使用してinitrdを再構築します。

    > dracut -f --add-multipath
手順 18.2: 緊急シェル: initrdの再構築

この修正は、[マルチパスの状態](有効または無効)がinitrdとシステムの間で異なる場合に必要です。修正するには、initrdを再構築します。

  • システムでマルチパスが「有効」になっている場合、次のコマンドを使用し、マルチパスサポートを指定してinitrdを再構築します。

    > dracut --force --add multipath

    システムでマルチパスが「無効」になっている場合、次のコマンドを使用し、マルチパスサポートを指定してinitrdを再構築します。

    > dracut --force -o multipath
手順 18.3: 緊急シェル: initrdの再構築

この修正は、initrdにNetwork Attached Storageアクセス用のドライバが含まれていない場合に必要です。たとえば、マルチパスを設定せずにシステムをインストールした場合や、各ハードウェアを追加または交換する場合などが該当します。

  1. 必要なドライバをファイル/etc/dracut.conf.d/01-dist.conf内の変数force_driversに追加します。たとえば、システムにhpsaドライバでアクセスされるRAIDコントローラがあり、qla23xxドライバでアクセスされるQlogicコントローラにマルチパスデバイスが接続されている場合は、次のようなエントリになります。

    force_drivers+="hpsa qla23xx"
  2. 次のコマンドを使用してinitrdを再構築します。

    > dracut -f --add-multipath
  3. ネットワークストレージの接続に失敗した場合にシステムが緊急モードでブートしないようにするため、/etc/fstabの各エントリにマウントオプション_netdevを追加することをお勧めします。

18.15.3 マルチパス0.4.9以降への更新後に、個別デバイスのprio設定が失敗する

バージョン 0.4.9以降のマルチパスツールでは、/etc/multipath.confファイルのdefaults{}セクションまたはdevices{}セクションのprio設定を使用します。キーワードprioが、multipath{)セクションの個別のmultipaths定義に指定された場合は、暗黙のうちに無視されます。

マルチパスツール0.4.8では、multipaths{)セクションの個別のmultipath定義内のprio設定で、defaults{}またはdevices{}セクションのprio設定を上書きすることができました。

18.15.4 multipath-tools-0.4.9以降への更新後に、引数を伴うprio設定が失敗する

multipath-tools-0.4.8からmultipath-tools-0.4.9に更新すると、引数を必要とするPrioritizerの場合、/etc/multipath.confファイル内のprio設定が壊れます。multipath-tools-0.4.9では、Prioritizerの指定にはprioキーワードが使われ、引数を必要とするPrioritizerの指定には、prio_argsキーワードが使われます。これまでは、Prioritizerとその引数はいずれも、同じprio行で指定していました。

たとえば、multipath-tools-0.4.8では、次の行を使用してPrioritizerとその引数を同じ行で指定していました。

prio "weightedpath hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

multipath-tools-0.4.9以降への更新後は、このコマンドを使用するとエラーになります。メッセージの例を以下に示します。

<Month day hh:mm:ss> | Prioritizer 'weightedpath hbtl [1,3]:.:.+:.+ 260
[0,2]:.:.+:.+ 20' not found in /lib64/multipath

この問題を解決するには、テキストエディタで、/etc/multipath.confファイル内のprio行を変更します。2つの行を作成して、prio行にPrioritizerを指定し、その下のprio_args行にPrioritizerの引数を指定します。

prio "weightedpath"
prio_args "hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

sudo systemctl restart multipathd を実行してmultipathdデーモンを再起動し、変更を有効にします。

18.15.5 技術情報ドキュメント

SUSE Linux Enterprise ServerのマルチパスI/Oの問題のトラブルシューティングについては、SUSEナレッジベースにある、次のTID (技術情報ドキュメント)を参照してください。