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

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

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

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

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

  • Linux HBAドライバモジュールをインストールします。モジュールがインストールされると、ドライバがHBAを自動的にスキャンして、ホスト用のパーミッションを持つSANデバイスを検出します。それらのSANデバイスは、以降の設定のため、ホストに提示されます。

    メモ: ご使用のHBAドライバのネイティブマルチパス処理が有効化していないことを確認してください。

    詳細については、ベンダの特定マニュアルを参照してください。

  • ドライバモジュールがロードされたら、特定アレイのLUNまたはパーティションに割り当てられたデバイスノードを検出します。

  • SANデバイスがサーバ上でルートデバイスとして使用される場合は、セクション 7.2.6, ルートデバイスがマルチパスの場合のSANタイムアウト設定に示されているように、デバイスのタイムアウト設定を変更します。

HBAドライバがLUNを認識しない場合は、lsscsiを使用して、SCSIデバイスがオペレーティングシステムによって正しく認識されているかどうかチェックできます。LUNがHBAドライバによって認識されない場合は、SANのゾーン化セットアップをチェックします。特に、LUNのマスキングがアクティブであるかどうか、LUNがサーバに正しく割り当てられているかどうかをチェックしてください。

LUNがHBAドライバによって認識されても、対応するブロックデバイスが存在しない場合は、カーネルパラメータを追加して、SCSIデバイスのスキャン動作を変更する必要があります(LUNが連続的に番号付けされていないことを示すなど)。詳細については、Novell Support Knowledgebaseの「Options for SCSI Device Scanning」を参照してください。

7.4.2 マルチパスデバイスのパーティショニング

複数のパスを持つパーティショニングデバイスは、推奨できませんが、サポートされています。

SUSE Linux Enterprise Server 10

SUSE Linux Enterprise Server 10では、kpartxツールで、再起動なしで、マルチパスデバイス上にパーティションを作成できます。マルチパス処理の設定前に、YaST2のパーティショナ機能またはサードパーティーのパーティショニングツールの使用により、デバイスをパーティショニングすることもできます。

SUSE Linux Enterprise Server 9

SUSE Linux Enterprise Server 9では、デバイスをパーティショニングしたい場合、マルチパス処理の設定前に、YaST2のパーティショナ機能またはサードパーティーのパーティショニングツールの使用により、デバイスをパーティショニングする必要があります。これが必要なのは、既存のマルチパスデバイスのパーティショニングがサポートされていないからです。マルチパスデバイス上のパーティショニングを試行すると、失敗します。

デバイスにパーティションを設定する場合は、DM-MPIOがそれらのパーティションを自動的に認識し、次のように、p1からpnをデバイスのIDに付加することで該当のデバイスを表示します。

/dev/disk/by-id/26353900f02796769p1

マルチパスデバイスをパーティション分割するには、DM-MPIOサービスを無効にし、通常のデバイスノード(/dev/sdcなど)をパーティション分割し、最後に、再起動してDM-MPIOサービスが新しいパーティションを認識できるようにします。

7.4.3 マルチパス処理のためのサーバ設定

INITRDで、マルチパスI/Oデバイスの接続先コントローラのデバイスドライバを自動的にロードするには、システムを手動で設定する必要があります。それには、必要なドライバモジュールを変数INITRD_MODULES(/etc/sysconfig/kernelファイル内)に追加する必要があります。

たとえばシステムにccissドライバからアクセスされるRAIDコントローラと、ドライバqla2xxxからアクセスされるQLogic*コントローラに接続されたマルチパスデバイスが含まれている場合は、次のような入力になります。

   INITRD_MODULES="cciss"

QLogicドライバは、起動時に自動的にはロードされないので、ここで追加します。

   INITRD_MODULES="cciss qla23xx"

/etc/sysconfig/kernelの変更後は、システム上でINITRDを再作成し(mkinitrdコマンド使用)、次に、再起動して変更内容を有効にする必要があります。

