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を設定する必要があります。
pacemaker
とsbd
などフェンシングに共有ストレージを使用するクラスタリングソフトウェアと共にマルチパス処理を使用する場合、特別な注意が必要です。詳細については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デバイスにも使用できます。
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
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.conf
のverbosity
オプションを使用すると、multipath
とmultipathd
の両方でデフォルトの詳細レベルを変更できます。
18.4.6 mpathpersistユーティリティ #
mpathpersist
ユーティリティを使用して、デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理します。永続的な予約を行うと、SCSIの論理ユニットへのアクセスが特定のSCSIイニシエータに制限されます。マルチパス設定では、指定ボリュームですべてのI_T関連付け(パス)に同じ予約キーを使用することが重要です。そのようにしないと、あるパスで予約を作成すると別のパスで障害が発生する場合があります。
このユーティリティを/etc/multipath.conf
ファイルのreservation_key
属性と共に使用して、SCSIデバイスの永続的な予約を設定します。このオプションが設定されている場合(のみ)、multipathd
デーモンは、新しく検出したパスまたは復帰したパスについて永続的な予約をチェックします。
この属性は、multipath.conf
のdefaults
セクションまたはmultipaths
セクションに追加できます。例:
multipaths { multipath { wwid 3600140508dbcf02acb448188d73ec97d alias yellow reservation_key 0x123abc } }
永続的な管理に適用可能なすべてのmpathデバイスに対してreservation_key
パラメータを設定した後、multipathd reconfigure
を使用して設定を再ロードします。
reservation_key file
」の使用
特別な値であるreservation_key file
がmultipath.conf
のdefaults
セクションで使用される場合、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.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.conf
のskip_kpartx
オプションを使用して、選択したマルチパスマップでのkpartx
の起動を無効にできます。たとえば、これは仮想化ホストで有用である場合があります。
マルチパスデバイスのパーティションテーブルおよびパーティションは、YaSTまたはfdisk
やparted
のようなツールを使用して普通に操作できます。パーティションテーブルに適用する変更は、パーティション処理ツールが終了するとシステムによって記録されます。これが動作しない場合(デバイスがビジーであることが原因であることが多い)、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」によるブラックリスト化は推奨しません。デバイスノードは変わる可能性があり、デバイスを常時識別する目的では役に立たないからです。
/etc/multipath.conf
では、正規表現は一般に「無効」です。正規表現は、一般的な文字列を検索する場合にのみ有効です。ただし、マルチパスの標準設定には、すでにさまざまなデバイスとベンダーを表す正規表現が含まれています。正規表現で別の正規表現を検索することはできません。multipath -t
で表示される文字列のみを検索するようにしてください。
通常、非マルチパスデバイス(hpsa
、fd
、hd
、md
、dm
、sr
、scd
、st
、ram
、raw
、loop
など)は無視できます。たとえば、ローカルの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.conf
のdefaults
セクションでオプション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
ファイルを参照してください。
名前のタイプ |
説明 |
---|---|
WWID (デフォルト) |
シリアルWWID (Worldwide Identifier)は、グローバルに固有または非変更であることを保証されたマルチパスデバイスの識別子です。マルチパス処理で使用されるデフォルト名は、 |
ユーザフレンドリ |
|
別名 |
別名は、グローバルに固有な名前であり、管理者がマルチパスデバイスに提供します。別名は、WWIDとユーザフレンドリな 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
ファイルをシステムルートデバイスで使用し、マルチパスで検出できるようにしてください。これは、たとえば、次の手順で実行できます。/var/lib/multipath/bindings
ファイルを/etc/multipath/bindings
に移動します。この新しい場所に、/
etc/multipath.conf
のdefaults
セクションにある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クラスタにおけるマルチパスデバイスの名前」を参照してください。
ユーザフレンドリな名前を有効にするか、別名を指定する場合:
root
特権を使用して/etc/multipath.conf
ファイルをテキストエディタで開きます。(オプション)
/var/lib/multipath/bindings
ファイルの場所を変更します。代替パスは、マルチパスが代替パスを見つけることができるシステムルートデバイス上に存在する必要があります。
/var/lib/multipath/bindings
ファイルを/etc/multipath/bindings
に移動します。この新しい場所に、/
etc/multipath.conf
のdefaults
セクションにあるbindings_file
オプションを設定します。例:defaults { user_friendly_names yes bindings_file "/etc/multipath/bindings" }
(オプション、非推奨)ユーザフレンドリ名の有効にする:
defaults
セクションとその閉じ括弧を非コメント化します。user_friendly_names
オプションを非コメント化し、次に、その値をNoからYesに変更します。例:
## Use user-friendly names, instead of using WWIDs as names. defaults { user_friendly_names yes }
(オプション)
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
など)。変更内容を保存し、ファイルを閉じます。
/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つのノード上の
/etc/multipath.conf
ファイル内で、user_friendly_names
構成オプションをyes
に設定して有効にします。マルチパスは、
/var/lib/multipath/bindings
ファイルを使用して、/dev/mapper
ディレクトリ内でmpath<N>
の形式で、デバイスに永続的かつ固有の名前を割り当てます。(オプション)
bindings
ファイルに対して別の場所を指定するには、/etc/multipath.conf
ファイルのdefaults
セクションにある、bindings_file
オプションを設定します。デフォルトの場所は、
/var/lib/multipath/bindings
です。
ノード上のマルチパスデバイスをすべて設定します。
/etc/multipath.conf
ファイルを、ノードからクラスタ内の他のすべてのノードの/etc/
ディレクトリにコピーします。bindings
ファイルを、ノードから、クラスタ内の他のすべてのノード上のbindings_file
パスにコピーします。/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を置き換えます。
ポリシーオプション |
説明 |
---|---|
failover (フェールオーバー) |
(デフォルト)優先度グループごとに1つのパス |
multibus |
1つの優先度グループ内にすべてのパス |
group_by_serial |
検出されたシリアル番号ごとに1つの優先度グループ |
group_by_prio |
パス優先度値ごとに1つの優先度グループ優先度は、コールアウトプログラムで決定されます。それらのプログラムは、グローバル、コントローラごと、またはマルチパスごとのオプションとして |
group_by_node_name |
ターゲットノード名ごとに1つの優先度グループターゲットノード 名は、 |
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を有効にする #
インストール時に
画面で を選択します。multipathを起動します。
YaSTがディスクの再スキャンを開始し、利用可能なマルチパスデバイスを表示します(
/dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65
など)。これが、以降の処理すべての対象デバイスになります。
18.11.1.2 アクティブ/パッシブマルチパスストレージLUNでインストール時にマルチパスI/Oを有効にする #
multipathd
デーモンは、システムのインストール時に自動的にアクティブになりません。このデーモンは、YaSTパーティショナの オプションを使用することによって起動できます。
アクティブ/パッシブマルチパスストレージLUNに対するインストール時にマルチパスI/Oを有効にするには:
インストール時に
画面で を選択します。multipathを起動します。
YaSTがディスクの再スキャンを開始し、利用可能なマルチパスデバイスを表示します(
/dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65
など)。これが、以降の処理すべての対象デバイスになります。デバイスのパスとUUIDを書き留めてください。後で必要になります。すべての設定が完了し、インストールが終了すると、YaSTは、ブートローダ情報の書き込みを開始し、システム再起動のカウントダウンを表示します。Ctrl–Alt–F5を押してコンソールにアクセスします。
をクリックしてカウンタを中止し、コンソールを使用して、
/boot/grub/device.map
ファイルのhd0
エントリにパッシブパスが入力されているかどうか判別します。これは、インストールではアクティブパスとパッシブパスが区別されないので必要です。
次のように入力して、ルートデバイスを
/mnt
にマウントします。>
sudo
mount /dev/disk/by-id/UUID;_part2 /mnt例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。
>
sudo
mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt次のように入力して、ブートデバイスを
/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/mnt/boot/grub/device.map
ファイルでhd0
エントリがパッシブパスをポイントしているかどうか判別し、次のいずれかを実行します。アクティブパス: 操作は必要ありません。残りの手順をすべてスキップし、Ctrl–Alt–F7を押してYaSTグラフィック環境に戻り、インストールを続行します。
パッシブパス: 設定を変更し、ブートローダを再インストールする必要があります。
hd0
エントリがパッシブパスをポイントする場合は、設定を変更し、ブートローダを再インストールします。コンソールプロンプトで、次のコマンドを入力します。
mount -o bind /dev /mnt/dev mount -o bind /sys /mnt/sys mount -o bind /proc /mnt/proc chroot /mnt
コンソールで、
multipath -ll
を実行し、その出力をチェックして、アクティブパスを見つけます。パッシブパスには
ghost
フラグが付いています。/boot/grub/device.map
ファイルでhd0
エントリをアクティブパスに変更し、変更内容を保存し、ファイルを閉じます。次のコマンドを入力して、ブートローダを再インストールします。
grub-install /dev/disk/by-id/UUID_part1 /mnt/boot
例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。
grub-install /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
次のコマンドを入力します。
exit umount /mnt/* umount /mnt
Ctrl–Alt–F7を押して、YaSTグラフィック環境に戻ります。
18.11.2 既存ルートデバイス用マルチパスI/Oの有効化 #
Linuxをインストールし、1つだけパスをアクティブにします。このパスは、パーティショナで
by-id
シンボリックリンクがリストされるパスがお勧めです。インストール時に使用した
/disk/disk/by-id
パスを使用してデバイスをマウントします。/etc/dracut.conf.d/10-mp.conf
を開くか作成し、次の行を追加してください(行頭の空白に注意):force_drivers+=" dm-multipath"
IBM Zの場合、
dracut
の実行前に、/etc/zipl.conf
ファイルを編集してzipl.conf
内のby-path情報を、/etc/fstab
で使用されたby-id情報に変更します。dracut
-f
を実行して、initrd
イメージを更新します。IBM Zの場合は、
dracut
の実行後、zipl
を実行します。サーバを再起動します。
18.11.3 ルートデバイスのマルチパスI/Oの無効化 #
multipath=off
をカーネルコマンドラインに追加します。この変更はYaSTのブートローダモジュールで行うことができます。 › の順に開き、両方のコマンドラインにパラメータを追加します。
これは、ルートデバイスだけに影響します。他のすべてのデバイスは影響されません。
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のデバイス名の指定は、必ず変更してください。
端末コンソールを開きます。
特に指示のない限り、この端末を使用して、以降のステップでコマンドを入力します。
ソフトウェアRAIDデバイスが現在マウントされているか、または実行中の場合、デバイスごとに次のコマンドを入力して、デバイスをアンマウントし、停止します。
>
sudo
umount /dev/mapper/mpath0>
sudo
mdadm --misc --stop /dev/mapper/mpath0次のように入力して、
md
サービスを停止します。>
sudo
systemctl stop mdmonitor次のコマンドを入力することにより、
multipathd
デーモンを起動します。>
systemctl start multipathdマルチパス処理サービスの開始後、ソフトウェア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
次のように入力して、
mdmonitor
サービスとRAIDデバイスを再起動します。>
sudo
systemctl start mdmonitor次のように入力して、ソフトウェアRAIDの状態をチェックします。
>
sudo
mdadm --detail /dev/mapper/mpath0RAIDのコンポーネントデバイスは、そのデバイスマッパーマルチパスのデバイス名(
/dev/disk/by-id
ディレクトリにデバイスのシンボリックリンクとしてリストされている)と一致する必要があります。ルート(
/
)デバイス、またはそのいずれかの要素(/var
、/etc
、/log
など)がSAN上にあり、ブートするためにマルチパスが必要な場合、initrd
を再構築します。>
dracut -f --add-multipathサーバを再起動して、変更内容を適用します。
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
ツールでは、デバイスのノードパスではなく、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環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.sh
ユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。
次のプロシージャを使用して、システムを再起動せずに、デバイスをスキャンして、マルチパス処理に使用できるようにします。
ストレージサブシステムで、ベンダのツールを使用してデバイスを割り当て、そのアクセス制御設定を更新して、Linuxシステムが新しいストレージをアクセスできるようにします。詳細については、ベンダのマニュアルを参照してください。
すべてのターゲットをスキャンしてホストの有無を調べ、LinuxカーネルのSCSIサブシステムのミドルレイヤに新しいデバイスを認識させます。端末コンソールのプロンプトで、次のように入力します。
>
sudo
rescan-scsi-bus.shセットアップによっては、オプションのパラメータを指定して
rescan-scsi-bus.sh
を実行しなければならない場合があります。詳細については、rescan-scsi-bus.sh --help
を参照してください。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 [...]前の各手順を繰り返し、新しいデバイスに接続しているLinuxシステム上の他のHBAアダプタを介して、パスを追加します。
multipath
コマンドを実行して、DM-MPIO設定用のデバイスを認識します。端末コンソールのプロンプトで、次のように入力します。>
sudo
multipathこれで、新しいデバイスをマルチパス処理用に設定できます。
18.14.2 パーティショニングされた新規デバイスのスキャン(再起動なし) #
本項の例を使用して、新たに追加したマルチパスLUNを再起動なしで検出します。
EMC PowerPath環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.sh
ユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。
端末コンソールを開きます。
すべてのターゲットをスキャンしてホストの有無を調べ、LinuxカーネルのSCSIサブシステムのミドルレイヤに新しいデバイスを認識させます。端末コンソールのプロンプトで、次のように入力します。
>
rescan-scsi-bus.shセットアップによっては、オプションのパラメータを指定して
rescan-scsi-bus.sh
を実行しなければならない場合があります。詳細については、rescan-scsi-bus.sh --help
を参照してください。次のように入力して、デバイスが認識されていること(リンクに新しいタイムスタンプが付いているかどうかなど)を確認します。
>
ls -lrt /dev/dm-*次のように入力して、
/dev/disk/by-id
内のデバイスを確認することもできます。>
ls -l /dev/disk/by-id/次のように入力して、新しいデバイスがログに表示されることを確認します。
>
sudo
journalctl -rテキストエディタで、デバイスの新しいエイリアス定義を
/etc/multipath.conf
ファイルに追加します(data_vol3
など)。たとえば、UUIDが
36006016088d014006e98a7a94a85db11
であれば、次の変更を行います。defaults { user_friendly_names yes } multipaths { multipath { wwid 36006016088d014006e98a7a94a85db11 alias data_vol3 } }
次の入力で、デバイスのパーティションテーブルを作成します。
>
fdisk /dev/disk/by-id/dm-uuid-mpath-<UUID>UUIDをデバイスのWWID(
36006016088d014006e98a7a94a85db11
など)で置き換えます。次のように入力して、udevをトリガします。
>
sudo
echo 'add' > /sys/block/DM_DEVICE/ueventたとえば、
dm-8
上のパーティションに対して、デバイスマッパーデバイスを生成するには、次のように入力します。>
sudo
echo 'add' > /sys/block/dm-8/ueventデバイス
/dev/disk/by-id/dm-uuid-mpath-UUID_partN
上にファイルシステムを作成します。選択するファイルシステムに応じて、このためにmkfs.btrfs
mkfs.ext3
、mkfs.ext4
、またはmkfs.xfs
のいずれかのコマンドを使用できます。詳細については、それぞれのマニュアルページを参照してください。UUID_partN
を、実際のUUIDおよびパーティション番号(36006016088d014006e98a7a94a85db11_part1など)で置き換えます。次のコマンドを入力して、新しいパーティションのラベルを作成します。
>
sudo
tune2fs -L LABELNAME /dev/disk/by-id/dm-uuid-UUID_partNUUID_partN
を、実際のUUIDおよびパーティション番号(36006016088d014006e98a7a94a85db11_part1など)で置き換えます。LABELNAMEは好みのラベルに代えてください。次の入力で、DM-MPIOを再設定して、エイリアスを読み込ませます。
>
sudo
multipathd -k'reconfigure'次の入力で、デバイスが
multipathd
によって認識されていることを確認します。>
sudo
multipath -llテキストエディタで、
/etc/fstab
ファイルにマウントエントリを追加します。この時点では、前の手順で作成したエイリアスは、まだ
/dev/disk/by-label
ディレクトリにあります。マウントエントリを/dev/dm-9
パスに追加した後、次回の再起動の前に、マウントエントリを次のように変更します。LABEL=LABELNAME
マウントポイントとして使用するディレクトリを作成し、デバイスをマウントします。
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が無限に停止する可能性があります。
シナリオをテストするには:
端末コンソールを開きます。
次のように入力して、デバイスI/Oに関して、フェールオーバーの代わりに待ち行列処理をアクティブにします。
>
sudo
dmsetup message DEVICE_ID 0 queue_if_no_pathDEVICE_IDを実際のデバイスのIDに置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。
たとえば、次のように入力します。
>
sudo
dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path次のように入力して、デバイス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をすべてのパスがエラーになるシナリオ用に設定するには:
端末コンソールを開きます。
/etc/multipath.conf
ファイルをテキストエディタで開きます。defaultsセクションとその閉じ括弧を非コメント化した後、次のように
default_features
設定を追加します。defaults { default_features "1 queue_if_no_path" }
/etc/multipath.conf
ファイルの変更後、dracut
-f
を実行してシステム上にinitrd
を再作成してから、再起動して変更内容を有効にします。デバイスI/Oのフェールオーバーに戻る準備ができたら、次のように入力します。
>
sudo
dmsetup message MAPNAME 0 fail_if_no_pathMAPNAMEを該当デバイスのマップされたエイリアス名またはデバイスIDに置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。
このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。
18.14.5 停止したI/Oの解決 #
すべてパスが同時にエラーとなり、I/Oが待ち行列に入って停止している場合は、次のプロシージャを実行します。
端末コンソールのプロンプトで、次のコマンドを入力します。
>
sudo
dmsetup message MAPNAME 0 fail_if_no_pathMAPNAME
をデバイスの正しいデバイスIDまたはマップされたエイリアス名で置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。
次のコマンドを入力して、待ち行列を再びアクティブにします。
>
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)モードでマウントされるようにしてください。SUBDIRはx86_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
緊急シェルを使用しています。以下で説明される設定の変更を永続的にするには、インストールされたシステムの環境で実行する必要があります。
システムのルート(
/
)ファイルシステムを識別します。/proc/cmdline
のコンテンツを調べて、root=
パラメータを探します。ルートファイルシステムがマウントされているかどうかを確認します。
>
sudo
systemctl status sysroot.mountヒントdracut
はデフォルトで/sysroot
の下にルートファイルシステムをマウントします。これからは、
/sysroot
の下にルートファイルシステムがマウントされていることを前提とします。/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項 「インストール済みシステムへのアクセス」を参照してください。
次の手順で提示されているように、マルチパスまたはdracut設定に変更を行います。変更を含めるように
initrd
を再構築してください。exit
コマンドを入力してchroot
環境を終了し、緊急シェルを終了して、Ctrl–Dを押してサーバを再起動します。
この修正は、ルートファイルシステムがマルチパス上にないにもかかわらずマルチパスが有効になっている場合に必要です。このようなセットアップの場合、マルチパスはブラックリスト化されていないすべてのデバイスに対してパスを設定しようとします。ルートファイルシステムがあるデバイスは既にマウントされているためマルチパスではアクセスできず、これが失敗の原因になります。この問題を修復するには、/etc/multipath.conf
でルートデバイスをブラックリスト化して、マルチパスを正しく設定します。
緊急シェルで
multipath -v2
を実行し、ルートファイルシステムのデバイスを特定します。この結果、次のような出力が表示されます。#
multipath -v2 Dec 18 10:10:03 | 3600508b1001030343841423043300400: ignoring map|
~:
の間の文字列が、ブラックリスト化に必要なWWIDです。/etc/multipath.conf
を開いて以下を追加します。blacklist { wwid "WWID" }
WWIDは、前の手順で取得したIDに置き換えます。詳細については、18.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。
次のコマンドを使用して
initrd
を再構築します。>
dracut -f --add-multipath
initrd
の再構築 #
この修正は、[マルチパスの状態](有効または無効)がinitrd
とシステムの間で異なる場合に必要です。修正するには、initrd
を再構築します。
システムでマルチパスが「有効」になっている場合、次のコマンドを使用し、マルチパスサポートを指定してinitrdを再構築します。
>
dracut --force --add multipathシステムでマルチパスが「無効」になっている場合、次のコマンドを使用し、マルチパスサポートを指定してinitrdを再構築します。
>
dracut --force -o multipath
initrd
の再構築 #この修正は、initrdにNetwork Attached Storageアクセス用のドライバが含まれていない場合に必要です。たとえば、マルチパスを設定せずにシステムをインストールした場合や、各ハードウェアを追加または交換する場合などが該当します。
必要なドライバをファイル
/etc/dracut.conf.d/01-dist.conf
内の変数force_drivers
に追加します。たとえば、システムにhpsa
ドライバでアクセスされるRAIDコントローラがあり、qla23xxドライバでアクセスされるQlogicコントローラにマルチパスデバイスが接続されている場合は、次のようなエントリになります。force_drivers+="hpsa qla23xx"
次のコマンドを使用して
initrd
を再構築します。>
dracut -f --add-multipathネットワークストレージの接続に失敗した場合にシステムが緊急モードでブートしないようにするため、
/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 (技術情報ドキュメント)を参照してください。