17 デバイスのマルチパスI/Oの管理 #
本項では、マルチパスI/O (MPIO)を使用して、サーバ/ブロックストレージデバイス間のマルチパスのフェールオーバーおよびパスの負荷分散を管理する方法について説明します。
17.1 マルチパスI/Oの理解 #
マルチパス処理とは、サーバのホストバスアダプタおよびデバイスのストレージコントローラ間で、複数の物理パスをまたいで、同じ物理または論理ブロックストレージデバイスと通信するサーバの機能です。これは、通常、FC (Fibre Channel)環境またはiSCSI SAN環境で行われます。複数のチャネルが使用可能な際には、内蔵ストレージとのマルチ接続も可能です。
Linuxマルチ処理は、接続に耐障害性を与え、アクティブな接続全体.に負荷を分散します。マルチパス処理が設定および実行されていると、自動的に、デバイス接続の障害が特定され、I/Oが代替の接続に再経路指定されます。
接続に関しては、多くのトラブルが欠陥のあるアダプタ、ケーブル、またはコントローラが原因で発生します。デバイスにマルチパスI/Oを設定すると、マルチパスドライバがデバイス間のアクティブな接続を監視します。マルチパスドライバは、アクティブなパスのI/Oエラーを検出すると、トラフィックをデバイスの指定セカンダリパスにフェールオーバーします。該当するパスが正常に戻ると、そのパスに制御を戻すことができます。
17.2 ハードウェアサポート #
マルチパス処理ドライバとツールは、SUSE Linux Enterprise Serverが利用可能なすべてのアーキテクチャをサポートします。また、ほとんどのストレージアレイもサポートします。マルチパスデバイスを格納するストレージアレイは、マルチパス処理用のドライバとツールを使用するために、マルチパス処理をサポートする必要があります。一部のストレージアレイベンダは、独自のマルチパス処理管理ツールを提供しています。ベンダのハードウェアマニュアルを参照して、どのような設定が必要か判別してください。
17.2.1 マルチパス処理用に自動検出されるストレージアレイ #
multipath-tools
パッケージは、次のようなストレージアレイを自動的に検出します。
3PARdata VV |
AIX NVDISK |
AIX VDASD |
APPLE Xserve RAID |
COMPELNT Compellent Vol |
COMPAQ/HP HSV101、HSV111、HSV200、HSV210、HSV300、HSV400、HSV 450 |
COMPAQ/HP MSA、HSV |
COMPAQ/HP MSA VOLUME |
DataCore SANmelody |
DDN SAN DataDirector |
DEC HSG80 |
DELL MD3000 |
DELL MD3000i |
DELL MD32xx |
DELL MD32xxi |
DGC |
EMC Clariion |
EMC Invista |
EMC SYMMETRIX |
EUROLOGC FC2502 |
FSC CentricStor |
FUJITSU ETERNUS_DX、DXL、DX400、DX8000 |
HITACHI DF |
HITACHI/HP OPEN |
HP A6189A |
HP HSVX700 |
HP LOGICAL VOLUME |
HP MSA2012fc、MSA 2212fc、MSA2012i |
HP MSA2012sa、MSA2312 fc/i/sa、MCA2324 fc/i/sa、MSA2000s VOLUME |
HP P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI |
IBM 1722-600 |
IBM 1724 |
IBM 1726 |
IBM 1742 |
IBM 1745、1746 |
IBM 1750500 |
IBM 1814 |
IBM 1815 |
IBM 1818 |
IBM 1820N00 |
IBM 2105800 |
IBM 2105F20 |
IBM 2107900 |
IBM 2145 |
IBM 2810XIV |
IBM 3303 NVDISK |
IBM 3526 |
IBM 3542 |
IBM IPR |
IBM Nseries |
IBM ProFibre 4000R |
IBM S/390 DASD ECKD |
IBM S/390 DASD FBA |
Intel Multi-Flex |
LSI/ENGENIO INF-01-00 |
NEC DISK ARRAY |
NETAPP LUN |
NEXENTA COMSTAR |
Pillar Axiom |
PIVOT3 RAIGE VOLUME |
SGI IS |
SGI TP9100、TP 9300 |
SGI TP9400、TP9500 |
STK FLEXLINE 380 |
STK OPENstorage D280 |
SUN CSM200_R |
SUN LCSM100_[IEFS] |
SUN STK6580、STK6780 |
SUN StorEdge 3510、T4 |
SUN SUN_6180 |
ただし、他のほとんどのストレージアレイも有効です。ストレージアレイが自動的に検出されると、マルチパス処理のデフォルト設定が適用されます。デフォルト以外の設定を使用したい場合は、手動で/etc/multipath.conf
ファイルを作成および設定する必要があります。自動検出されないハードウェアでも同じ作業が必要になります。詳細については、17.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。
次の点に留意してください。
自動検出されたすべてのストレージアレイがSUSE Linux Enterprise Serverでテスト済みというわけではありません。17.2.2項 「マルチパス処理サポートについてテスト済みのストレージアレイ」も参照してください。
一部のストレージアレイでは、特定のハードウェアハンドラが必要なことがあります。ハードウェアハンドラは、パスグループの切り替え時とI/Oエラーの処理時に、ハードウェア固有のアクションを実行するカーネルモジュールです。詳細については、17.2.3項 「特定のハードウェアハンドラを必要とするストレージアレイ」を参照してください。
/etc/multipath.conf
ファイルを変更したら、そのたびにdracut
-f
を実行してシステム上にinitrd
を再作成する必要があります。続いて、実行した変更を有効にするため再起動します。
17.2.2 マルチパス処理サポートについてテスト済みのストレージアレイ #
次のベンダのストレージアレイは、SUSE Linux Enterprise Serverでテスト済みです。
EMC |
Hitachi |
Hewlett-Packard/Compaq |
IBM |
NetApp |
SGI |
他のベンダのストレージアレイもほとんど機能するはずです。該当するベンダのマニュアルを参照してください。multipath-tools
パッケージによって認識されるデフォルトストレージアレイのリストについては、17.2.1項 「マルチパス処理用に自動検出されるストレージアレイ」を参照してください。
17.2.3 特定のハードウェアハンドラを必要とするストレージアレイ #
あるパスから他のパスにフェールオーバーするには特別なコマンドが必要なストレージアレイ、または非標準の特別なエラー処理が必要なストレージアレイには、より拡張されたサポートが必要なことがあります。したがって、デバイスマッパーマルチパスサービスには、ハードウェアハンドラ用フックがあります。たとえば、そのようなEMC CLARiiON CXファミリアレイ用ハンドラが1つ、既に提供されています。
ハードウェアベンダのマニュアルを参照して、そのハードウェアハンドラをデバイスマッパーマルチパス用にインストールする必要があるかどうか判別してください。
multipath -t
コマンドは、特定のハードウェアハンドラで特別な処理を必要とするストレージアレイの内部テーブルを表示します。ただし、表示されるリストは、サポートされているアレイの包括的なリストではありません。特別な処理を必要とし、multipath-tools
の開発者がツールの開発中にアクセスしたアレイだけがリストされます。
真のアクティブ/アクティブマルチパスサポートをもつアレイは、特別な処理を必要としないので、multipath -t
コマンドでは表示されません。
また、multipath -t
テーブルでリストされている場合でも、必ずしも、その特定ハードウェアでSUSE Linux Enterprise Serverがテスト済みということではありません。テスト済みのストレージアレイのリストについては、17.2.2項 「マルチパス処理サポートについてテスト済みのストレージアレイ」を参照してください。
17.3 マルチパス処理のプラニング #
マルチパスI/Oソリューションのプラニング時には、本項のガイドラインに従ってください。
17.3.1 前提条件 #
マルチパス処理は、デバイスレベルで管理されます。
マルチパス処理対象のデバイスに使用するストレージアレイで、マルチパス処理がサポートされている必要があります。詳細については、17.2項 「ハードウェアサポート」を参照してください。
サーバのホストバスアダプタおよびブロックストレージデバイスのバスコントローラ間に複数の物理パスが存在している場合のみ、マルチパス処理を設定する必要があります。論理デバイスのマルチパスは、サーバの見地から設定します。
一部のストレージアレイについては、アレイの物理および論理デバイスのマルチパス処理を管理するための独自のマルチパス処理ソフトウェアがベンダから提供されます。この場合は、ベンダの指示に従って、それらのデバイスのマルチ処理を設定してください。
仮想化環境でマルチパス処理を使用する場合、マルチパス処理は、ホストサーバ環境で制御されます。デバイスのマルチパス処理を設定してから、デバイスを仮想ゲストマシンに割り当ててください。
17.3.2 ディスク管理タスク #
マルチパスをもつ物理デバイスまたは論理デバイスのマルチパス処理を設定する前に、まず、次のようにディスク管理タスクを実行してください。
サードパーティーツールで、物理ディスクを小さな論理ディスクに切り分けます。
サードパーティーツールで、物理ディスクまたは論理ディスクをパーティションに分割します。稼働中のシステムでパーティションを変更した場合は、DM-MP(Device Mapper Multipath: デバイスマッパーマルチパス)モジュールによるそれら変更の自動的な検出や反映は行われません。DM-MPIOは再初期化する必要があり、それには、通常、再起動が必要です。
サードパーティーのSANアレイ管理ツールを使用して、ハードウェアRAIDデバイスを作成および設定します。
サードパーティーのSANアレイ管理ツールを使用して、LUNなどの論理デバイスを作成します。所定のアレイにサポートされている論理デバイスタイプは、アレイベンダによって異なります。
17.3.3 ソフトウェアRAID #
LinuxのソフトウェアRAIDの管理ソフトウェアは、マルチパス処理の上で実行されます。複数のI/Oパスを持ち、ソフトウェアRAIDで使用予定の各デバイスは、まず、マルチパス処理用に設定してから、ソフトウェアRAIDデバイスとして作成する必要があります。マルチパスデバイスは自動検出できません。ソフトウェアRAIDは、その下で実行されているマルチパス処理管理を認識しません。
既存のソフトウェアRAID用のマルチパス処理の設定については、17.12項 「既存ソフトウェアRAID用マルチパスI/Oの設定」を参照してください。
17.3.4 高可用性ソリューション #
ストレージリソースのクラスタリング用の高可用性ソリューションは、各ノード上でマルチパス処理サービスをベースとして実行されます。各ノード上の/etc/multipath.conf
ファイル内の構成設定が、クラスタ全体で同一であるようにしてください。
マルチパスデバイスがすべてのデバイス間で同じ名前であるようにしてください。詳細については、17.9.1項 「HAクラスタにおけるマルチパスデバイスの名前」を参照してください。
LAN上のデバイスをミラーリングするDRBD (Distributed Replicated Block Device)高可用性ソリューションは、マルチパス処理をベースとして実行されます。複数のI/Oパスを持ち、DRDBソリューションで使用予定のデバイスごとに、マルチパス処理用デバイスを設定してから、DRBDを設定する必要があります。
17.3.5
initrd
とシステム設定との同期を常に維持する
#
マルチパスを使用する際に最も重要な要件の1つは、ルートファイルシステムと、システムをブートするために必要な他のファイルシステムすべてについて、initrd
とインストール済みシステムの動作が同じになるようにすることです。システムでマルチパスが有効になっている場合はinitrd
でも有効にする必要があり、その逆も同様です。詳細については、17.5.1項 「マルチパスI/Oサービスの有効化、無効化、起動、および停止」を参照してください。
initrd
とシステムが同期されていない場合、システムは正しくブートせず、起動手順を実行すると緊急シェルが起動します。このようなシナリオを回避または修復する方法については、17.15.1項 「マルチパスが有効な場合、ブート時にシステムが終了して緊急シェルが起動する」を参照してください。
17.4 マルチパス管理ツール #
SUSE Linux Enterprise Serverのマルチパス処理のサポートは、Linuxカーネルのデバイスマッパーマルチパスモジュールとmultipath-tools
ユーザスペースパッケージに基づいています。MDADM (Multiple Devices Administration)ユーティリティ(multipath
)を使用すると、マルチパスデバイスの状態を表示できます。
17.4.1 デバイスマッパーマルチパスモジュール #
デバイスマッパーマルチパス(DM-MP)モジュールは、Linuxにマルチパス処理機能を提供します。DM-MPIOは、SUSE Linux Enterprise Serverでのマルチパス処理の推奨ソリューションです。DM-MPIOは、SUSEによって完全にサポートされている製品に付属する唯一のマルチパス処理オプションです。
DM-MPIOは、多様なセットアップでマルチパス処理サブシステムを自動設定します。デバイスごとに最大8個のパスの設定がサポートされています。アクティブ/パッシブ(1つのパスがアクティブで、他のパスがパッシブ)またはアクティブ/アクティブ(ラウンドロビン方式の負荷分散で全パスがアクティブ)の構成がサポートされています。
DM-MPIOフレームワークは、2つの方法で拡張できます。
特定のハードウェアハンドラの使用詳細については、17.2.3項 「特定のハードウェアハンドラを必要とするストレージアレイ」を参照してください。
ラウンドロビンアルゴリズムより高度な負荷分散アルゴリズムの使用.
DM-MPIOのユーザスペースコンポーネントにより、自動的なパスの検出とグループ化のほか、自動的なパスの再テストが実行されるので、障害が発生したパスは、正常に戻ると自動的に復帰します。これにより、管理者の手間を最低限に抑えることができます。
DM-MPIOは、デバイス自体の障害ではなく、デバイスへのパスの障害からシステムを保護します。アクティブなパスの1つが失われると(たとえば、ネットワークアダプタが破損する、光ファイバケーブルが外れるなど)、残りのパスにI/Oをリダイレクトします。アクティブ/パッシブ構成の場合は、パスがパッシブパスの1つにフェールオーバーします。ラウンドロビン式負荷分散構成を使用している場合は、トラフィックの負荷が残りの正常なパス全体に分散されます。すべてのアクティブパスに障害が起きた場合は、アクティブでないセカンダリパスが有効になり、約30秒の遅延でフェールオーバーが開始されます。
ディスクアレイに複数のストレージプロセッサがある場合は、アクセスしたいLUNを所有するストレージプロセッサにSANスイッチが接続していることを必ず確認してください。ほとんどのディスクアレイでは、すべてのLUNが両方のストレージプロセッサに属しているので、両方の接続がアクティブです。
一部のディスクアレイでは、ストレージアレイがストレージプロセッサを介してトラフィックを管理するので、一度に1つのストレージプロセッサだけが提示されます。1つのプロセッサがアクティブとなり、もう1つのプロセッサは障害が発生するまでパッシブとなります。間違ったストレージプロセッサ(パッシブなパスをもつプロセッサ)に接続している場合は、予期されたLUNが表示されなかったり、それらのLUNが表示されてもアクセスしようとするとエラーが発生することがあります。
ストレージアレイの機能 |
説明 |
---|---|
アクティブ/パッシブコントローラ |
1つのコントローラはアクティブで、すべてのLUNに対応します。2つ目のコントローラは、スタンバイとして機能します。2つ目のコントローラは、オペレーティングシステムが冗長なパスを認識するように、マルチパスコンポーネントに対するLUNの提示も行います。プライマリコントローラに障害が発生した場合は、セカンダリコントローラが引き継ぎ、すべてのLUNに対応します。 一部のアレイでは、LUNをさまざまなコントローラに割り当てることができます。所定のLUNは、そのアクティブコントローラとなる1つのコントローラに割り当てられます。一度に1つのコントローラがあらゆるLUNのディスクI/Oを処理し、2つ目のコントローラがそのLUNのスタンバイコントローラとなります。2つ目のコントローラは、パスの提示もしますが、ディスクI/Oは行えません。そのLUNを使用するサーバは、LUNの割り当て先のコントローラに接続します。LUNのセットに対するプライマリコントローラに障害が発生すると、セカンダリコントローラが引き継ぎ、すべてのLUNに対応します。 |
アクティブ/パッシブコントローラ |
両方のコントローラが、すべてのLUNの負荷を共有し、あらゆるLUNのディスクI/Oを処理できます。1つのコントローラに障害が発生すると、2つ目のコントローラが自動的にすべてのトラフィックを処理します。 |
負荷分散 |
デバイスマッパーマルチパスドライバは、自動的に、すべてのアクティブパス全体にトラフィックの負荷を分散します。 |
コントローラのフェールオーバー |
アクティブなコントローラがパッシブなコントローラにフェールオーバーすると、デバイスマッパーマルチパスドライバがホスト/スタンバイ間のパスを自動的に有効にし、それらをプライマリパスにします。 |
ブート/ルートデバイスのサポート |
マルチパス処理は、SUSE Linux Enterprise Server 10以降のルート(
マルチパス処理は、SUSE Linux Enterprise Server 11以降の |
デバイスマッパーマルチパスは、マルチパスデバイスの各パスを個別のSCSIデバイスとして検出します。SCSIデバイス名は、/dev/sdN
の形式をとります。ここで、N
は、デバイスに対して自動生成される文字であり、aで始まり、デバイスの生成に応じてシーケンシャルに発行されます(/dev/sda
、/dev/sdb
など)。デバイス数が26を超えると、文字が2つ使用され、/dev/sdz
の次のデバイスは/dev/sdaa、その次は
、その次は/dev/sdab
と続きます。
複数のパスが自動的に検出されない場合は、それらを/etc/multipath.conf
ファイルで手動設定できます。multipath.conf
ファイルは、システム管理者によって作成および設定されるまで存在しません。詳細については、17.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。
17.4.2 マルチパスI/O管理ツール #
パッケージmultipath-tools
およびkpartx
では、自動パス検出とグループ化を扱うツールが提供されています。これらのパッケージは、自動的にパスの定期テストを行うので、障害が発生したパスは、正常に戻ると、自動的に復帰します。これにより、管理者の手間を最低限に抑えることができます。
ツール |
説明 |
---|---|
|
システムをスキャンしてマルチパスデバイスを検出し、アセンブルします。 |
|
mapsイベントを待機し、 |
|
マルチパスデバイス上のパーティションにリニアdevmapをマップします。これにより、デバイス上のパーティションのマルチパスモニタリングを作成することが可能になります。 |
|
デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理します。 |
17.4.3 マルチパスデバイスへのMDADMの使用 #
デフォルトのデバイスハンドラはUdevであり、デバイスは、デバイスノード名ではなく、Worldwide IDによって、システムに自動的に認識されます。これによって、環境設定ファイル(mdadm.conf
とlvm.conf)
がマルチパスデバイスを正しく認識しないという、MDADMおよびLVMの旧リリースにあった問題が解決します。
LVM2の場合のようにmdadmでは、デバイスノードパスではなく、IDによってデバイスをアクセスする必要があります。したがって、/etc/mdadm.conf
内のDEVICE
エントリを次のように設定してください。
DEVICE /dev/disk/by-id/*
ユーザフレンドリな名前を使用している場合は、次のようにパスを指定し、マルチパス処理の設定後に、デバイスマッパー名だけがスキャンされるようにします。
DEVICE /dev/disk/by-id/dm-uuid-.*-mpath-.*
17.4.4 multipathコマンド #
マルチパスデバイスを設定し、管理するには、multipath(8)
コマンドを使用します。このコマンドの一般的な構文は、次のようになります。
multipath [-v verbosity_level] [-b bindings_file] [-d] [-h|-l|-ll|-f|-F|-B|-c|-q|-r|-w|-W|-t] [-p failover|multibus|group_by_serial|group_by_prio|group_by_node_name] [DEVICENAME]
詳細については、man 8 multipath
を参照してください。
一般的な例#
- multipath
すべてのマルチパスデバイスを設定します。
- multipath DEVICENAME
特定のマルチパスデバイスを設定します。
DEVICENAMEを、
/dev/sdb
(udevにより$DEVNAME変数で表示)またはmajor:minor
形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。- multipath -f
マルチパスマップとそのデバイスにマップされたパーティションを選択的に抑制します。
- multipath -d
ドライ実行。可能性のあるマルチパスデバイスを表示しますが、デバイスの作成やデバイスマップの更新は行いません。
- multipath -v2 -d
ドライ実行で可能性のあるマルチパスデバイスのマルチパスマップ情報を表示します。-v2オプションを使用すると、ローカルディスクのみが表示されます。この冗長レベルでは、kpartxなどの他のツールへのフィード用としてのみ、作成または更新したマルチパスの名前をプリントします。
デバイスがすでに存在し、変更がない場合には、出力はありません。設定されているマルチパスデバイスのステータスを見るには、
multipath -ll
を使用します。- multipath -v2 DEVICENAME
特定の可能性のあるマルチパスデバイスを設定し、そのマルチパスマップ情報を表示します。この冗長レベルでは、
kpartx
などの他のツールへのフィード用として、作成または更新したマルチパスの名前だけをプリントします。デバイスがすでに存在し、変更がない場合には、出力はありません。設定されているマルチパスデバイスのステータスを見るには、
multipath -ll
を使用します。DEVICENAMEを、
/dev/sdb
(udev
により$DEVNAME変数で表示)またはmajor:minor
形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。- multipath -v3
可能性のあるマルチパスデバイスを設定し、それらのマルチパスマップ情報を表示します。この冗長レベルでは、すべての検出されたパス、マルチパス、およびデバイスマップがプリントされます。WWIDおよび
devnode
の両方でブラックリスト化されたデバイスが表示されます。- multipath -v3 DEVICENAME
特定の可能性のあるマルチパスデバイスを設定し、それらの情報を表示します。-v3オプションを使用すると、フルパスリストが表示されます。この冗長レベルでは、すべての検出されたパス、マルチパス、およびデバイスマップがプリントされます。WWIDおよび
devnode
の両方でブラックリスト化されたデバイスが表示されます。DEVICENAMEを、
/dev/sdb
(udev
により$DEVNAME変数で表示)またはmajor:minor
形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。- multipath -ll
すべてのマルチパスデバイスの状態を表示します。
- multipath -ll DEVICENAME
指定されたマルチパスデバイスのステータスを表示します。
DEVICENAMEを、
/dev/sdb
(udev
により$DEVNAME変数で表示)またはmajor:minor
形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。- multipath -F
すべての未使用のマルチパスデバイスマップをフラッシュします。これによって、マルチパスが解消したり、デバイスが削除されることはありません。
- multipath -F DEVICENAME
指定されたマルチパスデバイスの未使用のマルチパスデバイスマップをフラッシュします。これによって、マルチパスが解消したり、デバイスが削除されることはありません。
DEVICENAMEを、
/dev/sdb
(udev
により$DEVNAME変数で表示)またはmajor:minor
形式などのデバイスノード名で置き換えます。デバイス名は、マルチパスマップ名でも構いません。- multipath -p [ failover | multibus | group_by_serial | group_by_prio | group_by_node_name ]
次の表に説明されているグループポリシーオプションの1つを指定することにより、グループポリシーを設定します。
表 17.3: multipath -pコマンドのグループポリシーオプション #ポリシーオプション
説明
failover (フェールオーバー)
(デフォルト)優先度グループごとに1つのパス一度に使用できるスパスは1つだけです。
multibus
1つの優先度グループ内にすべてのパス
group_by_serial
検出されたSCSIシリアル番号(コントローラノードの全世界規模の番号)ごとに1つの優先度グループ
group_by_prio
パス優先度値ごとに1つの優先度グループ同じ優先度のパスは同じ優先度グループに属します。優先度は、コールアウトプログラムで決定されます。それらのプログラムは、グローバル、コントローラごと、またはマルチパスごとのオプションとして
/etc/multipath.conf
環境設定ファイルで指定されます。group_by_node_name
ターゲットノード名ごとに1つの優先度グループターゲットノード名は、
/sys/class/fc_transport/target*/node_name
にフェッチされます。- multipath -t
マルチパスの内部ハードウェアテーブルとアクティブな設定を表示します。設定パラメータの詳細については、
man multipath
を参照してください。
17.4.5 mpathpersistユーティリティ #
mpathpersist
ユーティリティを使用して、デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理できます。このコマンドの一般的な構文は、次のようになります。
mpathpersist [options] [device]
詳細については、man 8 mpathpersist
を参照してください。
このユーティリティを/etc/multipath.conf
ファイルのサービスアクション予約キー(reservation_key
属性)と共に使用して、SCSIデバイスの永続的な予約を設定します。この属性はデフォルトでは使用されません。この属性が設定されていない場合、multipathd
デーモンは、新しく検出されたパスまたは復元されたパスの永続的な予約があるかどうかを確認しません。
reservation_key <RESERVATION_KEY>
この属性はdefaults
セクションまたはmultipaths
セクションに追加できます。次に例を示します。
multipaths { multipath { wwid XXXXXXXXXXXXXXXX alias yellow reservation_key 0x123abc } }
永続的な管理の対象にするすべてのマルチパスデバイスに対してreservation_key
パラメータを設定し、次のコマンドを実行してmultipathd
デーモンを再起動します。
sudo systemctl restart multipathd
設定後、mpathpersist
コマンドで予約キーを指定できます。
例#
- mpathpersist --out --register --param-sark=123abc --prout-type=5 -d /dev/mapper/mpath9
/dev/mapper/mpath9
デバイスのサービスアクション予約キーを登録します。- mpathpersist -i -k -d /dev/mapper/mpath9
/dev/mapper/mpath9
デバイスのサービスアクション予約キーを読み込みます。- mpathpersist --out --reserve --param-sark=123abc --prout-type=8 -d /dev/mapper/mpath9
/dev/mapper/mpath9
デバイスのサービスアクション予約キーを予約します。- mpathpersist -i -s -d /dev/mapper/mpath9
/dev/mapper/mpath9
デバイスの予約状態を読み込みます。
17.5 マルチパス処理用システムの設定 #
17.5.1 マルチパスI/Oサービスの有効化、無効化、起動、および停止 #
マルチパスサービスを有効にしてブート時に起動するには、次のコマンドを実行します。
sudo systemctl enable multipathd
稼働中のシステムでサービスを手動で起動したり、サービスの状態を確認したりするには、次のいずれかのコマンドを入力します。
sudo systemctl start multipathd sudo systemctl status multipathd
現在のセッションでマルチパスサービスを停止して無効にし、システムの次回ブート時にサービスが起動しないようにするには、次のコマンドを実行します。
sudo systemctl stop multipathd sudo systemctl disable multipathd
initrd
の再構築
マルチパスサービスを有効または無効にした場合は、initrd
の再構築も必要です。そうしないと、システムがブートしなくなるおそれがあります。マルチパスサービスを有効にする場合は、次のコマンドを実行してinitrdの再構築も行います。
dracut --force --add multipath
マルチパスサービスを無効にする場合は、次のコマンドを実行してinitrdを再構築します。
dracut --force -o multipath
(オプション)さらに、マルチパスを手動で起動するときにもマルチパスデバイスが設定されないようにする場合は、initrdを再構築する前に、/etc/multipath.conf
の最後に次の行を追加します。
blacklist { wwid ".*" }
17.5.2 マルチパス処理用SANデバイスの準備 #
SANデバイスのマルチパスI/Oを設定する前に、必要に応じて、次のようにSANデバイスを準備してください。
ベンダのツールで、SANデバイスを設定し、ゾーン化します。
ベンダのツールで、ストレージアレイ上のホストLUNのパーミッションを設定します。
Linux HBAドライバモジュールをインストールします。モジュールがインストールされると、ドライバがHBAを自動的にスキャンして、ホスト用のパーミッションをもつSANデバイスを検出します。それらのSANデバイスは、以降の設定のため、ホストに提示されます。
注記: ネイティブのマルチパス処理を有効化しないご使用のHBAドライバのネイティブマルチパス処理が有効化していないことを確認してください。
詳細については、ベンダの特定マニュアルを参照してください。
ドライバモジュールがロードされたら、特定アレイのLUNまたはパーティションに割り当てられたデバイスノードを検出します。
SANデバイスがサーバ上でルートデバイスとして使用される場合は、17.14.9項 「ルートデバイスがマルチパスの場合のSANタイムアウト設定」に示されているように、デバイスのタイムアウト設定を変更します。
HBAドライバがLUNを認識しない場合は、lsscsi
を使用して、SCSIデバイスがオペレーティングシステムによって正しく認識されているかどうかチェックできます。LUNがHBAドライバによって認識されない場合は、SANのゾーン化セットアップをチェックします。特に、LUNのマスキングがアクティブであるかどうか、LUNがサーバに正しく割り当てられているかどうかをチェックしてください。
LUNがHBAドライバによって認識されても、対応するブロックデバイスが存在しない場合は、カーネルパラメータを追加して、SCSIデバイスのスキャン動作を変更する必要があります(LUNが連続的に番号付けされていないことを示すなど)。詳細については、SUSEナレッジベース(https://www.suse.com/support/kb/doc.php?id=3955167)にあるTID 3955167: Troubleshooting SCSI (LUN) Scanning Issuesを参照してください。
17.5.3 マルチパスデバイスのパーティショニング #
複数のパスをもつパーティショニングデバイスは、推奨できませんが、サポートされています。kpartx
ツールを使用すると、再起動なしでマルチパスデバイスにパーティションを作成できます。マルチパス処理の設定前に、YaSTのパーティショナ機能またはサードパーティーのパーティショニングツールの使用により、デバイスをパーティショニングすることもできます。
マルチパスデバイスはデバイスマッパーデバイスです。コマンドラインツール(parted、kpartx、fdiskなど)を使用してデバイスマッパーデバイスを変更することはできますが、他の層を更新するために必要なudevイベントが生成されるとは限りません。デバイスマッパーデバイスをパーティション化した後、マルチパスマップをチェックして、デバイスマッパーデバイスがマップされていることを確認する必要があります。デバイスが見つからない場合は、マルチパスデバイスを再マップするかサーバを再起動すると、マルチパスマップにある新しいパーティションをすべて検出できます。
マルチパスデバイス上にあるパーティションのデバイスマッパーデバイスは、独立したデバイスと同じではありません。デバイス全体を使用するLVM論理ボリュームを作成する場合、パーティションが含まれないデバイスを指定する必要があります。マルチパスパーティションをLVM論理ボリュームのターゲットデバイスとして設定すると、LVMは、ベースを成す物理デバイスがパーティション化されていると認識し、作成に失敗します。SANデバイスを再分割する必要がある場合、SANデバイス上のLUNを分割し、各LUNを別個のマルチパスデバイスとしてサーバに認識させることができます。
17.6 /etc/multipath.conf Fileの作成または修正 #
/etc/multipath.conf
ファイルは、作成しない限り、存在しません。マルチパスの設定ファイルを作成して設定をパーソナライズしない限り、multipathd
デーモンの実行時にデフォルトのマルチパスデバイス設定が自動的に適用されます。
/etc/multipath.conf
からの変更のテストおよび恒久的な適用
/etc/multipath.conf
ファイルの作成または修正を行った場合、ファイルを保存する際に変更が自動的には適用されません。これにより、変更をコミットする前に、それを検証するためにドライ実行を行うことができます。改訂した設定に満足な場合、17.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」の説明にあるようにマルチパスマップを更新できます。
17.6.1 /etc/multipath.confファイルの作成 #
好みのエディタで空の
/etc/multipath.conf
ファイルを作成します。SANの適切な
device
セクションを追加してください。大半のベンダは、device
セクションの正しいセットアップに関するマニュアルを提供しています。異なるSANには別々のdevice
セクションが必要です。自動検出されたストレージサブシステムを使用している場合(17.2.1項 「マルチパス処理用に自動検出されるストレージアレイ」を参照)、
device
の追加は必要ありません。この場合、このデバイスのデフォルト設定が適用されます。使用中のマシンのマルチパス以外のデバイスをすべて含む
blacklist
セクションを作成します。詳細については、17.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。必要に応じて、設定ファイルにセクションを追加します。簡単な説明は、17.6.2項 「
/etc/multipath.conf
ファイルのセクション」を参照してください。詳細は、man 5 multipath.conf
を実行すると参照できます。終了したら、
/etc/multipath.conf
を保存し、17.6.3項 「etc/multipath.confファイルでのマルチパスセットアップの確認」の説明にあるように設定をテストします。設定の確認を完了したら、17.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」の説明にあるようにこれを適用します。
17.6.2 /etc/multipath.conf
ファイルのセクション #
/etc/multipath.conf
ファイルは、以下のセクションで構成されています。詳細は、man 5 multipath.conf
を参照してください。
- defaults
マルチパスI/0の全般的デフォルト設定。これらの値は、適切なデバイスセクションまたはマルチパスセクションで値が指定されていない場合に使用されます。詳細については、17.7項 「ポーリング、待ち行列、およびフェールバック用のデフォルトポリシーの設定」を参照してください。
- blacklist
マルチパスの候補ではないとして破棄するデバイス名の一覧。デバイスは、そのデバイスノード名(
devnode
)、そのWWID (wwid
)、またはそのベンダまたは製品文字列(device
)によって識別できます。通常、非マルチパスデバイス(hpsa
、fd
、hd
、md
、dm
、sr
、scd
、st
、ram
、raw
、loop
など)は無視できます。詳細と使用例については、17.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。- blacklist_exceptions
ブラックリストに記載されている場合でもマルチパスの候補として扱うデバイスのデバイス名の一覧。デバイスは、そのデバイスノード名(
devnode
)、そのWWID (wwid
)、またはそのベンダまたは製品文字列(device
)によって識別できます。対象のデバイスを指定するには、ブラックリストで使用したのと同じキーワードを使用する必要があります。たとえば、ブラックリスト内のデバイスにdevnode
キーワードを使用した場合は、devnode
キーワードを使用して、ブラックリスト例外にあるデバイスの一部を除外します。devnode
キーワードを使用し、それらの一部のデバイスをwwid
キーワードを使用して除外することで、デバイスをブラックリストに入れることはできません。詳細と使用例については、17.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。- multipaths
個々のマルチパスデバイスの設定を指定します。個別設定をサポートしていない設定を除き、これらの値により、設定ファイルの
defaults
およびdevices
セクションで指定された値が上書きされます。- devices
個々のストレージコントローラの設定を指定します。これらの値により、設定ファイル内の
defaults
セクションで指定された値が上書きされます。デフォルトではサポートされていないストレージアレイを使用している場合は、devices
サブセクションを作成して、そのデフォルト設定を指定することができます。これらの値は、個々のマルチパスデバイスの設定により上書きが可能です(キーワードでそれが許可されていれば)。詳細については、次のリンクを参照してください。
17.6.3 etc/multipath.confファイルでのマルチパスセットアップの確認 #
/etc/multipath.conf
ファイルの作成または修正を行った場合、ファイルを保存する際に変更が自動的には適用されません。セットアップの「ドライ実行」を行って、マルチパスのマップを更新する前に、マルチパスセットアップを確認することができます。
サーバのコマンドプロンプトで、次のように入力します。
sudo multipath -v2 -d
このコマンドによりデバイスがスキャンされ、変更をコミットしたときにセットアップがどのようになるかが表示されます。/etc/multipath.conf
ファイルを修正してドライ実行を行う際に、変更前の(またはデフォルトの)マルチパス設定で、multipathd
デーモンがすでに実行されていることを前提とします。変更内容に問題がなければ、次の手順に進みます。
出力の例を以下に示します。
26353900f02796769 [size=127 GB] [features="0"] [hwhandler="1 emc"] \_ round-robin 0 [first] \_ 1:0:1:2 sdav 66:240 [ready ] \_ 0:0:1:2 sdr 65:16 [ready ] \_ round-robin 0 \_ 1:0:0:2 sdag 66:0 [ready ] \_ 0:0:0:2 sdc 8:32 [ready ]
パスは、優先度グループでグループ化されます。一度に1つの優先度グループだけがアクティブに使用されます。アクティブ/アクティブ構成をモデル化するには、すべてのパスを同じグループにします。アクティブ/パッシブ構成をモデル化する場合は、並行してアクティブにしないパスを複数の別の優先度グループに振り分けます。これは、通常、デバイス検出時に自動的に行われます。
出力として、順序、グループ内でのI/O負荷の分散に使用されるスケジュールポリシー、および各優先度グループのパスが表示されます。また、各パスに対して、その物理アドレス(ホスト:バス:ターゲット:LUN)、デバイスノード名、メジャー:マイナー番号、および状態が表示されます。
ドライ実行で冗長レベルの-v3を使用することによって、すべての検出されたパス、マルチパス、およびデバイスマップを表示できます。WWIDおよびデバイスノードの両方でブラックリスト化されたデバイスが表示されます。
2つのQlogic HBAをXiotech Magnitude 3000 SANに接続した64ビットSLES 11 SP2サーバでの-v3出力の例を、次に示します。例を短くするため、複数エントリの一部は省略されています。
tux >
sudo multipath -v3 d
dm-22: device node name blacklisted
< content omitted >
loop7: device node name blacklisted
< content omitted >
md0: device node name blacklisted
< content omitted >
dm-0: device node name blacklisted
sdf: not found in pathvec
sdf: mask = 0x1f
sdf: dev_t = 8:80
sdf: size = 105005056
sdf: subsystem = scsi
sdf: vendor = XIOtech
sdf: product = Magnitude 3D
sdf: rev = 3.00
sdf: h:b:t:l = 1:0:0:2
sdf: tgt_node_name = 0x202100d0b2028da
sdf: serial = 000028DA0014
sdf: getuid= "/lib/udev/scsi_id --whitelisted --device=/dev/%n" (config file default)
sdf: uid = 200d0b2da28001400 (callout)
sdf: prio = const (config file default)
sdf: const prio = 1
[...]
ram15: device node name blacklisted
[...]
===== paths list =====
uuid hcil dev dev_t pri dm_st chk_st vend/prod/rev
200d0b2da28001400 1:0:0:2 sdf 8:80 1 [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 1:0:0:1 sde 8:64 1 [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 1:0:0:0 sdd 8:48 1 [undef][undef] XIOtech,Magnitude 3D
200d0b2da28001400 0:0:0:2 sdc 8:32 1 [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 0:0:0:1 sdb 8:16 1 [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 0:0:0:0 sda 8:0 1 [undef][undef] XIOtech,Magnitude 3D
params = 0 0 2 1 round-robin 0 1 1 8:80 1000 round-robin 0 1 1 8:32 1000
status = 2 0 0 0 2 1 A 0 1 0 8:80 A 0 E 0 1 0 8:32 A 0
sdf: mask = 0x4
sdf: path checker = directio (config file default)
directio: starting new request
directio: async io getevents returns 1 (errno=Success)
directio: io finished 4096/0
sdf: state = 2
[...]
17.6.4 /etc/multipath.confファイルの変更を適用したマルチパスマップの更新 #
/etc/multipath.conf
ファイルに対する変更は、multipathd
の実行中は有効になりません。変更を行ったら、ファイルを保存して閉じ、次のように、変更内容を適用してマルチパスマップを更新してください。
multipathd
サービスを停止します。sudo systemctl stop multipathd
次のコマンドの入力で、古いmultipathバインディングをクリアします。
sudo /sbin/multipath -F
次のコマンドの入力で、新しいmultipathバインディングを作成します。
sudo /sbin/multipath -v2 -l
multipathd
サービスを再起動します。sudo systemctl start multipathd
dracut -f
を実行し、システム上にinitrd
イメージを再作成してから、再起動して変更内容を有効にします。
17.6.5 WWIDの生成 #
異なるパス上のデバイスを識別するため、マルチパスは、各デバイスに対してWorld Wide Identification (WWID)を使用します。2つのデバイスパスのWWIDが同じである場合、それらは同じデバイスを表すものと想定されます。やむを得ない理由がある場合を除き、WWIDの生成方法を変更しないことをお勧めします。詳細については、man multipath.conf
を参照してください。
17.7 ポーリング、待ち行列、およびフェールバック用のデフォルトポリシーの設定 #
マルチパス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 "/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" }
ポーリング、待ち行列、およびフェールバックの詳細については、17.10項 「パスフェールオーバーのポリシーと優先度の設定」に記載のパラメータを参照してください。
/etc/multipath.conf
ファイルの変更後、dracut
-f
を実行してシステム上にinitrd
を再作成してから、サーバを再起動して変更内容を有効にする必要があります。詳細については、17.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」を参照してください。
17.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
を再作成してから、サーバを再起動して変更内容を有効にする必要があります。詳細については、17.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は、これまでと同様に適切に設定されたブラックリストとブラックリスト例外を使うデフォルト設定をお勧めします。
17.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クラスタでマルチパス処理を行う場合:
詳細については、17.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 } }
重要: WWWIDとWWNの比較/etc/multipath.conf
ファイル内でデバイスの別名を定義する場合は、必ず各デバイスのWWID (3600508e0000000009e6baa6f609e7908
など)を使用し、そのWWNは使用しないようにしてください。WWNは、デバイスIDの最初の文字を0x
で置き換えます(0x600508e0000000009e6baa6f609e7908
など)。変更内容を保存し、ファイルを閉じます。
/etc/multipath.conf
ファイルの変更後、dracut
-f
を実行してシステム上にinitrd
を再作成してから、サーバを再起動して変更内容を有効にする必要があります。詳細については、17.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」を参照してください。
LUNディレクトリ全体を使用する場合は(たとえばSAN機能を使用してストレージのパーティションを行っている場合など)、mkfs
、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-
のデバイス名は、そのデバイスへの物理的パスを表します。
17.9.1 HAクラスタにおけるマルチパスデバイスの名前 #
以下を行って、マルチパスデバイスがすべてのデバイス間で同じ名前であるようにしてください。
UUIDと別名を使用して、マルチパスデバイスの名前が、クラスタ内のすべてのノードで同一となるようにします。別名は、すべてのノードにわたって一意である必要があります。
/etc/multipath.conf
ファイルを、ノードからクラスタ内の他のすべてのノードの/etc/
ディレクトリにコピーします。マルチパスがマップされたデバイスを使用する場合は、
dm-uuid*
名または別名を/dev/disk/by-id
ディレクトリ内で指定し、デバイスの固定パスインスタンスは指定しないようにします。詳細については、17.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
を再作成してから、ノードを再起動して変更内容を有効にする必要があります。詳細については、17.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」を参照してください。これは、影響を受けるすべてのノードに適用されます。
17.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
を再作成してから、サーバを再起動して変更内容を有効にする必要があることに注意してください。詳細については、17.6.4項 「/etc/multipath.confファイルの変更を適用したマルチパスマップの更新」を参照してください。
17.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つの優先度グループターゲットノード 名は、 |
17.10.2 フェールオーバーポリシーの設定 #
デバイスのフェールオーバーポリシーは、手動で、/etc/multipath.conf
ファイルに入力する必要があります。すべての設定とオプションの例は、/usr/share/doc/packages/multipath-tools/multipath.conf.annotated
ファイルにあります。
17.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が引数を必要とするかどうかによります。prio_args
引数説明
weighted
フォーム
[hbtl|devname|serial|wwn]
REGEX1 PRIO1 REGEX2 PRIO2の値が必要です...hbtl Regex must be of SCSI H:B:T:L format, for example 1:0:.:. and *:0:0:., with a weight value, where H, B, T, L are the host, bus, target, and LUN IDs for a device. For example: prio "weightedpath" prio_args "hbtl 1:.:.:. 2 4:.:.:. 4"
devname
Regexはデバイス名形式です。例: sda, sd.e
シリアル
Regexはシリアル番号形式です。例: .*J1FR.*324.
multipathd show paths format %z
コマンドを使用してシリアルを検索します。(multipathd show wildcards
では、すべてのformat
のワイルドカードが表示されます。)path_latency
path_latency
では、リモートとローカルの両方のストレージアレイが同じタイプのハードウェアを使用する場合に、これらのアレイ間のレイテンシを調整できます。通常、リモートアレイのレイテンシの方がずっと長いです。これにはio_num=20 base_num=10
という形式の値ペアが必要です。io_num The number of read IOs sent to the current path continuously, which are used to calculate the average path latency. Valid values are integers from 2 to 200. base_num The base number value of logarithmic scale, used to partition different priority ranks. Valid values: Integer, 2 - 10. The maximum average latency value is 100s, the minimum is 1us. For example: If base_num=10, the paths will be grouped in priority groups with path latency <=1us, (1us, 10us], (10us, 100us], (100us, 1ms], (1ms, 10ms], (10ms, 100ms], (100ms, 1s], (1s, 10s], (10s, 100s], >100s
alua
exclusive_pref_bit
がデバイスに対して設定される場合(alua exclusive_pref_bit
)、preferred path
ビットセットを持つパスは常に独自のパスグループ内になります。
マルチパス属性#
デバイスに対するマルチパス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
ジャーナルに記録します(第15章 「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
です。
17.10.2.2 ラウンドロビン式負荷分散の設定 #
すべてのパスがアクティブです。一定の秒数または一定数のI/Oトランザクションの後で、シーケンスの次のオープンパスに移動するように、I/Oを設定します。
17.10.2.3 単一パスフェールオーバーの設定 #
優先度が最も高い(最も低い値の)単一パスがトランザクションに対してアクティブになります。他のパスは、フェールオーバーに使用できますが、フェールオーバーの発生までは使用されません。
17.10.2.4 ラウンドロビン式負荷分散用I/Oパスのグループ化 #
同じ優先度をもつ複数のパスがアクティブグループを形成します。そのグループのすべてのパスがエラーになると、デバイスが優先度の次に高いグループにフェールオーバーします。グループのすべてのパスが、ラウンドロビン方式の負荷分散で、トラフィックロードを共有します。
17.10.3 ターゲットパスグループの報告 #
SCSIターゲットポートグループの報告(sg_rtpg(8)
)コマンドを使用します。詳細については、sg_rtpg(8)
のマニュアルページを参照してください。
17.11 ルートデバイスのマルチパスI/Oの設定 #
SUSE Linux Enterprise Server
では、DM-MPIO (デバイスマッパーマルチパスI/O)が使用可能であり、/boot
と/rootに対してサポートされています。また、YaSTインストーラ内のYaSTパーティショナは、インストール中のマルチパスの有効化をサポートします。
17.11.1 インストール時にマルチパスI/Oを有効にする #
オペレーティングシステムをマルチパスデバイスにインストールするには、マルチパスソフトウェアがインストール時に実行されている必要があります。multipathd
デーモンは、システムのインストール時に自動的にアクティブになりません。このデーモンは、YaSTパーティショナの オプションを使用することによって起動できます。
17.11.1.1 アクティブ/アクティブマルチパスストレージLUNでインストール時にマルチパスI/Oを有効にする #
インストール時に
画面で を選択します。multipathを起動します。
YaSTがディスクの再スキャンを開始し、利用可能なマルチパスデバイスを表示します(
/dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65
など)。これが、以降の処理すべての対象デバイスになります。
17.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
にマウントします。mount /dev/disk/by-id/UUID;_part2 /mnt
例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。
mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt
次のように入力して、ブートデバイスを
/mnt/boot
にマウントします。mount /dev/disk/by-id/UUID_part1 /mnt/boot
例えば、次のように入力して、すべてのフォントについてアンチエイリアスを無効にします。
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グラフィック環境に戻ります。
17.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
を実行します。サーバを再起動します。
17.11.3 ルートデバイスのマルチパスI/Oの無効化 #
multipath=off
をカーネルコマンドラインに追加します。この変更はYaSTのブートローダモジュールで行うことができます。 › の順に開き、両方のコマンドラインにパラメータを追加します。
これは、ルートデバイスだけに影響します。他のすべてのデバイスは影響されません。
17.12 既存ソフトウェアRAID用マルチパスI/Oの設定 #
理想的には、デバイスのマルチパス処理を設定してから、それらのデバイスをソフトウェアRAIDデバイスのコンポーネントとして使用してください。ソフトウェアRAIDデバイスの作成後にマルチパス処理を追加した場合は、再起動時にmultipath
サービスの後でDM-MPIOサービスが開始することがあります。その場合は、マルチパス処理がRAIDに使用できないように見えます。本項の手順を使用すると、すでに存在しているソフトウェアRAIDに対してマルチパス処理を実行できます。
たとえば、次のような場合は、ソフトウェアRAID内のデバイスにマルチパス処理を設定する必要があることがあります。
新規インストールまたはアップグレード時にパーティショニング設定の一部として、新しいソフトウェアRAIDを作成する場合
マルチパス処理用に設定しなかったデバイスをメンバーデバイスまたはスペアとしてソフトウェアRAIDで使用する場合
新しいHBAアダプタをサーバに追加するか、またはSAN内でストレージサブシステムを拡張することで、システムを大きくする場合
以降の説明では、ソフトウェアRAIDデバイスを/dev/mapper/mpath0
(カーネルによって認識されるデバイス名)と想定しています。/etc/multipath.conf
ファイルで、ユーザフレンドリ名を有効にしている(17.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デバイスを再起動します。systemctl start mdmonitor
次のように入力して、ソフトウェアRAIDの状態をチェックします。
mdadm --detail /dev/mapper/mpath0
RAIDのコンポーネントデバイスは、そのデバイスマッパーマルチパスのデバイス名(
/dev/disk/by-id
ディレクトリにデバイスのシンボリックリンクとしてリストされている)と一致する必要があります。ルート(
/
)デバイス、またはそのいずれかの要素(/var
、/etc
、/log
など)がSAN上にあり、ブートするためにマルチパスが必要な場合、initrd
を再構築します。dracut -f --add-multipath
サーバを再起動して、変更内容を適用します。
RAIDステータスをチェックして、ソフトウェアRAIDアレイが、マルチパスデバイスの上に正しく示されることを確認します。以下を入力してください。
mdadm --detail /dev/mapper/mpath0
次に例を示します。
Number Major Minor RaidDevice State
0 253 0 0 active sync /dev/dm-0
1 253 1 1 active sync /dev/dm-1
2 253 2 2 active sync /dev/dm-2
mdadm
ツールでは、デバイスのノードパスではなく、IDでデバイスにアクセスする必要があります。詳細については、17.4.3項 「マルチパスデバイスへのMDADMの使用」を参照してください。
17.13 マルチパスデバイスでのLVM2の使用 #
マルチパス使用時に、リソースへのすべてのパスがデバイスツリーのデバイスとして存在します。デフォルトでは、LVMは、デバイスツリーの任意のデバイス上にマルチパスデバイスがあるかどうかを確認します。LVMがマルチパスデバイスを検出すると、そのデバイスはマルチパスコンポーネントであるとみなされ、(基盤となっている)デバイスは無視されます。ほとんどの場合はこの動作で問題ありませんが、/etc/lvm/lvm.conf
で設定を変更できます。multipath_component_detectionを0に設定すると、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
17.14 ベストプラクティス #
17.14.1 新規デバイスのスキャン(再起動なし) #
ご使用のシステムがマルチパス処理用に設定されており、後からSANにストレージを追加する必要がある場合は、rescan-scsi-bus.sh
スクリプトを使用して新しいデバイスをスキャンすることができます。デフォルトでは、このスクリプトは典型的なLUN範囲ですべてのHBAをスキャンします。このコマンドの一般的な構文は、次のようになります。
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
ジャーナルでスキャンの進行状況を確認します(詳細については、第15章 「journalctl
:systemd
ジャーナルのクエリ」を参照してください)。端末コンソールのプロンプトで、次のように入力します。sudo journalctl -r
このコマンドは、ログの最後の行を表示します。次に例を示します。
tux >
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
これで、新しいデバイスをマルチパス処理用に設定できます。
17.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_partN
UUID_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
マウントポイントとして使用するディレクトリを作成し、デバイスをマウントします。
17.14.3 マルチパスI/Oステータスの表示 #
マルチパスI/Oのステータスをクエリすると、マルチパスマップの現在のステータスが出力されます。
multipath -l
オプションを使用すると、パスチェッカが最後に実行された時点での現行パスステータスが表示されます。ただし、パスチェッカは実行されません。
multipath -ll
オプションを使用すると、パスチェッカが実行され、パス情報が更新され、最後に、現在のステータス情報が表示されます。このコマンドは、常にパスステータスの最新情報を表示します。
tux >
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
など)メジャー/マイナー番号
デバイスのステータス
17.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_path
DEVICE_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_path
MAPNAMEを該当デバイスのマップされたエイリアス名またはデバイスIDに置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。
このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。
17.14.5 停止したI/Oの解決 #
すべてパスが同時にエラーとなり、I/Oが待ち行列に入って停止している場合は、次のプロシージャを実行します。
端末コンソールのプロンプトで、次のコマンドを入力します。
sudo dmsetup message MAPNAME 0 fail_if_no_path
MAPNAME
をデバイスの正しいデバイスIDまたはマップされたエイリアス名で置き換えます。値0はセクタを表し、セクタ情報が必要でないときに使用されます。このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。
次のコマンドを入力して、待ち行列を再びアクティブにします。
sudo dmsetup message MAPNAME 0 queue_if_no_path
17.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
)するまで適用されません。
17.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"
17.14.8 マルチパスデバイスでの--noflushの使用 #
マルチパスデバイス上で実行する場合は、オプション--noflush
を必ず使用する必要があります。
たとえば、テーブルのリロードを行うスクリプトでは、マルチパストポロジ情報が必要なので、再開時に--noflush
オプションを使用して、残っているI/Oがフラッシュされないようにします。
load resume --noflush
17.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
環境設定ファイルから設定する必要があります。詳細については、17.6項 「/etc/multipath.conf Fileの作成または修正」を参照してください。
17.15 MPIOのトラブルシューティング #
本項では、MPIOに関するいくつかの既知の問題と、考えられる解決手段について説明します。
17.15.1 マルチパスが有効な場合、ブート時にシステムが終了して緊急シェルが起動する #
ブート中にシステムが終了して緊急シェルが起動し、次のようなメッセージが表示されます。
[ 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 [ 13.682489] floppy0: no floppy controllers found [* ] (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):
この問題は次の状況で発生します。
マルチパスが有効な場合に、非マルチパスルートファイルシステムがブラックリスト化されていない場合。詳細については、手順17.1「緊急シェル: ファイルシステムのブラックリスト化」を参照してください
マルチパスルートファイルシステムを持つシステムで、
initrd
を再構築せずにマルチパスを有効/無効にした場合。詳細については、手順17.2「緊急シェル:initrd
の再構築」を参照してください。Network Attached Storageとマルチパスが有効なシステムで、
initrd
にネットワークストレージドライバがない場合。
この修正は、ルートファイルシステムがマルチパス上にないにもかかわらずマルチパスが有効になっている場合に必要です。このようなセットアップの場合、マルチパスはブラックリスト化されていないすべてのデバイスに対してパスを設定しようとします。ルートファイルシステムがあるデバイスは既にマウントされているためマルチパスではアクセスできず、これが失敗の原因になります。この問題を修復するには、/etc/multipath.conf
でルートデバイスをブラックリスト化して、マルチパスを正しく設定します。
緊急シェルで
multipath -v2
を実行し、ルートファイルシステムのデバイスを特定します。この結果、次のような出力が表示されます。root #
multipath -v2 Dec 18 10:10:03 | 3600508b1001030343841423043300400: ignoring map|
~:
の間の文字列が、ブラックリスト化に必要なWWIDです。/etc/multipath.conf
を開いて以下を追加します。blacklist { wwid "WWWID" }
WWWIDは、前の手順で取得したIDに置き換えます。詳細については、17.8項 「非マルチパスデバイスのブラックリスト化」を参照してください。
Ctrl–D>を押し、緊急シェルを終了してサーバを再起動します。
initrd
の再構築 #
この修正は、[マルチパスの状態](有効または無効)がinitrd
とシステムの間で異なる場合に必要です。修正するには、initrd
を再構築します。
システムでマルチパスが「有効」になっている場合、次のコマンドを使用し、マルチパスサポートを指定してinitrdを再構築します。
dracut --force --add multipath
システムでマルチパスが「無効」になっている場合、次のコマンドを使用し、マルチパスサポートを指定してinitrdを再構築します。
dracut --force -o multipath
Ctrl–D>を押し、緊急シェルを終了してサーバを再起動します。
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
を追加することをお勧めします。Ctrl–D>を押し、緊急シェルを終了してサーバを再起動します。
17.15.2 マルチパス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
設定を上書きすることができました。
17.15.3 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
デーモンを再起動し、変更を有効にします。
17.15.4 技術情報ドキュメント #
SUSE Linux Enterprise ServerのマルチパスI/Oの問題のトラブルシューティングについては、SUSEナレッジベースにある、次のTID (技術情報ドキュメント)を参照してください。