ブートマネージャとしてLILOを使う場合は、/sbin/liloコマンドでLILOを再インストールします。GRUBを使っている場合は、何も操作する必要はありません。

7.4.4 ブートシーケンスへのmultipathdの追加

このセクションに示すどちらかの方法を使用して、マルチパスI/Oサービス(multipathd)をブートシーケンスに追加します。

YaSTを使用してmultipathdを追加する

  1. YaST®内で、[システム]>[システムサービス(ランレベル)]>[簡易モード]の順にクリックします。

  2. multipathd]を選択してから、[Enable(有効)]をクリックします。

  3. OK]をクリックして、サービスの開始メッセージを確認します。

  4. 終了]をクリックしてから、[はい]をクリックします。

    変更内容は、サーバが再起動するまで有効にはなりません。

コマンドラインを使用してmultipathdを追加する

  1. 端末コンソールを開いて、rootユーザまたは同等の権限でログインします。

  2. 端末コンソールのプロンプトで、次のように入力します。

    insserv multipathd
    

7.4.5 /etc/multipath.confファイルの作成と設定

/etc/multipath.confファイルは、作成しない限り、存在しません。/usr/share/doc/packages/multipath-tools/multipath.conf.syntheticファイルには、マルチパス設定の指針となるサンプルファイル /etc/multipath.confが含まれています。属性とそれらのオプションに関する詳しいコメントの付いたテンプレートについては、/usr/share/doc/packages/multipath-tools/multipath.conf.annotatedを参照してください。

multipath.confファイルの作成

/etc/multipath.confファイルが存在しない場合は、次のように、例をコピーしてファイルを作成していください。

  1. 端末コンソールで、rootユーザとしてログインします。

  2. 次のコマンドを入力して(すべて1行で)、テンプレートをコピーします。

    cp /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic /etc/multipath.conf
    
  3. /usr/share/doc/packages/multipath-tools/multipath.conf.annotatedファイルを、システムのマルチパス処理の設定方法を決定する参考として使用します。

  4. SAN用の適切なdeviceエントリがあることを確認します。大半のベンダは、deviceセクションの正しいセットアップに関するマニュアルを提供しています。

    /etc/multipath.confファイルでは、異なるSANには異なるdeviceセクションが必要です。自動的に検出されるストレージサブシステムを使用する場合(「マルチパス処理サポートについてテスト済みのストレージアレイ」参照)、そのデバイスのデフォルトエントリを使用できます。/etc/multipath.confファイルをさらに設定する必要はありません。

  5. ファイルを保存します。

etc/multipath.confファイルのセットアップの確認

設定後、次のコマンドを入力して、ドライランを実行できます。

multipath -v3 -d

このコマンドは、デバイスをスキャンし、次に、セットアップの内容を表示します。出力の例を以下に示します。

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)、デバイスノード名、メジャー:マイナー番号、および状態が表示されます。

/etc/multipath.confでのユーザフレンドリな名前またはエイリアス名の設定

マルチパスデバイスは、そのWWID (Worldwide Identifier)か、またはそれに割り当てられたエイリアスのどちらかで識別できます。WWIDは、グローバルに一意であり、変わらないことを保証されたマルチパスデバイスの識別子です。マルチパス処理で使用されるデフォルト名は、/dev/disk/by-idディレクトリにある論理ユニットのIDです。/dev/sdn形式と/dev/dm-n形式のデバイスノード名は、再起動時に変更される可能性があるので、マルチパスデバイスは、IDで参照することをお勧めします。

/dev/mapperディレクトリにあるマルチパスデバイス名は、LUNのIDを参照し、/var/lib/multipath/bindingsファイルを使用して関連付けを追跡するので、常に、一貫性を保ちます。これらのデバイスには、ユーザフレンドリな名前が付いています(/dev/disk/by-id/dm-uuid-.*-mpath-.*など)。

