18 デバイスのマルチパスI/Oの管理 #
本項では、マルチパスI/O (MPIO)を使用して、サーバ/ブロックストレージデバイス間のマルチパスのフェールオーバーおよびパスの負荷分散を管理する方法について説明します。
18.1 マルチパスI/Oの理解 #
マルチパス処理とは、サーバのホストバスアダプタおよびデバイスのストレージコントローラ間で、複数の物理パスをまたいで、同じ物理または論理ブロックストレージデバイスと通信するサーバの機能です。これは、通常、FC (Fibre Channel)環境またはiSCSI SAN環境で行われます。
Linuxマルチ処理は、接続に耐障害性を与え、アクティブな接続全体.に負荷を分散します。マルチパス処理が設定および実行されていると、自動的に、デバイス接続の障害が特定され、I/Oが代替の接続に再経路指定されます。
マルチパス処理は、接続の障害に対して耐障害性を提供しますが、ストレージデバイス自体の障害に対する耐障害性は提供しません。後者は、ミラーリングのような補完テクニックによって提供されます。
18.1.1 マルチパスの用語 #
- ストレージアレイ
SANストレージをクライアントに提供する多数のディスクおよび複数のファブリック接続(コントローラ)を備えたハードウェアデバイス。ストレージアレイは通常、RAIDとフェールオーバー機能を備えており、マルチパス処理をサポートしています。これまで、アクティブ/パッシブ(フェールオーバー)とアクティブ/アクティブ(負荷分散)のストレージアレイ設定は区別されていました。これらの概念は今でも存在しますが、最新のハードウェアでサポートされるパスグループとアクセス状態の概念の特殊なケースにすぎません。
- ホスト、ホストシステム
ストレージアレイのクライアントシステムとして動作するSUSE Linux Enterprise Serverを実行しているコンピュータ。
- マルチパスマップ、マルチパスデバイス
一連のパスデバイスです。ストレージアレイ上のストレージボリュームを表し、ホストシステムからは単一のブロックデバイスと認識されます。
- パスデバイス
マルチパスマップのメンバー(通常はSCSIデバイス)です。各パスデバイスは、ホストコンピュータと実際のストレージボリューム(iSCSIセッションの論理ユニットなど)との間の固有の接続を表します。
- WWID
「World Wide Identifier」です。
multipath-tools
ではWWIDを使用して、マルチパスマップにアセンブルする必要がある低レベルデバイスを判断します。WWIDは、設定可能なマップ名と区別する必要があります(18.12項 「マルチパスデバイス名とWWID」を参照)。- uevent、udevイベント
カーネルによってユーザスペースに送信され、
udev
サブシステムによって処理されるイベント。デバイスの追加や削除、またはプロパティの変更を行うと、ueventが生成されます。- デバイスマッパー
仮想ブロックデバイスを作成するためのLinuxカーネルのフレームワークです。マップデバイスに対するI/O操作は基礎となるブロックデバイスにリダイレクトされます。デバイスマッピングはスタックされる場合があります。デバイスマッパーでは独自のイベントシグナル処理を実装します。これは「デバイスマッパーイベント」または「dmイベント」とも呼ばれます。
- initramfs
初期RAMファイルシステムは、これまでの経緯もあって、「初期RAMディスク」(initrd)とも呼ばれます(16.1項 「用語集」を参照)。
- ALUA
「Asymmetric Logical Unit Access」です。これはSCSI標準のSCSI-3で導入された概念です。ストレージボリュームには、さまざまな状態(アクティブ、スタンバイなど)でポートグループに編成されている複数のポートからアクセスできます。ALUAは、ポートグループとその状態を問い合わせ、ポートグループの状態を変更するためのSCSIコマンドを定義します。SCSIをサポートする最新のストレージアレイは通常ALUAもサポートします。
18.2 ハードウェアサポート #
マルチパスドライバとツールは、SUSE Linux Enterprise Serverでサポートされているすべてのアーキテクチャで利用できます。プロトコルを区別しない汎用ドライバは、市販のほとんどのマルチパス対応ストレージハードウェアで動作します。一部のストレージアレイベンダは、独自のマルチパス処理管理ツールを提供しています。ベンダのハードウェアマニュアルを参照して、どのような設定が必要か判別してください。
18.2.1 マルチパスの実装: デバイスマッパーとNVMe #
Linuxにおけるマルチパス処理で従来の一般的な実装では、デバイスマッパーフレームワークを使用します。SCSIデバイスなどのほとんどのデバイスタイプでは、デバイスマッパーのマルチパス処理が唯一使用可能な実装です。デバイスマッパーのマルチパスは、高度に設定可能で、柔軟性に優れています。
Linux NVM Express (NVMe)カーネルサブシステムでは、カーネルでマルチパス処理をネイティブに実装します。通常高速で遅延が非常に小さいNVMeデバイスの演算オーバーヘッドが、この実装で軽減されています。ネイティブNVMeマルチパス処理ではユーザスペースコンポーネントは不要です。SLE 15以降、ネイティブマルチパス処理がNVMeマルチパスデバイスのデフォルトになっています。詳細については、17.2.4項 「マルチパス処理」を参照してください。
この章では、デバイスマッパーマルチパスおよびそのユーザスペースコンポーネントmultipath-tools
について説明します。multipath-tools
は、ネイティブのNVMeマルチパス処理も限定的にサポートしています(18.13項 「その他のオプション」を参照)。
18.2.2 マルチパス処理のストレージアレイ自動検出 #
デバイスマッパーのマルチパスは一般的な技術です。マルチパスデバイスの検出で必要なことは、低レベルデバイス(SCSIなど)がカーネルによって検出されることと、デバイスのプロパティが複数の低レベルデバイスを(実際に異なるデバイスではなく)同じボリュームへの異なる「パス」として確実に識別することのみです。
multipath-tools
パッケージは、ベンダと製品名によってストレージアレイを検出します。これには、広範なストレージ製品に対してデフォルト設定が組み込まれています。ご使用のストレージアレイのハードウェアドキュメントを参照してください。Linuxのマルチパス処理設定に対して独自の推奨事項を提示しているベンダもあります。
使用しているストレージアレイの組み込み設定に変更を適用する必要がある場合、18.8項 「マルチパス設定」を参照してください。
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カーネルで自動検出します。要件は、それぞれのデバイスが検出されるときにデバイスハンドラモジュールがロードされることだけです。この要件は、multipath-tools
パッケージが適切な設定ファイルをインストールすることによって実現します。デバイスハンドラは、特定のデバイスにアタッチされると、変更できなくなります。
18.3 マルチパス処理のプラニング #
マルチパスI/Oソリューションのプラニング時には、本項のガイドラインに従ってください。
18.3.1 前提条件 #
マルチパス処理対象のデバイスに使用するストレージアレイで、マルチパス処理がサポートされている必要があります。詳細については、18.2項 「ハードウェアサポート」を参照してください。
サーバのホストバスアダプタおよびブロックストレージデバイスのバスコントローラ間に複数の物理パスが存在している場合のみ、マルチパス処理を設定する必要があります。
一部のストレージアレイについては、アレイの物理および論理デバイスのマルチパス処理を管理するための独自のマルチパス処理ソフトウェアがベンダから提供されます。この場合は、ベンダの指示に従って、それらのデバイスのマルチ処理を設定してください。
仮想化環境でマルチパス処理を使用する場合、マルチパス処理は、ホストサーバ環境で制御されます。デバイスのマルチパス処理を設定してから、デバイスを仮想ゲストマシンに割り当ててください。
18.3.2 マルチパスのインストールタイプ #
インストールタイプは、ルートデバイスを処理する方法で区別されます。18.4項 「マルチパスシステムでのSUSE Linux Enterprise Serverのインストール」では、インストール中およびインストール後にさまざまなセットアップを作成する方法について説明しています。
18.3.2.1 マルチパスのルートファイルシステム(SANブート) #
ルートファイルシステムはマルチパスデバイス上にあります。これは通常、ディスクのないサーバでSANストレージのみを使用する場合です。このようなシステムでは、起動にマルチパスのサポートが必要であり、initramfsでマルチパス処理を有効にする必要があります。
18.3.2.2 ローカルディスクのルートファイルシステム #
ルートファイルシステム(および場合によっては他のファイルシステム)は、ローカルストレージ(直接アタッチされたSATAディスクやローカルRAIDなど)上にありますが、このシステムではさらにマルチパスのSANストレージのファイルシステムを使用します。このシステムタイプは次の3つの方法で設定できます。
- ローカルディスク用のマルチパスセットアップ
すべてのブロックデバイスはローカルディスクを含むマルチパスマップの一部です。ルートデバイスは、パスが1つしかないディグレードマルチパスマップとして表示されます。YaSTによる初期システムインストール中にマルチパス処理が有効になると、この設定が作成されます。
- ローカルディスクをマルチパスから除外する
この設定では、マルチパス処理はinitramfsで有効になっていますが、ルートデバイスはマルチパスから明示的に除外されます(18.11.1項 「
multipath.conf
のblacklist
セクション」を参照)。手順18.1「インストール後にルートディスクのマルチパス処理を無効にする」では、この設定のセットアップ方法を説明しています。- initramfsでマルチパスを無効にする
YaSTによる初期システムインストール中にマルチパス処理が有効になっていないと、このセットアップが作成されます。この設定はかなり脆弱です。代わりに、他のオプションのいずれかを使用することを検討してください。
18.3.3 ディスク管理タスク #
サードパーティSANアレイ管理ツールやご使用のストレージアレイのユーザインタフェースを使用して、論理デバイスを作成し、それらをホストに割り当てます。両側でホストの資格情報を正しく設定してください。
実行中のホストにボリュームを追加したり、削除したりできますが、変更を検出するには、SCSIターゲットを再スキャンし、ホスト上でマルチパス処理を再設定する必要がある場合があります。18.14.6項 「新規デバイスのスキャン(再起動なし)」を参照してください。
一部のディスクアレイでは、ストレージアレイがストレージプロセッサを使用してトラフィックを管理します。1つのプロセッサがアクティブとなり、もう1つのプロセッサは障害が発生するまでパッシブとなります。パッシブストレージプロセッサに接続している場合、目的のLUNが表示されないか、表示はされるがアクセスしようとするとI/Oエラーが発生する場合があります。
ディスクアレイに複数のストレージプロセッサがある場合は、アクセスしたいLUNを所有するアクティブなストレージプロセッサにSANスイッチが接続していることを必ず確認してください。
18.3.4 ソフトウェアRAIDと複雑なストレージスタック #
マルチパス処理は、SCSIデバイスなどの基本的なストレージデバイスの上にセットアップされます。マルチレイヤのストレージスタックでは、マルチパス処理は常に最下位レイヤです。ソフトウェアRAID、論理ボリューム管理、ブロックデバイスの暗号化などのその他のレイヤは、マルチパス処理の上に重ねられます。したがって、複数のI/Oパスを持ち、ソフトウェアRAIDで使用予定の各デバイスは、まず、マルチパス処理用に設定してから、ソフトウェアRAIDデバイスとして作成する必要があります。
18.3.5 高可用性ソリューション #
ストレージリソースのクラスタリング用の高可用性ソリューションは、各ノード上でマルチパス処理サービスをベースとして実行されます。各ノード上の/etc/multipath.conf
ファイル内の構成設定が、クラスタ全体で同一であるようにしてください。
マルチパスデバイスがすべてのデバイス間で同じ名前であるようにしてください。詳細については、18.12項 「マルチパスデバイス名とWWID」を参照してください。
LAN上のデバイスをミラーリングするDRBD (Distributed Replicated Block Device)高可用性ソリューションは、マルチパス処理をベースとして実行されます。複数のI/Oパスを持ち、DRDBソリューションで使用予定のデバイスごとに、マルチパス処理用デバイスを設定してから、DRBDを設定する必要があります。
pacemaker
とsbd
などフェンシングに共有ストレージを使用するクラスタリングソフトウェアと共にマルチパス処理を使用する場合、特別な注意が必要です。詳細については18.9.2項 「クラスタ化されたサーバでのキューポリシー」を参照してください。
18.4 マルチパスシステムでのSUSE Linux Enterprise Serverのインストール #
マルチパスハードウェアを含むシステムでSUSE Linux Enterprise Serverをインストールするために必要な特別なインストールパラメータはありません。
18.4.1 接続されているマルチパスデバイスを使用しないインストール #
後で、システムにマルチパスSANデバイスを追加する目的で、最初にFabricとストレージを設定せずに、ローカルディスク上でインストールを実行したい場合があります。この場合、インストールは、非マルチパスシステム上でのインストールのように続行します。インストール後、multipath-tools
がインストールされますが、systemd
サービス(multipathd.service
)は無効になります。システムは、18.3.2.2項 「ローカルディスクのルートファイルシステム」のinitramfsでマルチパスを無効にするで説明しているように設定されます。SANハードウェアを追加する前に、multipathd.service
を有効にし、開始する必要があります。ルートデバイス用に/etc/multipath.conf
にblacklist
エントリを作成することをお勧めします(18.11.1項 「multipath.conf
のblacklist
セクション」を参照)。
18.4.2 接続されているマルチパスデバイスによるインストール #
マルチパスデバイスが、インストール時にシステムに接続される場合、YaSTはそれらを検出し、パーティショニングステージに入る前にマルチパスを有効にするかどうかを尋ねるポップアップウィンドウを表示します。
このプロンプトで「いいえ」を選択すると(非推奨)、インストールは18.4.1項 「接続されているマルチパスデバイスを使用しないインストール」のように続行します。パーティショニングステージでは、後でマルチパスマップの一部になるデバイスを使用/編集しないでください。
マルチパスのプロンプトで「はい」を選択すると、インストール中にmultipathd
が実行されます。/etc/multipath.conf
のblacklist
セクションにはデバイスは追加されないため、パーティショニングダイアログでは、ローカルディスクを含むすべてのSCSIデバイスとDASDデバイスがマルチパスデバイスとして表示されます。インストール後、18.3.2.1項 「マルチパスのルートファイルシステム(SANブート)」で説明されているように、すべてのSCSIデバイスとDASDデバイスがマルチパスデバイスになります。
この手順は、ローカルディスクにインストールし、インストール中にマルチパス処理を有効にしていることを前提としているため、ルートデバイスがマルチパス上にありますが、18.3.2.2項 「ローカルディスクのルートファイルシステム」のローカルディスクをマルチパスから除外するで説明されているように、システムを設定したいと考えています。
システムをチェックしてローカルルートデバイスへの
/dev/mapper/...
参照を探し、それらをデバイスがマルチパスマップでない場合にも機能する参照で置き換えます(18.12.4項 「マルチパスマップの参照」を参照)。次のコマンドを実行しても参照が見つからない場合、変更を適用する必要はありません。>
sudo
grep -rl /dev/mapper/ /etcdracut
のby-uuid
永続デバイスポリシーに切り替えます(18.7.4.2項 「initramfsの永続的なデバイス名」を参照)。>
echo 'persistent_policy="by-uuid"' | \ sudo tee /etc/dracut.conf.d/10-persistent-policy.confルートデバイスのWWIDを決定します。
>
multipathd show paths format "%i %d %w %s" 0:2:0:0 sda 3600605b009e7ed501f0e45370aaeb77f IBM,ServeRAID M5210 ...このコマンドは、すべてのパスデバイスとそのWWID、およびベンダ/製品情報を出力します。ルートデバイス(ここでは、ServeRAIDデバイス)を識別し、WWIDをメモすることができます。
決定したWWIDを使用して
/etc/multipath.conf
(18.11.1項 「multipath.conf
のblacklist
セクション」を参照)にブラックリストエントリを作成します(まだこれらの設定を適用しないでください)。blacklist { wwid 3600605b009e7ed501f0e45370aaeb77f }
initramfsを再構築します。
>
sudo
dracut -f再起動します。非マルチパスルートディスクを使用してシステムが起動します。
18.5 マルチパスシステムでのSLEの更新 #
システムをオンラインで更新する場合、第5章 「オンラインでのアップグレード」の説明に従って続行できます。
システムのオフライン更新は、18.4項 「マルチパスシステムでのSUSE Linux Enterprise Serverのインストール」で説明されている新規インストールと似ています。blacklist
がないため、ユーザがマルチパスを有効にすると、ルートデバイスがマルチパスデバイスとして表示されます(これがマルチパスデバイスでない場合も同様)。更新手順中にdracut
がinitramfsを構築するとき、ブートシステムに表示されるストレージスタックとは異なるストレージスタックが表示されます。18.7.4.2項 「initramfsの永続的なデバイス名」および18.12.4項 「マルチパスマップの参照」を参照してください。
18.6 マルチパス管理ツール #
SUSE Linux Enterprise Serverのマルチパス処理のサポートは、Linuxカーネルのデバイスマッパーマルチパスモジュールとmultipath-tools
ユーザスペースパッケージに基づいています。
一般的なマルチパス処理機能は、デバイスマッパーのマルチパス(DM-MP)モジュールによって処理されます。詳細については、18.6.1項 「デバイスマッパーマルチパスモジュール」を参照してください。
multipath-tools
およびkpartx
パッケージは、自動パス検出とグループ化を処理するツールを提供します。ツールを次に示します。
multipathd
マルチパスマップを設定および監視するデーモン、およびデーモンプロセスと通信するコマンドラインクライアント。18.6.2項 「
multipathd
デーモン」を参照してください。multipath
マルチパス操作用のコマンドラインツール。18.6.3項 「
multipath
コマンド」を参照してください。kpartx
マルチパスデバイスの「パーティション」を管理するためのコマンドラインツール。18.7.3項 「マルチパスデバイスのパーティションと
kpartx
」を参照してください。mpathpersist
SCSIの永続的な予約を管理するためのコマンドラインツール。18.6.4項 「SCSIの永続的な予約と
mpathpersist
」を参照してください。
18.6.1 デバイスマッパーマルチパスモジュール #
デバイスマッパーマルチパス(DM-MP)モジュール(dm-multipath.ko
)は、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
を指定してブートします。
デバイスマッパーマルチパスモジュールは次のタスクを処理します。
アクティブパスグループ内の複数のパスに負荷を分散する。
パスデバイスのI/Oエラーを通知し、これらを障害とマークして、I/Oがこれらに送信されないようにする。
アクティブパスグループのすべてのパスで障害が発生したときにパスグループを切り替える。
すべてのパスで障害が発生した場合、設定に応じてマルチパスデバイスのI/Oを失敗させるまたはI/Oをキューに入れる。
次のタスクは、デバイスマッパーのマルチパスモジュールではなく、multipath-tools
パッケージのユーザスペースコンポーネントによって処理されます。
同じストレージデバイスへのさまざまなパスを表すデバイスを検出し、それらからマルチパスマップをアセンブルする。
似ているプロパティを持つパスデバイスをパスグループに収集する。
パスデバイスをアクティブに監視して、障害または再インスタンス化を探す。
パスデバイスの追加と削除を監視する。
デバイスマッパーマルチパスモジュールは、セットアップと設定に使用しやすいユーザインタフェースを提供しません。
multipath-tools
パッケージのコンポーネントの詳細については、18.6.2項 「multipathd
デーモン」を参照してください。
DM-MPIOは、メディアエラーなどのデバイス自体の障害ではなく、デバイスへのパスの障害からシステムを保護します。デバイス自体の障害は、レプリケーションなど別の方法で防ぐ必要があります。
18.6.2 multipathd
デーモン #
multipathd
は、最新Linuxデバイスマッパーのマルチパスにおけるセットアップの最重要部分です。これは通常、systemdサービスmultipathd.service
を通じて開始されます(18.7.1項 「マルチパスサービスの有効化、起動、および停止」を参照)。
multipathd
は次のタスクを実行します(設定によって異なるものもあります)。
起動時に、パスデバイスを検出し、検出されたデバイスからマルチパスマップを設定します。
ueventとデバイスマッパーイベントを監視し、必要に応じてマルチパスマップでパスマッピングの追加や削除を行い、フェールオーバーまたはフェールバック操作を開始します。
新しいパスデバイスが検出されるとすぐに新しいマップをセットアップします。
パスデバイスを定期的にチェックして障害を検出し、障害が発生したパスをテストして、正常に戻ったら復帰させます。
すべてのパスで障害が発生した場合、
multipathd
はそのマップを無効にするか、またはマップデバイスを指定時間でキュー待ちモードに切り替えます。パスの状態の変更を処理し、必要に応じて、パスグループを切り替えたり、パスを再グループ化したりします。
パスが「ぎりぎりの」状態(すなわち、動作状態と非動作状態の間でパスの状態が切り替わる不安定なファブリック状態)であるかどうかをテストします。
設定されている場合、パスデバイスでSCSIの永続的な予約キーを処理します。18.6.4項 「SCSIの永続的な予約と
mpathpersist
」を参照してください。
multipathd
では、コマンドラインのクライアントとしても動作し、インタラクティブコマンドを実行デーモンに送信することでコマンドを処理します。デーモンにコマンドを送信する一般的な構文は次のとおりです。
>
sudo
multipathd COMMAND
あるいは、
>
sudo
multipathd -k'COMMAND'
複数の後続のコマンドを送信できる対話的モードもあります。
>
sudo
multipathd -k
多くのmultipathd
のコマンドには、multipath
の同等コマンドがあります。たとえば、multipathd
show topology
の動作はmultipath
-ll
の動作と同じです。顕著な違いは、multipathdコマンドは実行中のmultipathd
デーモンの内部状態を問い合わせるのに対して、multipathはカーネルおよびI/O操作から直接情報を取得することです。
マルチパスデーモンが実行中である場合、multipathd
コマンドを使用してシステムを変更することをお勧めします。このようにしないと、デーモンが設定の変更に気づき、変更に反応する場合があります。場合によっては、適用された変更をデーモンで元に戻そうとします。multipath
は、実行中のデーモンが検出された場合、マップの破棄やフラッシュなどの特定の危険性のあるコマンドをmultipathd
に自動的に委任します。
下記のリストでは、使用頻度が高いmultipathd
コマンドについて説明します。
- show topology
現在のマップトポロジとプロパティを表示します。18.14.2項 「マルチパスI/Oステータスの解釈」を参照してください。
- 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
を使用します(SUSE Linux Enterprise Server 15 SP4以降で使用できます。以前のバージョンではreconfigure
を使用してすべてのマップを再ロードしていました)。- del map MAP DEVICE NAME
指定されたマップデバイスとそのパーティションを設定解除し、削除します。MAP DEVICE NAMEには、
dm-0
などのデバイスノード名、WWID、またはマップ名を使用できます。このコマンドは、デバイスを使用中には失敗します。- switchgroup map MAP DEVICE NAME group N
指定の数値インデックスを持つパスグループに切り替えます(先頭は1)。これは、手動フェールバックを使用するマップに対して有用です(18.9項 「フェールオーバー、キュー格納、およびフェールバックのポリシーの設定」を参照)。
パス状態の変更、キューの有効化または無効化などを実行できるコマンドも利用できます。詳細についてはmultipathd(8)
を参照してください。
18.6.3 multipath
コマンド #
マルチパスのセットアップはほとんど自動化されており、multipathd
で処理されますが、multipath
も一部の管理タスクで依然として役立ちます。このコマンドの使用例を次に示します。
- multipath
パスデバイスを検出し、検出したすべてのマルチパスマップを設定します。
- multipath -d
multipath
に似ていますが、マップをセットアップしません(試行動作)。- multipath DEVICENAME
特定のマルチパスデバイスを設定します。DEVICENAMEは、デバイスノード名(
/dev/sdb
)またはデバイス番号(major:minor
フォーマット)でメンバーパスデバイスを示すことができます。または、WWIDやマルチパスマップの名前も使用できます。- multipath -f DEVICENAME
マルチパスマップとそのパーティションマッピングを設定解除(「フラッシュ」)します。そのパーティションのいずれかまたはマップが使用中の場合、このコマンドは失敗します。DEVICENAMEで使用できる値については上記を参照してください。
- multipath -F
すべてのマルチパスマップとそのパーティションマッピングを設定解除(「フラッシュ」)します。マップを使用中の場合、このコマンドは失敗します。
- multipath -ll
現在設定されているすべてのマルチパスデバイスのステータスとトポロジを表示します。18.14.2項 「マルチパスI/Oステータスの解釈」を参照してください。
- multipath -ll DEVICENAME
指定されたマルチパスデバイスのステータスを表示します。DEVICENAMEで使用できる値については上記を参照してください。
- multipath -t
マルチパスの内部ハードウェアテーブルとアクティブな設定を表示します。設定パラメータの詳細については、
multipath.conf(5)
を参照してください。- multipath -T
multipath -t
コマンドの機能と似ていますが、ホストで検出されたハードウェアと一致するハードウェアエントリのみを表示します。
-v
オプションによって、出力の詳細レベルが制御されます。指定した値によって、/etc/multipath.conf
のverbosity
オプションが上書きされます。18.13項 「その他のオプション」を参照してください。
18.6.4 SCSIの永続的な予約とmpathpersist
#
mpathpersist
ユーティリティを使用して、デバイスマッパーマルチパスのデバイスでSCSIの永続的な予約を管理します。永続的な予約を行うと、SCSIの論理ユニットへのアクセスが特定のSCSIイニシエータに制限されます。マルチパス設定では、指定ボリュームですべてのI_T関連付け(パス)に同じ予約キーを使用することが重要です。そのようにしないと、あるパスデバイスで予約を作成すると別のパスでI/Oエラーが発生する場合があります。
このユーティリティを/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.7 マルチパス処理用システムの設定 #
18.7.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 multipathd.socket
サービスを停止しても既存のマルチパスマップは削除されません。未使用マップを削除するには、次のコマンドを実行します。
>
sudo
multipath -F
multipathd.service
を常に有効にしておいてください
マルチパスハードウェアを備えたシステムでは、multipathd.service
を常に有効にして実行しておくことを強くお勧めします。このサービスは、systemd
のソケットアクティベーションメカニズムをサポートしていますが、このメカニズムに依存することはお勧めしません。このサービスが無効になっていると、マルチパスマップは起動時にセットアップされません。
上記の警告にもかかわらずマルチパスを無効にする必要がある場合(サードパーティのマルチパス処理ソフトウェアを導入するなど)、次のように進めます。マルチパスデバイスへのハードコード化された参照をシステムで使用していないことを確認します(18.15.2項 「デバイス参照の問題の理解」を参照)。
1回のシステムブートに対してのみマルチパス処理を無効にするには、カーネルパラメータのmultipath=off
を使用します。これはブートシステムとinitramfsの両方に影響します。この場合はinitramfsを再構築する必要はありません。
multipathdサービスを恒久的に無効にして、今後のシステムブートでこのサービスが開始されないようにするには、次のコマンドを実行します。
>
sudo
systemctl disable multipathd multipathd.socket>
sudo
dracut --force --omit multipath
(マルチパスサービスを無効または有効にするときには必ずinitramfs
を再構築してください。詳細については、18.7.4項 「initramfsの同期状態の維持」を参照してください。)
「multipath
を手動で実行するときにも」マルチパスデバイスが設定されないようにする場合は、initramfsを再構築する前に、/etc/multipath.conf
の最後に次の行を追加します。
blacklist { wwid .* }
18.7.2 マルチパス処理用SANデバイスの準備 #
SANデバイスのマルチパスI/Oを設定する前に、必要に応じて、次のようにSANデバイスを準備してください。
ベンダのツールで、SANデバイスを設定し、ゾーン化します。
ベンダのツールで、ストレージアレイ上のホストLUNのパーミッションを設定します。
SUSE Linux Enterprise Serverでホストバスアダプタ(HBA)用ドライバが同梱されていない場合、HBAベンダからLinuxドライバをインストールします。詳細については、ベンダの特定マニュアルを参照してください。
マルチパスデバイスが検出され、multipathd.service
が有効になっている場合、マルチパスマップは自動的に作成されるはずです。作成されない場合、18.15.3項 「緊急モードでのトラブルシューティング手順」に、状況の調査に使用できるシェルコマンドのリストが表示されます。LUNがHBAドライバによって認識されない場合は、SANのゾーン化セットアップをチェックします。特に、LUNのマスキングがアクティブであるかどうか、LUNがサーバに正しく割り当てられているかどうかをチェックしてください。
LUNがHBAドライバによって認識できるが、対応するブロックデバイスが作成されない場合は、追加のカーネルパラメータが必要な場合があります。SUSE KnowledgeのTID 3955167: Troubleshooting SCSI (LUN) Scanning Issues (https://www.suse.com/support/kb/doc.php?id=3955167)を参照してください。
18.7.3 マルチパスデバイスのパーティションとkpartx
#
マルチパスマップには、そのパスデバイスのようなパーティションを設けることができます。パーティションテーブルのスキャンとパーティションのデバイスノードの作成は、ユーザスペースでkpartx
ツールによって実行されます。kpartx
は、udevルールによって自動的に起動します。通常、手動での実行は不要です。マルチパスのパーティションを参照する方法については、18.12.4項 「マルチパスマップの参照」を参照してください。
kpartx
の起動の無効化
/etc/multipath.conf
のskip_kpartx
オプションを使用して、選択したマルチパスマップでのkpartx
の起動を無効にできます。たとえば、これは仮想化ホストで有用である場合があります。
マルチパスデバイス上のパーティションテーブルとパーティションは、YaSTまたはfdisk
やparted
などのツールを使用して、通常どおり操作できます。パーティションテーブルに適用する変更は、パーティション処理ツールが終了するとシステムによって記録されます。これが動作しない場合(デバイスがビジーであることが原因であることが多い)、multipathd
reconfigure
を試すか、またはシステムを再起動してください。
18.7.4 initramfsの同期状態の維持 #
初期RAMファイルシステム(initramfs)とブートシステムが、すべてのブロックデバイスのマルチパス処理の使用に関して一貫した動作をしていることを確認します。マルチパス設定の変更を適用した後にinitramfsを再構築します。
システムでマルチパス処理が有効になっている場合はinitramfs
でも有効にする必要があり、その逆も同様です。このルールの唯一の例外は18.3.2.2項 「ローカルディスクのルートファイルシステム」のオプションinitramfsでマルチパスを無効にするです。
マルチパス設定は、ブートシステムとinitramfsの間で同期する必要があります。したがって、/etc/multipath.conf
、/etc/multipath/wwids
、/etc/multipath/bindings
のいずれかのファイル、その他の設定ファイル、またはデバイスの識別に関係のあるudevルールを変更した場合、次のコマンドを使用してinitramfsを再構築します。
>
sudo
dracut -f
initramfs
とシステムが同期されていない場合、システムは正しくブートせず、起動手順を実行すると緊急シェルが起動する可能性があります。このようなシナリオを回避または修復する方法については、18.15項 「MPIOのトラブルシューティング」を参照してください。
18.7.4.1 initramfsでのマルチパス処理の有効化または無効化 #
initramfsが非標準的な状況で再構築される場合(カーネルパラメータのmultipath=off
を使用してブートした後やレスキューシステムからなど)、特別な注意が必要です。dracut
は、initramfsの構築中に、ルートファイルシステムがマルチパスデバイス上にあることを検出した場合にのみinitramfsにマルチパス処理サポートを自動的に組み込みます。このような場合、マルチパス処理を明示的に有効または無効にする必要があります。
initramfs
でマルチパスのサポートを有効にするには、次のコマンドを実行します。
>
sudo
dracut --force --add multipath
initramfs
でマルチパスのサポートを無効にするには、次のコマンドを実行します。
>
sudo
dracut --force --omit multipath
18.7.4.2 initramfsの永続的なデバイス名 #
dracut
がinitramfsを生成する際には、システムが確実に正しくブートするように、永続的な方法でマウントされるディスクとパーティションを参照する必要があります。dracut
でマルチパスデバイスを検出すると、この目的で、次のようなDM-MPデバイス名が使用されます。
/dev/mapper/3600a098000aad73f00000a3f5a275dc8-part1
これがデフォルトの動作です。これは、システムが「常に」マルチパスモードで実行されている場合には適切です。ただし、18.7.4.1項 「initramfsでのマルチパス処理の有効化または無効化」で説明しているようにマルチパス処理なしでシステムを起動した場合、/dev/mapper
デバイスが存在しないため、このようなinitramfsによる起動は失敗します。別の起こりうる問題シナリオと背景情報については、18.12.4項 「マルチパスマップの参照」を参照してください。
この問題が起こらないようにするには、--persistent-policy
オプションを使用して、dracut
の永続的なデバイス命名ポリシーを変更します。by-uuid
使用ポリシーを設定することをお勧めします。
>
sudo
dracut --force --omit multipath --persistent-policy=by-uuid
手順18.1「インストール後にルートディスクのマルチパス処理を無効にする」および18.15.2項 「デバイス参照の問題の理解」も参照してください。
18.8 マルチパス設定 #
組み込みのmultipath-tools
は、ほとんどのセットアップでデフォルトで正しく動作します。カスタマイズが必要な場合、設定ファイルを作成する必要があります。主要設定ファイルは/etc/multipath.conf
です。また、/etc/multipath/conf.d/
のファイルを考慮に入れます。詳細については、18.8.2.1項 「追加の設定ファイルと優先ルール」を参照してください。
一部のストレージベンダは、マルチパスオプションの推奨値をマニュアルで公開しています。これらの値は多くの場合、ベンダが自社の環境内でテストし、ストレージ製品に最適であると判断した値を表しています。18.2.2項 「マルチパス処理のストレージアレイ自動検出」の免責事項を参照してください。
multipath-tools
には、公開されたベンダ推奨値から抽出した多くのストレージアレイ用の組み込みのデフォルトがあります。multipath -T
を実行して、ご使用のデバイスの現在の設定を確認し、これをベンダの推奨値と比較します。
18.8.1 /etc/multipath.conf
の作成 #
変更する設定のみが含まれている最低限の/etc/multipath.conf
を作成することをお勧めします。多くの場合、/etc/multipath.conf
を作成する必要はありません。
考え得る設定ディレクティブすべてを含む設定テンプレートで作業したい場合、次のコマンドを実行します。
multipath -T >/etc/multipath.conf
18.14.1項 「設定のベストプラクティス」も参照してください。
18.8.2 multipath.conf
構文 #
/etc/multipath.conf
ファイルでは、セクション、サブセクション、およびオプション/値のペアの階層を使用します。
トークンは空白で区切られます。連続する空白文字は、引用符で囲まれていない限り1つの空白に圧縮されます((以下を参照)。
ハッシュ(
#
)文字と感嘆符(!
)文字により、行の残りの部分がコメントとして破棄されます。セクションとサブセクションは、同一行のセクション名と開き中括弧(
{
)で開始され、独自の行の閉じ中括弧(}
)で終了します。オプションと値は1行に書き込まれます。行の継続はサポートされていません。
オプションとセクション名はキーワードである必要があります。使用できるキーワードについては、
multipath.conf(5)
を参照してください。値は二重引用符(
"
)で囲むことができます。値に空白またはコメント文字が含まれている場合、その値を引用符で囲む必要があります。値の内側にある二重引用符文字は二重引用符のペア(""
)で表されます。一部のオプションの値はPOSIXの正規表現です(
regex(7)
を参照)。大文字と小文字が区別され、アンカーがないので「bar
」は「rhabarber
」と一致しますが、「Barbie」とは一致しません。
構文は、次のようにします。
section { subsection { option1 value option2 "complex value!" option3 "value with ""quoted"" word" } ! subsection end } # section end
18.8.2.1 追加の設定ファイルと優先ルール #
/etc/multipath.conf
の後、ツールは、パターン/etc/multipath.conf.d/*.conf
と一致するファイルを読み込みます。追加のファイルは/etc/multipath.conf
と同じ構文ルールに従います。セクションとオプションは複数回使用できます。「同じセクションの同じオプション」が複数のファイルで設定されたり、同じファイルの複数の行で設定されると、最後の値が優先されます。multipath.conf
セクション間には個別の優先ルールが適用されます。以下を参照してください。
18.8.3 multipath.conf
セクション #
/etc/multipath.conf
ファイルは、以下のセクションで構成されています。一部のオプションは複数のセクションで使用できます。詳細についてはmultipath.conf(5)
を参照してください。
- defaults
一般的なデフォルト設定。
重要: 組み込みのデバイスプロパティの上書き組み込みのハードウェア固有のデバイスプロパティは
defaults
セクションの設定より優先されます。したがって、変更は、devices
セクションまたはoverrides
セクションで行う必要があります。- blacklist
無視するデバイスをリストします。18.11.1項 「
multipath.conf
のblacklist
セクション」を参照してください。- blacklist_exceptions
マルチパス処理されるデバイスをリストします(ブラックリストに含まれている場合もリストされます)。18.11.1項 「
multipath.conf
のblacklist
セクション」を参照してください。- devices
ストレージコントローラ専用の設定。このセクションは
device
サブセクションのコレクションです。このセクションの値は、defaults
セクションの同じオプションの値、およびmultipath-tools
の組み込み設定を上書きします。devices
セクションのdevice
エントリは、正規表現を使用して、デバイスのベンダおよび製品と照合されます。これらのエントリは「マージ」され、デバイスに対して照合するセクションのすべてのオプションが設定されます。複数の照合するdevice
セクションで同じオプションが設定されている場合、最後のデバイスエントリが優先されます。それが前のエントリよりも「特定的」でない場合でも同様です。これは、照合するエントリが異なる設定ファイルに存在する場合でも適用されます(18.8.2.1項 「追加の設定ファイルと優先ルール」を参照)。次の例では、デバイスSOMECORP STORAGE
はfast_io_fail_tmo 15
を使用します。devices { device { vendor SOMECORP product STOR fast_io_fail_tmo 10 } device { vendor SOMECORP product .* fast_io_fail_tmo 15 } }
- multipaths
個々のマルチパスデバイスの設定。このセクションは
multipath
サブセクションのリストです。値はdefaults
セクションとdevices
セクションを上書きします。- 上書き
他のすべてのセクションの値を上書きする設定。
18.8.4 multipath.conf
の変更の適用 #
設定変更を適用するには、次のコマンドを実行します。
>
sudo
multipathd reconfigure
忘れずにinitramfsの設定と同期してください。18.7.4項 「initramfsの同期状態の維持」を参照してください。
multipath
を使用して設定を適用しない
multipath
を実行中にmultipathd
コマンドを使用して新しい設定を適用しないでください。適用すると、セットアップに一貫性がなくなり、セットアップが破損する可能性があります。
変更した設定を適用する前にテストできます。そのためには次のコマンドを実行します。
>
sudo
multipath -d -v2
このコマンドは、提案されたトポロジを使用して作成される新しいマップを表示しますが、マップが削除/フラッシュされるかどうかは表示しません。より多くの情報を得るには、詳細度を上げて次のコマンドを実行します。
>
sudo
multipath -d -v3 2>&1 | less
18.9 フェールオーバー、キュー格納、およびフェールバックのポリシーの設定 #
マルチパスI/Oの最終目標は、ストレージシステムとサーバ間のコネクティビティ耐障害性を提供することです。望ましいデフォルトの動作は、サーバがスタンドアロンのサーバか、高可用性クラスタ内のノードかによって異なります。
このセクションでは、耐障害性を実現するために最も重要なmultipath-tools
設定パラメータについて説明します。
- polling_interval
パスデバイスの正常性チェック間の間隔(秒単位)。デフォルトは5秒です。障害が発生したデバイスはこの間隔でチェックされます。デバイスが正常な場合、この間隔を最長
max_polling_interval
秒まで長くすることができます。- detect_checker
これが
yes
(デフォルト、推奨)に設定されている場合、multipathd
は、最適なパスチェックアルゴリズムを自動的に検出します。- path_checker
パスの状態のチェックに使用するアルゴリズム。チェッカーを有効にする必要がある場合、次のように
detect_checker
を無効にします。defaults { detect_checker no }
次のリストには、最も重要なアルゴリズムのみが含まれます。完全なリストについては、
multipath.conf(5)
を参照してください。- tur
TEST UNIT READYコマンドを送信します。これは、ALUAをサポートしているSCSIデバイスのデフォルトです。
- directio
非同期I/O (aio)を使用してデバイスセクタを読み取ります。
- rdac
NetAPP E-Seriesおよび同様のアレイ用のデバイス固有のチェッカー。
- none
パスチェックは実行されません。
- checker_timeout
デバイスがパスチェッカーコマンドに一定時間応答しない場合、失敗とみなされます。デフォルトは、デバイスに対するカーネルのSCSIコマンドのタイムアウトです(通常30秒)。
- fast_io_fail_tmo
SCSIトランスポートレイヤのエラーが(たとえば、ファイバチャネルのリモートポートで)検出されると、カーネルトランスポートレイヤは、トランスポートが回復するまでこの時間(秒単位)待機します。この時間経過後、パスデバイスは、「トランスポートオフライン」の状態で失敗します。これは、マルチパスでは非常に有用です。マルチパスでは、頻繁に発生するクラスのエラーに対してクイックパスフェールオーバーが許可されているためです。この値は、Fabricの再設定用に一般的なタイムスケールと一致している必要があります。デフォルト値の5秒は、ファイバチャネルでは正しく動作します。iSCSIなどのその他のトランスポートでは、より長いタイムアウトが必要な場合があります。
- dev_loss_tmo
SCSIトランスポートエンドポイント(たとえば、ファイバチャネルのリモートポート)に到達できなくなった場合、カーネルは、SCSIデバイスノードを完全に削除してポートが再表示されるまでこの時間(秒単位)待機します。デバイスノードの削除は複雑な操作であり、競合状態やデッドロックになりやすいため、避けるのが最善です。したがって、この値を大きい値に設定することをお勧めします。特別な値
infinity
がサポートされています。デフォルトは10分です。デッドロック状態を回避するために、multipathd
は、I/Oのキュー格納(no_path_retry
を参照)をdev_loss_tmo
の期限が切れる前に停止します。- 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秒間(= 6 * 5秒)格納し、時間が経過するとそのマップデバイスのI/Oは失敗します。
- flush_on_last_del
yes
に設定し、マップのすべてのパスデバイスが(単に失敗するだけではなく)削除される場合、マップのすべてのI/Oが失敗してから、マップを削除します。デフォルトはno
です。- deferred_remove
yes
に設定し、マップのすべてのパスデバイスが削除される場合、ホルダがマップデバイスのファイル記述子を閉じるのを待機してから、マップデバイスをフラッシュして削除します。最後のホルダがマップを閉じる前にパスが再表示された場合、延期された削除操作はキャンセルされます。デフォルトはno
です。- failback
非アクティブパスグループの失敗したパスデバイスが回復すると、
multipathd
は、すべてのパスグループのパスグループ優先度を再評価します(18.10項 「パスのグループ化と優先度の設定」を参照)。再評価後、優先度の最も高いパスグループが、現在非アクティブのパスグループの1つになる可能性があります。このパラメータによってこの状況での動作が決まります。重要: ベンダの推奨事項に従ってください最適なフェールバックポリシーは、ストレージデバイスの特性によって異なります。したがって、
failback
設定をストレージベンダに確認することを強くお勧めします。- manual
管理者が
multipathd switchgroup
を実行しない限り何も起こりません(18.6.2項 「multipathd
デーモン」を参照)。- immediate
優先度の最も高いパスグループがすぐにアクティブになります。これは多くの場合(特にスタンドアロンサーバでは)パフォーマンスの観点で有利ですが、パスグループの変更が負荷の大きい操作となるアレイには使用しないでください。
- followover
immediate
と同様ですが、アクティブになったばかりのパスのみがパスグループ内の正常なパスである場合のみフェールバックを実行します。これは、クラスタ構成の場合に有用です。別のノードが以前にフェールオーバーを要求していたときに、ノードが自動的にフェールバックしないようにします。- N
Nは正の整数です。優先度の最も高いパスグループをアクティブにする前にN個のポーリング間隔待機します。この間に優先度が再度変更されると、待機期間が新たに始まります。
- eh_deadline
デバイスからの応答がなく、SCSIコマンドがエラー応答なしにタイムアウトした場合に、SCSIエラー処理に費やされる時間(秒単位)のおおよその上限を設定します。期限が経過すると、カーネルはHBAを完全にリセットします。
/etc/multipath.conf
ファイルを変更した後、18.8.4項 「multipath.conf
の変更の適用」の説明に従って設定を適用します。
18.9.1 スタンドアロンサーバでのキューポリシー #
スタンドアロンサーバに対してマルチパスI/Oを設定する際は、no_path_retry
で値をqueue
に設定することにより、サーバのオペレーティングシステムを、I/Oエラーの受信から可能な限り保護することができます。この設定では、マルチパスのフェールオーバーが発生するまでメッセージはキューに入ります。「無限」のキューを望まない場合(上記を参照)、通常の状況下でストレージパスが回復するのに十分大きいとみなされる数値を選択します(上記を参照)。
18.9.2 クラスタ化されたサーバでのキューポリシー #
高可用性クラスタ内のノードに対してマルチパスI/Oを構成するときには、マルチパスでリソースのフェールオーバーをトリガするためにI/O障害が報告されるようにして、マルチパスのフェールオーバーが解決されるのを待たなくて済むようにするとよいでしょう。クラスタ環境では、no_path_retry
設定を、ストレージシステムへの接続が失われた場合に、クラスタノードがクラスタ検証プロセスに関連するI/Oエラー(ハートビート許容値の50%を推奨)を受信するように変更する必要があります。また、パスの障害によるリソースのピンポンを避けるため、マルチパスのfailback
をmanual
またはfollowover
に設定するとよいでしょう。
18.10 パスのグループ化と優先度の設定 #
マルチパスマップのパスデバイスは、「パスグループ」(「優先度グループ」とも呼ばれる)にグループ化されます。常に1つのパスグループのみがI/Oを受信します。multipathd
は、「優先度」をパスグループに割り当てます。アクティブなパスを持つパスグループの内、優先度の最も高いグループが、マップに設定されたフェールバックポリシーに応じてアクティブになります(18.9項 「フェールオーバー、キュー格納、およびフェールバックのポリシーの設定」を参照)。パスグループの優先度は、パスグループ内のアクティブなパスデバイスの優先度の平均です。パスデバイスの優先度は、デバイスのプロパティから計算される整数値です(以下のprio
オプションの説明を参照)。
このセクションでは、優先度の決定とパスのグループ化に関連するmultipath.conf
設定パラメータについて説明します。
- path_grouping_policy
パスをグループに結合するために使用する方法を指定します。最も重要なポリシーのみがここにリストされます。使用頻度の低いその他の値については、
multipath.conf(5)
を参照してください。- failover
パスグループごとに1つのパス。この設定は、従来の「アクティブ/パッシブ」ストレージアレイで有用です。
- multibus
1つのパスグループ内のすべてのパス。これは、従来の「アクティブ/パッシブ」アレイで有用です。
- group_by_prio
同じパス優先度のパスデバイスがグループ化されます。このオプションは、ALUAのように非対称アクセス状態をサポートする最新のアレイで有用です。
alua
またはsysfs
の優先度アルゴリズムと組み合わせて、multipathd
によってセットアップされる優先度グループは、ストレージアレイがALUA関連のSCSIコマンドを使用してレポートするプライマリターゲットポートグループと照合されます。
マルチパスマップのパスグループ化ポリシーは、同じポリシー名を使用して、次のコマンドで一時的に変更できます。
>
sudo
multipath -p POLICY_NAME MAP_NAME- marginal_pathgroups
on
またはfpin
に設定すると、「ぎりぎり」のパスデバイスは、別のパスグループに分類されます。これは、使用しているパスグループ化アルゴリズムとは無関係です。18.13.1項 「信頼性の低い(「ぎりぎりの」)パスデバイスの処理」を参照してください。- detect_prio
これが
yes
(デフォルト、推奨)に設定されている場合、multipathd
はストレージデバイスの優先度を設定するのに最適なアルゴリズムを自動的に検出して、prio
設定を無視します。実際には、これは、ALUAのサポートが検出された場合にsysfs
prioアルゴリズムを使用することを意味します。- prio
パスデバイスの優先度を導出する方法を決定します。これを上書きする場合、次のように
detect_prio
を無効にします。defaults { detect_prio no }
次のリストには、最も重要な方法のみが含まれます。他にもいくつかの方法が利用可能です。これらは主にレガシハードウェアをサポートするためのものです。完全なリストについては、
multipath.conf(5)
を参照してください。- alua
SCSI-3 ALUAアクセス状態を使用して、パス優先値を導出します。オプションの
exclusive_pref_bit
引数を使用して、ALUAの「優先プライマリターゲットポートグループ」(PREF)ビットが設定されているデバイスの動作を変更できます。prio alua prio_args exclusive_pref_bit
このオプションを設定すると、「優先」パスは、他のアクティブ/最適化パスを上回る優先度ボーナスを獲得します。このオプションを設定しないと、すべてのアクティブ/最適化パスは、同じ優先度を割り当てられます。
- sysfs
alua
と似ていますが、SCSIコマンドをデバイスに送信する代わりに、sysfs
からアクセス状態を取得します。これにより、alua
よりもI/O負荷が軽減されますが、ALUAがサポートされているすべてのストレージアレイに適しているわけではありません。- const
すべてのパスに定数値を使用します。
- path_latency
パスデバイスでI/Oレイテンシ(I/O送信から完了までの時間)を測定し、低レイテンシのデバイスに高い優先度を割り当てます。詳細については
multipath.conf(5)
を参照してください。このアルゴリズムはまだ実験段階です。- weightedpath
名前、シリアル番号、Host:Bus:Target:Lun ID (HBTL)、またはファイバチャネルWWNに基づいて優先度をパスに割り当てます。優先度の値は時間が経過しても変化しません。この方法では、引数
prio_args
が必要です。詳細については、multipath.conf(5)
を参照してください。例:prio weightedpath prio_args "hbtl 2:.*:.*:.* 10 hbtl 3:.*:.*:.* 20 hbtl .* 1"
これは、SCSIホスト3のデバイスにSCSIホスト2のデバイスより高い優先度を割り当て、他のすべてに低い優先度を割り当てています。
- prio_args
一部の
prio
アルゴリズムは、追加の引数が必要です。これらはこのオプションで指定されます。構文はアルゴリズムによって決まります。詳細については上記の説明を参照してください。- hardware_handler
パスグループを切り替えるときにパスデバイスをアクティブ化するためにカーネルが使用するカーネルモジュールの名前。このオプションは、最新のカーネルでは効果がありません。最新のカーネルでは、ハードウェアハンドラが自動検出されるためです。18.2.3項 「特定のハードウェアハンドラを必要とするストレージアレイ」を参照してください。
- path_selector
アクティブパスグループのパス間のロードバランシングに使用するカーネルモジュールの名前。利用可能な選択肢は、カーネル設定によって決まります。過去の経緯から、
multipath.conf
では名前は常に引用符で囲み、その後に「0」を付ける必要があります。次に例を示します。path_selector "queue-length 0"
- service-time
すべてのパスで保留中のI/Oが完了するために必要な時間を推定し、最小値のパスを選択します。これがデフォルトの設定です。
- historical-service-time
過去のサービス時間(移動平均を保持する時間)、および未処理の要求数に基づいて、将来のサービス時間を推定します。すべてのパスで保留中のI/Oが完了するために必要な時間を推定し、最小値のパスを選択します。
- queue-length
現在保留中のI/O要求が最も少ないパスを選択します。
- round-robin
ラウンドロビン方式でパスを切り替えます。次のパスに切り替わる前に、そのパスに送信される要求数は、
rr_min_io_rq
とrr_weight
オプションで調整できます。- io-affinity
このパスセレクタは、現時点では
multipath-tools
では機能しません。
/etc/multipath.conf
ファイルを変更した後、18.8.4項 「multipath.conf
の変更の適用」の説明に従って設定を適用します。
18.11 マルチパス処理のためのデバイスの選択 #
マルチパスデバイスを含むシステムでは、一部のデバイス(通常はローカルディスク)でのマルチパスマップのセットアップを避けた方がよい場合があります。multipath-tools
は、どのデバイスをマルチパスのパスデバイスとみなすかを設定するためのさまざまな方法を提供します。
通常、ローカルディスクの上にデバイスが1つだけある「ディグレード」マルチパスマップをセットアップしても問題ありません。これは正常に動作し、追加の設定は不要です。しかし、管理者の中にはこれを分かりにくいと感じたり、一般的にこの種の不必要なマルチパス処理に反対したりする人もいます。また、マルチパスレイヤを使用すると、パフォーマンスにわずかなオーバーヘッドが生じます。18.3.2.2項 「ローカルディスクのルートファイルシステム」も参照してください。
/etc/multipath.conf
ファイルを変更した後、18.8.4項 「multipath.conf
の変更の適用」の説明に従って設定を適用します。
18.11.1 multipath.conf
のblacklist
セクション #
/etc/multipath.conf
ファイルには、multipathd
とmultipath
で無視する必要があるすべてのデバイスを列挙するblacklist
セクションを含めることができます。次の例は、デバイスを除外する考えられる方法を示しています。
blacklist { wwid 3600605b009e7ed501f0e45370aaeb77f 1 device { 2 vendor ATA product .* } protocol scsi:sas 3 property SCSI_IDENT_LUN_T10 4 devnode "!^dasd[a-z]*" 5 }
| |
この | |
この形式はSLES 15 SP1およびSLES 12 SP5以降でサポートされています。 | |
この | |
この例では |
デフォルトでは、multipath-tools
は、SCSI、DASDまたはNVMeを除くすべてのデバイスを無視します。技術的には、組み込みのdevnode除外リストは、次の否定された正規表現です。
devnode !^(sd[a-z]|dasd[a-z]|nvme[0-9])
18.11.2 multipath.conf
のblacklist exceptions
セクション #
特定のデバイスのみをマルチパス処理用に設定することが望ましい場合があります。この場合、デバイスはデフォルトで除外され、マルチパスマップの一部となるデバイスに対して例外が定義されます。この目的でblacklist_exceptions
セクションが存在します。これは通常、次の例のように使用されます。この例では、製品文字列「NETAPP」のストレージを除くすべてが除外されます。
blacklist { wwid .* } blacklist_exceptions { device { vendor ^NETAPP$ product .* } }
blacklist_exceptions
セクションでは、上記のblacklist
セクションで説明されているすべての方法がサポートされます。
blacklist_exceptions
のproperty
ディレクティブは必須です。なぜなら、マルチパスのパスデバイスとみなされるために、すべてのデバイスは少なくとも1つの「許可された」udevプロパティを持つ「必要がある」ためです(プロパティの値は重要ではありません)。property
の組み込みのデフォルトは次のとおりです。
property (SCSI_IDENT_|ID_WWN)
この正規表現に一致するudevプロパティを少なくとも1つ持つデバイスのみが含まれます。
18.11.3 デバイスの選択に影響するその他のオプション #
blacklist
オプション以外にも、/etc/multipath.conf
には、どのデバイスをマルチパスのパスデバイスとみなすかに影響するその他の設定がいくつかあります。
- find_multipaths
このオプションは、除外されないデバイスが最初に検出された場合の
multipath
とmultipathd
の動作を制御します。次の値を使用できます。- greedy
/etc/multipath.conf
のblacklist
によって除外されないすべてのデバイスが含まれます。これは、SUSE Linux Enterpriseのデフォルトです。この設定がアクティブの場合、マルチパスマップへのデバイスの追加を防ぐ唯一の方法は、デバイスを除外と設定することです。- strict
すべてのデバイスは、
/etc/multipath.conf
のblacklist
セクションに存在しなくても、そのWWIDが/etc/multipath/wwids
ファイルにリストされていない限り、除外されます。これには、WWIDファイルの手動メンテナンスが必要です(下記の注意事項を参照)。- yes
デバイスは、
strict
の条件を満たしている場合、または同じWWIDを持つ他のデバイスがシステム内に少なくとも1つ存在する場合に含まれます。- smart
新しいWWIDを初めて検出した場合、これは、マルチパスのパスデバイスとして一時的にマークされます。
multipathd
は、同じWWIDを持つ追加のパスが現れるまでしばらく待機します。現れると、マルチパスマップは通常どおりにセットアップされます。それ以外の場合、タイムアウトになると、1つのデバイスが非マルチパスデバイスとしてシステムにリリースされます。タイムアウトは、オプションfind_multipaths_timeout
を使用して設定できます。このオプションは、SUSE Linux Enterprise Server 15でのみ利用できる
systemd
機能に依存します。
注記:/etc/multipath/wwids
の管理multipath-tools
は、前にセットアップしたマルチパスマップの記録をファイル/etc/multipath/wwids
(「WWIDsファイル」)に保持します。このファイルにリストされているWWIDを持つデバイスは、マルチパスのパスデバイスとみなされます。このファイルは、greedy
を除くfind_multipaths
のすべての値に対して、マルチパスデバイスの選択に重要です。find_multipaths
がyes
またはsmart
に設定されている場合、multipathd
は、新しいマップをセットアップした後にWWIDを/etc/multipath/wwids
に追加します。これにより、今後これらのマップはより迅速に検出されるようになります。WWIDファイルは、手動で変更できます。
>
sudo
multipath -a 3600a098000aad1e3000064e45f2c2355 1>
sudo
multipath -w /dev/sdf 2strict
モードでは、これが新しいマルチパスデバイスを追加する唯一の方法です。WWIDファイルを変更した後、multipathd reconfigure
を実行して変更を適用します。変更をWWIDファイルに適用した後にinitramfsを再構築することをお勧めします(18.7.4項 「initramfsの同期状態の維持」を参照)。- allow_usb_devices
このオプションが
yes
に設定されている場合、USBストレージデバイスはマルチパス処理用とみなされます。デフォルトはno
です。
18.12 マルチパスデバイス名とWWID #
multipathd
とmultipath
は、WWIDを内部的に使用して、デバイスを識別します。WWIDは、デフォルトではマップ名としても使用されます。便宜上、multipath-tools
は、よりシンプルで簡単に覚えることができる名前のマルチパスデバイスへの割り当てをサポートしています。
18.12.1 WWIDとデバイスの識別 #
マルチパス操作では、同じストレージボリュームへのパスを表すデバイス検出の信頼性が高いことが非常に重要です。multipath-tools
は、この目的でデバイスのWWID (World Wide Identification: ワールドワイドID)を使用します(これはUUID (Universally Unique ID: ユニバーサルユニークIDまたはUID (Unique ID: ユニークID)と呼ばれることもあります(ユーザIDと混同しないでください)。マップデバイスのWWIDは、常にそのパスデバイスのWWIDと同じです。
デフォルトでは、パスデバイスのWWIDは、sysfsファイルシステムからデバイスの属性を読み取ることによって、または固有のI/Oコマンドを使用して、udevルールで決定されるデバイスのudevプロパティから推測されます。デバイスのudevプロパティを確認するには、次のコマンドを実行します。
>
udevadm info /dev/sdx
WWIDを導出するためにmultipath-tools
によって使用されるudevプロパティを次に示します。
SCSIデバイスの
ID_SERIAL
(これをデバイスの「シリアル番号」と混同しないでください)DASDデバイスの
ID_UID
NVMeデバイスの
ID_WWN
使用中のマルチパスマップのWWIDは変更できません。設定の変更により、マップされたパスデバイスのWWIDが変更された場合は、マップを破棄し、新しいWWIDで新しいマップをセットアップする必要があります。これは、古いマップを使用中には実行できません。極端な場合、WWIDの変更によってデータが破損する可能性があります。したがって、マップのWWIDが変更される結果となる設定変更の適用は、「厳格に回避する」必要があります。
/etc/multipath.conf
でuid_attrs
オプションを有効にすることは許可されています。18.13項 「その他のオプション」を参照してください。
18.12.2 マルチパスマップのエイリアスの設定 #
/etc/multipath.conf
のmultipaths
セクションで、次のように任意のマップ名を設定できます。
multipaths { multipath { wwid 3600a098000aad1e3000064e45f2c2355 alias postgres } }
エイリアスは表現力が豊かですが、各マップに個別に割り当てる必要があるため、大規模なシステムでは面倒な場合があります。
18.12.3 自動生成されるユーザフレンドリ名の使用 #
multipath-tools
は、自動生成されたエイリアス、いわゆる「ユーザフレンドリ名」もサポートしています。エイリアスの命名規則は、mpathINDEXというパターンに従います。ここでINDEXは小文字です(a
で始まります)。したがって、最初に自動生成されるエイリアスはmpatha
で、その後mpathb
、mpathc
と続き、mpathz
まで続きます。その後は、mpathaa
、mpathab
などが続きます。
マップ名は、永続的である場合のみ有用です。multipath-tools
は、/etc/multipath/bindings
ファイル(「バインディングファイル」)で割り当てられた名前を追跡します。新しいマップが作成されると、最初にこのファイルでWWIDが検索されます。WWIDが見つからない場合、最も可用性が低いユーザフレンドリ名がこれに割り当てられます。
18.12.2項 「マルチパスマップのエイリアスの設定」で説明されているように、明示的なエイリアスがユーザフレンドリ名よりも優先されます。
/etc/multipath.conf
の次のオプションは、ユーザフレンドリ名に影響します。
- user_friendly_names
yes
に設定すると、ユーザフレンドリ名が割り当てられ、使用されます。それ以外の場合、エイリアスが設定されていない限り、WWIDがマップ名として使用されます。- alias_prefix
ユーザフレンドリ名を作成するために使用するプレフィクス。デフォルトでは
mpath
です。
クラスタ操作では、クラスタ内のすべてのノードにわたってデバイス名を同じにする必要があります。multipath-tools
の設定は、ノード間で同期状態を保つ必要があります。user_friendly_names
を使用している場合、multipathd
は実行時に/etc/multipath/bindings
ファイルを変更する可能性があります。このような変更は、すべてのノードに対して動的に複製する必要があります。同じことが/etc/multipath/wwids
にも当てはまります(18.11.3項 「デバイスの選択に影響するその他のオプション」を参照)。
実行時にマップ名を変更できます。このセクションで説明されている方法のいずれかを使用して、multipathd
reconfigure
を実行すると、システム操作を妨げることなくマップ名が変更されます。
18.12.4 マルチパスマップの参照 #
技術的には、マルチパスマップは、デバイスマッパーデバイスです。これには、/dev/dm-n
という形式の汎用名があります(nは整数)。これらの名前は永続的ではありません。これらは、マルチパスマップを参照するために使用「しない」でください。udev
を実行すると、これらのデバイスへのさまざまなシンボリックリンクが作成されます。これらは、永続的な参照としてより適切です。これらのリンクは、特定の設定変更に対する不変性の点で異なります。次の一般的な例は、すべて同じデバイスを指しているさまざまなシンボリックリンクを示しています。
/dev/disk/by-id/dm-name-mpathb1 -> ../../dm-1 /dev/disk/by-id/dm-uuid-mpath-3600a098000aad73f00000a3f5a275dc82 -> ../../dm-1 /dev/disk/by-id/scsi-3600a098000aad73f00000a3f5a275dc83 -> ../../dm-1 /dev/disk/by-id/wwn-0x600a098000aad73f00000a3f5a275dc84 -> ../../dm-1 /dev/mapper/mpathb5 -> ../dm-1
これら2つのリンクは、マップ名を使用してマップを参照します。したがって、マップ名が変更されるとリンクも変更されます(たとえば、ユーザフレンドリ名を有効または無効にした場合)。 | |
このリンクは、デバイスマッパーUUIDを使用します。これは、
デバイスマッパーUUIDは、確実に「マルチパスデバイスのみ」が参照されるようにするために推奨される形式です。たとえば、 filter = [ "a|/dev/disk/by-id/dm-uuid-mpath-.*|", "r|.*|" ] | |
これらは、通常パスデバイスを指すリンクです。マルチパスデバイスは、udevリンクの優先度が高いため、これらを引き継ぎました( |
kpartx
ツールで作成されたマルチパスマップ上の「パーティション」の場合、親デバイス名またはWWIDとパーティション番号から派生した同様のシンボリックリンクがあります。
/dev/disk/by-id/dm-name-mpatha-part2 -> ../../dm-5 /dev/disk/by-id/dm-uuid-part2-mpath-3600a098000aad1e300000b4b5a275d45 -> ../../dm-5 /dev/disk/by-id/scsi-3600a098000aad1e300000b4b5a275d45-part2 -> ../../dm-5 /dev/disk/by-id/wwn-0x600a098000aad1e300000b4b5a275d45-part2 -> ../../dm-5 /dev/disk/by-partuuid/1c2f70e0-fb91-49f5-8260-38eacaf7992b -> ../../dm-5 /dev/disk/by-uuid/f67c49e9-3cf2-4bb7-8991-63568cb840a4 -> ../../dm-5 /dev/mapper/mpatha-part2 -> ../dm-5
パーティションにはby-uuid
リンクもあることが多く、デバイス自体を参照するのではなく、デバイスに含まれているファイルシステムを参照します。多くの場合、これらのリンクが推奨されます。これらは、ファイルシステムが別のデバイスまたはパーティションにコピーされても不変です。
dracut
は、initramfsを構築するとき、initramfsのデバイスへのハードコード化された参照を作成します。デフォルトでは、/dev/mapper/$MAP_NAME
参照を使用します。これらのハードコード化された参照は、initramfsで使用されているマップ名がinitramfs構築中に使用した名前と一致しない場合、起動中には見つからず、起動エラーになります。通常、この状況にはなりません。その理由は、dracut
がすべてのマルチパス設定ファイルをinitramfsに追加するためです。ただし、initramfsが異なる環境(レスキューシステム、またはオフライン更新中など)から構築されている場合、この問題が発生する可能性があります。この起動エラーが発生しないようにするには、18.7.4.2項 「initramfsの永続的なデバイス名」で説明されているように、dracut
のpersistent_policy
設定を変更します。
18.13 その他のオプション #
このセクションでは、これまでに説明しなかった有用ないくつかのmultipath.conf
オプションを一覧表示します。完全なリストについては、multipath.conf(5)
を参照してください。
- verbosity
multipath
とmultipathd
両方のログ詳細度を制御します。コマンドラインオプション-v
を使用すると、両方のコマンドについてこの設定が上書きされます。この値は、0 (致命的なエラーのみ)と4 (詳細なログ記録)の間で設定できます。デフォルトは2です。- uid_attrs
このオプションを使用すると、udevイベントの処理を最適化できます(いわゆる「ueventマージ」)。これは、数百のパスデバイスが同時に障害を起こしたり同時に再検出されたりする環境で有用です。パスのWWIDが変更されないようにするためには(18.12.1項 「WWIDとデバイスの識別」を参照)、この値を正確に次のように設定する必要があります。
defaults { uid_attrs "sd:ID_SERIAL dasd:ID_UID nvme:ID_WWN" }
- skip_kpartx
マルチパスデバイスで
yes
に設定する場合(デフォルトはno
)、指定したデバイスの上にパーティションデバイスを作成しないでください(18.7.3項 「マルチパスデバイスのパーティションとkpartx
」を参照)。仮想マシンによって使用されるマルチパスデバイスで有用です。以前のSUSE Linux Enterprise Serverリリースでは、同じ効果をパラメータ「features 1 no_partitions
」を使用して実現していました。- max_sectors_kb
マルチパスマップのすべてのパスデバイスに対して1つのI/O要求で送信される最大データ量を制限します。
- ghost_delay
アクティブ/パッシブアレイで、アクティブパスの前にパッシブパス(「ゴースト」状態)が検出される場合があります。マップが直ちにアクティブ化され、I/Oが送信された場合、これにより、負荷の大きいパスのアクティブ化が実行される可能性があります。このパラメータは、マップをアクティブにする前に、マップのアクティブパスが表示されるまでに待機する時間(秒単位)を指定します。デフォルトは
no
(ゴースト遅延なし)です。- recheck_wwid
yes
に設定されている場合(デフォルトはno
)、障害発生後に復元されたパスのWWIDをダブルチェックし、WWIDが変更された場合はパスを削除します。これはデータの破損を防ぐための安全対策です。- enable_foreign
multipath-tools
は、デバイスマッパーのマルチパス以外のマルチパス処理バックエンド用にプラグインAPIを提供します。このAPIは、multipath -ll
のような標準コマンドを使用して、マルチパストポロジに関する情報の監視および表示をサポートしています。トポロジの変更はサポートされていません。enable_foreign
の値は、外部のライブラリ名と照合するための正規表現です。デフォルト値は「NONE
」です。SUSE Linux Enterprise Serverには、ネイティブNVMeマルチパス処理のサポートを追加する
nvme
プラグインが備わっています(18.2.1項 「マルチパスの実装: デバイスマッパーとNVMe」を参照)。nvme
プラグインを有効にするには、次のように設定します。defaults { enable_foreign nvme }
18.13.1 信頼性の低い(「ぎりぎりの」)パスデバイスの処理 #
Fabricの状態が不安定だと、パスデバイスの動作が不安定になる可能性があります。I/Oエラーの発生、回復、障害の再発が頻繁に起こります。このようなパスデバイスは、「ぎりぎりの」または「不安定な」パスと呼ばれることもあります。このセクションでは、この問題に対処するためにmultipath-tools
が提供するオプションをまとめています。
パスデバイスで、最初の失敗が発生してからmarginal_path_double_failed_time
が経過する前に、2回目の失敗(良好→不良の移行)が発生した場合、multipathd
は、監視期間marginal_path_err_sample_time
の間、1秒あたり10回の要求の速度でパスの監視を開始します。監視期間中のエラー率がmarginal_path_err_rate_threshold
を超えると、このパスはぎりぎりに分類されます。marginal_path_err_recheck_gap_time
経過後、パスは、再び通常状態に移行します。
このアルゴリズムは、4つの数値パラメータmarginal_path_
がすべて正の値に設定されていて、marginal_pathgroups
がfpin
に設定されていない場合に使用されます。これは、SUSE Linux Enterprise Server 15 SP1およびSUSE Linux Enterprise Server 12 SP5以降で利用できます。
- marginal_path_double_failed_time
パス監視をトリガする2回のパスの失敗間の最大時間(秒単位)。
- marginal_path_err_sample_time
パス監視間隔の長さ(秒単位)。
- marginal_path_err_rate_threshold
最小エラー率(I/O 1000回あたり)。
- marginal_path_err_recheck_gap_time
パスをぎりぎりの状態に保つ時間(秒単位)。
- marginal_pathgroups
このオプションは、SLES 15SP3以降使用できます。次の値を使用できます。
- off
ぎりぎりの状態は
multipathd
によって決まります(上記を参照)。ぎりぎりのパスは、ぎりぎりの状態である限り、復帰しません。これはデフォルトであり、marginal_pathgroups
オプションが利用できなかったSUSE Linux Enterprise ServerのSP3より前のリリースにおける動作です。- on
off
オプションと似ていますが、ぎりぎりのパスを失敗状態のままにするのではなく、別のパスグループに移動します。このグループは、他のすべてのパスグループより低い優先度を割り当てられます(18.10項 「パスのグループ化と優先度の設定」を参照)。このパスグループのパスは、他のパスグループのすべてのパスが失敗した場合のみI/Oに使用されます。- fpin
この設定は、SLES 15SP4以降使用できます。ぎりぎりのパス状態は、FPINイベントから導出されます(以下を参照)。ぎりぎりのパスは、
off
の説明と同様に別のパスグループに移動します。この設定では、ホスト側の追加設定は不要です。これは、FPINをサポートしているファイバチャネルファブリックでぎりぎりのパスを処理する場合に推奨される方法です。注記: FPINベースのぎりぎりのパス検出multipathd
は、FPIN (Fibre Channel Performance Impact Notifications: ファイバチャネルのパフォーマンスへの影響通知)をリスンします。パスデバイスに対してFPIN-LI (リンクの完全性)イベントを受信すると、パスは、ぎりぎりの状態になります。この状態は、RSCNまたはリンクアップイベントが、デバイスの接続先のファイバチャネルアダプタで受信されるまで継続します。
パラメータsan_path_err_threshold
、san_path_err_forget_rate
、およびsan_path_err_recovery time
を使用したより単純なアルゴリズムも利用可能で、SUSE Linux Enterprise Server 15 (GA)で推奨されています。multipath.conf(5)
の「不安定なパスの検出」セクションを参照してください。
18.14 ベストプラクティス #
18.14.1 設定のベストプラクティス #
設定ディレクティブの数が多いと最初は気後れします。通常、クラスタ環境で作業していない限り、空の設定で良い結果を得ることができます。
ここでは、スタンドアロンサーバの一般的な推奨事項を紹介します。これらは「必須ではありません」。背景情報については、前の各セクションの該当するパラメータのマニュアルを参照してください。
defaults { deferred_remove yes find_multipaths smart enable_foreign nvme marginal_pathgroups fpin # 15.4 only, if supported by fabric } devices { # A catch-all device entry. device { vendor .* product .* dev_loss_tmo infinity no_path_retry 60 # 5 minutes path_grouping_policy group_by_prio path_selector "historical-service-time 0" reservation_key file # if using SCSI persistent reservations } # Follow up with specific device entries below, they will take precedence. }
/etc/multipath.conf
ファイルを変更した後、18.8.4項 「multipath.conf
の変更の適用」の説明に従って設定を適用します。
18.14.2 マルチパスI/Oステータスの解釈 #
マルチパスサブシステムの概要を簡単に確認するには、multipath
-ll
またはmultipathd show topology
を使用します。これらのコマンドの出力の形式は同じです。前のコマンドはカーネルの状態を読み取り、後のコマンドはマルチパスデーモンのステータスを出力します。通常、両方の状態は同じです。出力の一例を次に示します。
>
sudo
multipathd show topology mpatha1 (3600a098000aad1e300000b4b5a275d452) dm-03 NETAPP,INF-01-004 size=64G features='3 queue_if_no_path pg_init_retries 50'5 hwhandler='1 alua'6 wp=rw7 |-+- 8policy='historical-service-time 2'9 prio=5010 status=active11 | |-12 3:0:0:113 sdb 8:1614 active15 ready16 running17 | `- 4:0:0:1 sdf 8:80 active ready running `-+- policy='historical-service-time 2' prio=10 status=enabled `- 4:0:1:1 sdj 8:144 active ready running
マップ名。 | |
マップのWWID (マップ名と違う場合)。 | |
マップデバイスのデバイスノード名。 | |
ベンダと製品名。 | |
パスグループ。パスグループの下のインデントされた行には、このグループに属しているパスデバイスがリストされます。 | |
パスグループで使用されるパスセレクタアルゴリズム。「2」は無視できます。 | |
パスグループの優先度。 | |
パスグループのステータス( | |
パスデバイス。 | |
デバイスのバスID(ここでは、SCSI Host:Bus:Target:Lun ID)。 | |
デバイスノード名とパスデバイスのメジャー/マイナー番号。 | |
パスのカーネルデバイスマッパー状態( | |
マルチパスのパスデバイスの状態(以下を参照)。 | |
カーネルのパスデバイスの状態。これはデバイスタイプ固有の値です。SCSIでは、これは |
マルチパスのパスデバイスの状態を次に示します。
|
パスは正常で、稼働しています |
|
アクティブ/パッシブアレイのパッシブパス |
|
パスがダウンしているか、到達できません |
|
チェッカーコマンドがタイムアウトしています |
|
パスチェッカーコマンドの完了を待っています |
|
「フラッピング」を回避するためにパスの再インスタンス化が遅延しています |
|
信頼性の低いパス(emcパスチェッカーのみ) |
18.14.3 マルチパスデバイスでのLVM2の使用 #
LVM2には、マルチパスデバイスを検出するためのサポートが組み込まれています。これは/etc/lvm/lvm.conf
でデフォルトでアクティブになっています。
multipath_component_detection=1
これは、デバイスのプロパティに関する情報もudevから取得するようにLVM2が設定されている場合のみ安定して動作します。
external_device_info_source="udev"
これは、SUSE Linux Enterprise 15 SP4ではデフォルトですが、以前のリリースでは違います。マルチパスデバイスを除くすべてのデバイスを無視するLVM2のフィルタ式を作成することも可能です(通常は不要です)。18.12.4項 「マルチパスマップの参照」を参照してください。
18.14.4 停止したI/Oの解決 #
すべてのパスで同時に障害が発生し、I/Oがキューに格納される場合、アプリケーションが長時間停止する可能性があります。これを解決するために、次の手順を使用できます。
端末のプロンプトで、次のコマンドを入力します。
>
sudo
multipathd disablequeueing map MAPNAMEMAPNAME
をデバイスの正しいWWIDまたはマップされたエイリアス名で置き換えます。このコマンドにより、待ち行列で待機中のすべてのI/Oがエラーとなり、エラーが呼び出し側アプリケーションにプロパゲートします。ファイルシステムはI/Oエラーを監視し、読み込み専用モードに切り替わります。
次のコマンドを入力して、キューを再びアクティブにします。
>
sudo
multipathd restorequeueing MAPNAME
18.14.5 マルチパスデバイスのMD RAID #
マルチパス処理の上部でMD RAIDアレイは、システムのudevルールによって自動的にセットアップされます。/etc/mdadm.conf
の特別な設定は不要です。
18.14.6 新規デバイスのスキャン(再起動なし) #
ご使用のシステムがマルチパス処理用に設定されており、SANにストレージを追加する必要がある場合は、rescan-scsi-bus.sh
スクリプトを使用して新しいデバイスをスキャンすることができます。コマンドの一般的な構文は次の例に従います。
>
sudo
rescan-scsi-bus.sh [-a] [-r] --hosts=2-3,5
各オプションには次のような意味があります。
- -a
このオプションを使用すると、すべてのSCSIターゲットがスキャンされます。使用しないと、既存のターゲットのみが新しいLUNに対してスキャンされます。
- -r
このオプションを使用すると、ストレージ側で削除されたデバイスを削除できます。
- --hosts
このオプションを使用すると、スキャンするホストバスアダプタのリストが指定されます(デフォルトはすべてスキャン)。
その他のオプションのヘルプを表示するには、rescan-scsi-bus.sh --help
を実行します。
multipathd
が実行中で、新しいSANデバイスが検出される場合、18.11項 「マルチパス処理のためのデバイスの選択」で説明されている設定に従って、マルチパスマップとして自動的にセットアップされるはずです。
EMC PowerPath環境では、SCSIバスをスキャンする場合に、オペレーティングシステムに付属するrescan-scsi-bus.sh
ユーティリティまたはHBAベンダスクリプトを使用しないでください。ファイルシステムが破損する可能性を避けるため、EMCでは、Linux用EMC PowerPathのベンダマニュアルに記載されている手順に従うよう求めています。
18.15 MPIOのトラブルシューティング #
マルチパスを含むシステムでシステムが緊急モードになり、見つからないデバイスに関するメッセージが出力される場合、その理由はほとんどの場合、次のいずれかです。
マルチパスデバイス選択の設定に整合性がない
存在しないデバイス参照を使用している
18.15.1 デバイス選択の問題の理解 #
ブロックデバイスは、マルチパスマップの一部にするか、または直接使用(ファイルシステムとしてマウント、スワップとして使用、LVM物理モジュール、その他)することができます。デバイスがすでにマウントされている場合、これをmultipathdでマルチパスマップの一部にしようとすると失敗し、「デバイスまたはリソースがビジーです」(Device or resource busy)というエラーが表示されます。逆に、すでにマルチパスマップの一部になっているデバイスをsystemd
がマウントしようとすると同じエラーが発生します。
起動中のストレージデバイスのアクティブ化は、systemd
、udev
、multipathd
および他のいくつかのツール間の複雑なやりとりで処理されます。udev
ルールが中心的な役割を果たします。これらは、デバイスの使用方法を他のサブシステムに指示するデバイスのプロパティを設定します。マルチパス関連のudevルールは、マルチパス処理用に選択されたデバイスに対して次のプロパティを設定します。
SYSTEMD_READY=0 DM_MULTIPATH_DEVICE_PATH=1
パーティションデバイスは、これらのプロパティをその親から継承します。
これらのプロパティが正しく設定されていない場合、一部のツールがこれらのプロパティに従っていない場合、またはプロパティが設定されるのが遅すぎる場合、multipathd
と他のサブシステムとの間で競合状態が発生する可能性があります。競合に勝ち残れるのは1つだけです。それ以外は、「デバイスまたはリソースがビジーです」(Device or resource busy)というエラーが表示されます。
このコンテキストにおける1つの問題は、LVM2スイートのツールがデフォルトではudevプロパティを評価しないことです。これらは、デバイスがマルチパスコンポーネントかどうかを判定する独自のロジックを使用しますが、このロジックは、システムの残りの部分のロジックと一致しない場合があります。この回避方法は、18.14.3項 「マルチパスデバイスでのLVM2の使用」で説明されています。
ルートデバイスがマルチパス処理されておらず、マルチパスから除外されているデバイスがない、マルチパス処理を備えたシステムを考えてみます(18.3.2.2項 「ローカルディスクのルートファイルシステム」のinitramfsでマルチパスを無効にするを参照)。このルートファイルシステムはinitramfsにマウントされています。systemd
はルートファイルシステムに切り換わり、multipathd
が起動します。デバイスがすでにマウントされているため、multipathd
は、そのデバイスのマルチパスマップをセットアップできません。ルートデバイスはblacklist
で設定されていないため、マルチパスデバイスとみなされ、このデバイス用にSYSTEMD_READY=0
が設定されます。
起動プロセスの後半で、システムは、/var
や/home
などの追加のファイルシステムをマウントしようとします。通常、これらのファイルシステムはルートファイルシステムと同じデバイス上にあり、デフォルトではルートファイルシステム自体のBTRFSサブボリュームとして配置されます。ただし、systemdは、SYSTEMD_READY=0
のためにこれらをマウントできません。「デッドロック状態」: dm-multipathデバイスを作成できず、systemdの基礎となるデバイスはブロックされます。追加のファイルシステムをマウントできず、起動に失敗します。
この問題の解決策はすでに存在します。 multipathd
はこの状況を検出し、デバイスをsystemd
にリリースします。これにより、ファイルシステムのマウントを続行できます。ただし、一般的な問題を理解することが重要です。より分かりにくい形で発生する可能性もあるからです。
18.15.2 デバイス参照の問題の理解 #
デバイス参照の問題の例は18.7.4.2項 「initramfsの永続的なデバイス名」で示しました。通常、1つのデバイスノードを指すシンボリックリンクは複数存在します(18.12.4項 「マルチパスマップの参照」を参照)。ただし、これらのリンクは常に存在するわけではありません。udev
は、現在のudevルールに従ってリンクを作成します。たとえば、マルチパス処理をオフにすると、/dev/mapper/
の下にあるマルチパスデバイス用のシンボリックリンクはなくなります。したがって、/dev/mapper/
デバイスへの参照は失敗します。
このような参照はさまざまな場所に(特に/etc/fstab
および/etc/crypttab
、initramfs、またはカーネルコマンドラインにも)表示されます。
この問題を回避する最も安全な方法は、起動と起動の間で持続しない種類のデバイス参照またはシステム設定に依存する種類のデバイス参照の使用を避けることです。一般的に、ファイルシステム(およびスワップ領域のような類似のエンティティ)は、含む側のデバイスではなく、ファイルシステム自体のプロパティ(UUIDやラベルなど)によって参照することをお勧めします。このような参照を使用できず、たとえば、/etc/crypttab
で、デバイス参照が必要な場合は、オプションを注意深く評価する必要があります。たとえば、18.12.4項 「マルチパスマップの参照」では、最良のオプションは/dev/disk/by-id/wwn-
リンクかもしれません。これはmultipath=off
でも機能するからです。
18.15.3 緊急モードでのトラブルシューティング手順 #
微妙に異なるエラー状況が多数あるため、ステップバイステップのリカバリガイドを提供することは不可能です。ただし、これまでのサブセクションから背景知識を得ていれば、マルチパス処理の問題が原因でシステムが緊急モードになった場合、その問題を理解できるはずです。デバッグを始める前に、次の質問を確認してください。
マルチパスサービスは有効になっていますか。
initramfsにマルチパスdracutモジュールが含まれていますか。
ルートデバイスがマルチパスデバイスとして設定されていますか。設定されていない場合、18.11.1項 「
multipath.conf
のblacklist
セクション」で説明されているように、ルートデバイスはマルチパスから正しく除外されていますか。または、initramfsにマルチパスモジュールがないことに依存していますか(18.3.2.2項 「ローカルディスクのルートファイルシステム」を参照)。システムが緊急モードになったのは、実際のルートファイルシステムに切り替わる前ですか、または切り替わった後ですか。
最後の質問の答えがわからない場合、サンプルのdracut緊急プロンプトを次に示します。これは、ルートを切り替える前に出力されます。
Generating "/run/initramfs/rdsosreport.txt" Entering emergency mode. Exit the shell to continue. Type "journalctl" to view system logs. You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot after mounting them and attach it to a bug report. Give root password for maintenance (or press Control-D to continue):
rdsosreport.txt
が記載されているということは、システムがまだinitramfsから実行されていることを明確に示しています。それでも不明な場合は、ログインして/etc/initrd-release
ファイルが存在するかチェックします。このファイルは、initramfs環境にのみ存在します。
ルートを切り替えた後に緊急モードになった場合、緊急プロンプトは同じように見えますが、rdsosreport.txt
は記載されません。
Timed out waiting for device dev-disk-by\x2duuid-c4a...cfef77d.device. [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):
障害の発生したsystemdユニットとジャーナルを調べて、障害が発生した原因を探ります。
#
systemctl --failed#
journalctl -b -o short-monotonicジャーナルを確認して、「最初に」障害が発生したユニットを特定します。最初の障害を見つけたら、その時点の前後のメッセージを注意深く調べます。警告またはその他の疑わしいメッセージはありますか。
ルートスイッチ(「
Switching root.
」)、およびSCSIデバイス、デバイスマッパー、マルチパスおよびLVM2に関するメッセージに注意します。デバイスおよびファイルシステムに関するsystemd
メッセージ(「Found device
...」、「Mounting
...」、「Mounted
...」)を探します。既存のデバイス(低レベルのデバイスとデバイスマッパーデバイスの両方)を調べます(以下のコマンドの一部はinitramfsでは使用できない場合があることに注意してください)。
#
cat /proc/partitions#
ls -l /sys/class/block#
ls -l /dev/disk/by-id/* /dev/mapper/*#
dmsetup ls --tree#
lsblk#
lsscsi上記のコマンドの出力から、低レベルのデバイスが正常に検出されたかどうか、マルチパスマップおよびマルチパスパーティションがセットアップされたかどうかがわかるはずです。
デバイスマッパーのマルチパスセットアップが予期どおりでない場合、udevプロパティ(特に、
SYSTEMD_READY
)を調べます(上記を参照)。#
udevadm info -e前の手順で予期しなかったudevプロパティが表示された場合、udevルールの処理中に不具合が発生した可能性があります。その他のプロパティ(特に、デバイスの識別に使用されたプロパティ)を確認します(18.12.1項 「WWIDとデバイスの識別」を参照)。udevプロパティが正しい場合、ジャーナルで
multipathd
のメッセージを再度確認します。「Device or resource busy
」メッセージを探します。システムがデバイスのマウントまたはアクティブ化に失敗した場合は、このデバイスを手動でアクティブ化してみると功を奏すことがよくあります。
#
mount /var#
swapon -a#
vgchange -a yほとんどの場合、手動のアクティブ化は成功し、(通常は緊急シェルからログアウトするだけで)システム起動を続行し、起動したシステムでさらに状況を調べることができます。
手動のアクティブ化に失敗すると、多くの場合、不具合のヒントを示すエラーメッセージが表示されます。詳細度を上げてコマンドを再試行することもできます。
この時点で、問題は何であるかがある程度わかるはずです(そうでない場合は、SUSEサポートに連絡して、上記の質問のほとんどに回答できるように準備しておいてください)。
いくつかのシェルコマンドで状況を修正し、緊急シェルを終了し、正常に起動できるはずです。同じ問題が今後発生しないよう、引き続き設定を調整する必要があります。
または、レスキューシステムを起動し、デバイスを手動でセットアップして、
chroot
で実際のルートファイルシステムに変更し、前の手順で得た洞察に基づいて問題の修正を試みる必要があります。この状況では、ルートファイルシステムのストレージスタックが通常と異なっている場合があることに注意してください。セットアップに応じて、新しいinitramfsを構築するときにdracutモジュールの強制追加または省略が必要になる場合があります。18.7.4.1項 「initramfsでのマルチパス処理の有効化または無効化」も参照してください。問題の発生頻度が高いまたは起動のたびに問題が発生する場合、障害の詳細情報を得るために、詳細度を上げて起動を試します。次のカーネルパラメータ、またはそれらの組み合わせが役立つことがよくあります。
udev.log-priority=debug1 systemd.log_level=debug2 scsi_mod.scsi_logging_level=0204003 rd.debug4
また、特定のドライバのロギングを有効にし、シリアルコンソールを設定して起動中の出力をキャプチャすることが役立つ場合があります。
18.15.4 技術情報ドキュメント #
SUSE Linux Enterprise ServerのマルチパスI/Oの問題のトラブルシューティングの詳細については、SUSEナレッジベースにある、次のTID (技術情報ドキュメント)を参照してください。