/etc/multipath.confファイルでALIASディレクティブを使用すると、独自のデバイス名を指定できます。別名は、IDと/dev/disk/by-id/dm-uuid-.*-mpath-の使用を無効にします。* 名前.

重要: ルートデバイスにはエイリアスを使わないことを推奨します。デバイス名が異なると、カーネルコマンドラインでマルチパス処理をシームレスにオフにする機能が失われるからです。

multipath.conf設定の例については、/usr/share/doc/packages/multipath-tools/multipath.conf.syntheticファイルを参照してください。

  1. 端末コンソールで、rootユーザとしてログインします。

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

  3. Defaultsディレクティブとその閉じ括弧を非コメント化します。

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

    次に例を示します。

    ## Use user friendly names, instead of using WWIDs as names.
    defaults {
      user_friendly_names yes
    }
    
  5. オプションとして、aliasディレクティブ(multipathセクションにある)を使用して、独自にユーザフレンドリなデバイス名を指定できます。

    次に例を示します。

    multipath {
      wwid 26353900f02796769
      alias sdd4l0
    }
    
  6. 変更内容を保存し、ファイルを閉じます。

/etc/multipath.confでの非マルチパスデバイスのブラックリスト化

/etc/multipath.confファイルには、blacklistセクションがあり、このセクションにすべての非マルチパスデバイスがリストされます。たとえば、ローカルIDEハードドライブおよびフロッピードライブは、通常、マルチパス化されません。multipathが管理対象とするシングルパスデバイスがあり、multipathにそれらを無視させたい場合は、それらのシングルパスデバイスをblacklistセクションに入力して、問題を解決します。

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

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

blacklist {
      wwid 26353900f02796769
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"
      devnode "^hd[a-z][0-9]*"
      devnode "^cciss!c[0-9]d[0-9].*"
}

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

^cciss!c[0-9]d[0-9]*[p[0-9]*]

/etc/multipath.confファイルの変更後、mkinitrdを実行してシステム上にINITRDを作成し、次に、再起動で変更内容を有効にします。

その後は、multipath -llコマンドの発行時に、ローカルデバイスがマルチパスマップに一覧されなくなります。

/etc/multipath.confでのデフォルトマルチパス動作の設定

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

次に示すdefaultsセクションでは、シンプルなフェールオーバーポリシーが指定されています。

defaults {
       multipath_tool  "/sbin/multipath -v0"
       udev_dir        /dev
       polling_interval 10
       default_selector        "round-robin 0"
       default_path_grouping_policy    failover
       default_getuid  "/sbin/scsi_id -g -u -s /block/%n"
       default_prio_callout    "/bin/true"
       default_features        "0"
       rr_min_io               100
       failback                immediate

メモ: default_getuidコマンドラインでは、サンプルファイル/usr/share/doc/packages/multipath-tools/multipath.conf.synthetic内(およびデフォルトの注釈付きサンプルファイルにも含まれている)の/lib/udev/scsi_idというサンプルパスの代わりに、上記の例にあるように、パス/sbin/scsi_idを使用します。SLES 11 SP1以上の場合は、サンプルファイルに正しいパスである/sbin/scsi_idが含まれているはずです。

/etc/multipath.conf内のzSeriesのデフォルト設定

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

defaults {
       dev_loss_tmo 90
       fast_io_fail_tmo 5
}

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

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

/etc/multipath.confファイルの変更の適用

/etc/multipath.confファイルに対する変更は、multipathdの実行中は有効になりません。変更を行ったら、ファイルを保存して閉じ、次のように、変更内容を適用してください。

  1. multipathdサービスを停止します。

  2. 次のコマンドの入力で、古いmultipathバインディングをクリアします。

    /sbin/multipath -F
    
  3. 次のコマンドの入力で、新しいmultipathバインディングを作成します。

    /sbin/multipath -v2 -l
    
  4. multipathdサービスを開始します。

  5. mkinitrdを実行して、システム上にINITRDを再作成し、再起動して変更内容を有効にします。