【Linux CentOS7】 Multipath について詳しく解説

今回は少々インフラ寄りの話(レンタルサーバー業者側の話)になってしまいますが、Multipath(マルチパス)について詳しく解説します。

Multipathとは一体何か?

Multipathの正式名称は、デバイスマッパー マルチパス (DM-Multipath) 機能です。

Multipathとは、「サーバー」と「ストレージ」間の複数パスを単一のデバイスに設定できる機能(仕組み・技術)です。

言葉を変えると、1つのデバイスに複数のパスを設定できます。

更に言葉を変えると、システムに接続されているストレージへの物理アクセスパスが複数ある環境を「マルチパス」と言います。

 

マルチパスはどこからどこまでの間で有効なのかというと、サーバーの「HBA(ホスト バス アダプタ)」からストレージの「コントローラ」間です。

 

Multipathは、「冗長化」や「パフォーマンス向上」を実現する機能(仕組み・技術)です。

Multipathは、複数のパスで接続されたブロックデバイスを制御します。

Multipathは、「FC(ファイバーチャネル)」「iSCSI」などで利用されます。

※最近は iSCSI が多くなってきています。(FCより安くてそこそこ高速のため)

 

Multipathには次のような利点があります。

Multipath(マルチパス)のメリット(目的)

Multipathのメリット(目的)は、大きく以下の2点が挙げられます。

 

あるパスに障害が発生した場合、I/Oを他の使用可能なパスに切り替えます。

→フェイルオーバー(failover)構成時に機能します

 

複数のパスを同時に利用して、負荷を分散し I/O のパフォーマンスを上げます。

→アクティブ/アクティブ構成時に機能します

 

Multipathドライバ(マルチパスドライバ)の役目

下図では複数のHBAが1つのストレージにつながっているので、OS上からはストレージが複数に見えます。

例えば、サーバー#1上からは同じストレージが2つに見えます。

サーバー#2からもストレージが2つに見えます。

そのため、OSからは合計4つのストレージがあるように見えますが、実際は物理的にストレージは2つしかありません。

この矛盾をマルチパスドライバが解決します。

 

 

 

ファイルオーバー

マルチパス構成は、システムに耐障害性をもたらします。

つまりシステムが障害に強くなります。

※ちなみに下図のマルチパス構成は「4パス」あります。

4パスの場合は3か所で障害があっても残りの1パスで通信できることが期待できます。

 

下図のように障害ポイントは数点あります。

下図には「HBA」「スイッチ」「ストレージのコントローラ」があります。

しかしマルチパスで冗長化することにより、1点に障害が発生しても「サーバー」と「ストレージ」で通信することができます。

「金融系」や「JRの新幹線の予約システム」のようなリアルタイムでサービスを提供している企業では1つの障害で売り上げが大きく変わってきたり、ユーザーに損害を与えることもあるので冗長化は必須です。

レンタルサーバー会社でもマルチパス構成を取り入れているかというと、法人向け、企業向け、エンタープライズ向けの高額のレンタルサーバーならここまでやっていると思いますが、月100円程度の格安のレンタルサーバーを提供している企業ではここまで手厚くシステムを構築していないかもしれません。

(レンタルサーバー会社により異なります)

 

パフォーマンスを上げるアクティブ/アクティブ構成

アクティブ/アクティブ構成にすると、下図のように1回線(1パス)ではなく、複数パスで同時に通信ができるので、単純計算では1回線より2回線の方が2倍の通信速度になります。

※もちろん現実では様々なボトルネックがあるので単純に2倍にはなりませんが、それでも1回線の時よりかは速度が速くなるだろうと期待できます。

ただし、アクティブ/アクティブ構成は非常に条件が厳しく更に高額な「HBA」「ストレージ」「コントローラ」を用意しなければいけないため、実際に導入するのはエンタープライズでも名の知れた企業クラスになると思います。

ブロックデバイスとは?

Multipathは、複数のパスで接続されたブロックデバイスを制御しますが、そもそも「ブロックデバイス」とは何でしょうか。

ちなみに、ブロックデバイスの「デバイス」とは「周辺機器」のことを表します。

デバイスには以下の2種類があります。

  • ブロックデバイス(HDD、DVD-ROMなど)
  • キャラクタデバイス(キーボード、シリアルポートなど)

 

ブロックデバイスとは、データの読み書きがある程度の大きさのブロック単位(512~2048バイト)でランダムにアクセスできるデバイスです。

キャラクタデバイスは1文字ずつデータのやり取りを行います。

ここでは「ブロックデバイス」イコール「ハードディスク」と思ってください。

 

以下の「lsblk」コマンドは、利用可能なブロックデバイスを確認するコマンドです。

# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 298.1G  0 disk
┣ sda1        8:1    0     1G  0 part /boot
┗ sda2        8:2    0 297.1G  0 part
  ┣ cl-root 253:0    0    50G  0 lvm  /
  ┣ cl-swap 253:1    0   3.8G  0 lvm  [SWAP]
  ┗ cl-home 253:2    0 243.3G  0 lvm  /home
sr0          11:0    1  1024M  0 rom  ← cd-rom

# ls -l /dev/s*
brw-rw----  1 root disk   8,   0  5月 13 15:41 /dev/sda ←メジャー番号とマイナー番号が一致している
brw-rw----  1 root disk   8,   1  5月 13 15:42 /dev/sda1 ←メジャー番号とマイナー番号が一致している
brw-rw----  1 root disk   8,   2  5月 13 15:42 /dev/sda2 ←メジャー番号とマイナー番号が一致している
crw-rw----  1 root disk  21,   0  5月 13 15:41 /dev/sg0
crw-rw----+ 1 root cdrom 21,   1  5月 13 15:41 /dev/sg1
crw-------  1 root root  10, 231  5月 13 15:41 /dev/snapshot
brw-rw----+ 1 root cdrom 11,   0  5月 13 15:41 /dev/sr0
lrwxrwxrwx  1 root root       15  5月 13 15:41 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx  1 root root       15  5月 13 15:41 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx  1 root root       15  5月 13 15:41 /dev/stdout -> /proc/self/fd/1

# ls -l /dev/dm-*
brw-rw---- 1 root disk 253, 0  5月 13 15:41 /dev/dm-0 ←メジャー番号とマイナー番号が一致している
brw-rw---- 1 root disk 253, 1  5月 13 15:41 /dev/dm-1 ←メジャー番号とマイナー番号が一致している
brw-rw---- 1 root disk 253, 2  5月 13 15:42 /dev/dm-2 ←メジャー番号とマイナー番号が一致している

デバイスマッパー

デバイスマッパーとはデバイスのマッピングを管理する「プログラム」です。

新規デバイスが Multipath 管理下に置かれると、その新規デバイスは /dev/mapper/ および /dev/dm-n の 2 つの別々の位置で確認することができます。

ファイル名:/dev/mapper/<マップ名>

/dev/mapper 内のデバイスは、ブートプロセス時に作成されます。

/dev/dm-n の形式を持つすべてのデバイスは内部での使用のみを目的としており、通常は使用できません。

※/dev/dm-0、/dev/dm-1などのデバイスファイルは、カーネル内でのブロックデバイス共通の名前管理のためのものです。

/dev/dm-nは、マップ作成時に数字が変動するので利用しません。

 

マルチパスデバイス識別子

マルチパスデバイスとは、主に

  • ファイバーチャネル
  • iSCSI

などによるSAN(ストレージ エリア ネットワーク)のストレージのことを言います。

 

それぞれのマルチパスデバイスには WWID(World Wide ID、World Wide Identifier)が付いています。

WWIDは、変更しません(されません)。

例えば、OSを再起動しても、OSを再インストールしても、フォーマットしても、マルチパスデバイスを初期化しても変わりません。

つまり WWID は永続します。

イーサネットのMACアドレスのように工場でデバイス製造時に組み込みます。

そのため、正確にデバイスを特定することが可能です。

 

【例】RedHatマニュアルより

25.3. 永続的な命名

以下は「/multipath -l」コマンドの実行結果です。

読み方は、「Host : Channel : Target : LUN  /dev/sd 名  major : minor」ですが、 これらは永続的ではありません。

3600508b400105df70000e00000ac0000 dm-2 vendor,product
[size=20G][features=1 queue_if_no_path][hwhandler=0][rw]
┗┳ round-robin 0 [prio=0][active]
  ┣ 5:0:1:1 sdc 8:32  [active][undef]  ← Host 5: Channel 0: Target 1: LUN 1 /dev/sd名 sdc  major 8 : minor 32
  ┗ 6:0:1:1 sdg 8:96  [active][undef]
┗┳ round-robin 0 [prio=0][enabled]
  ┣  5:0:0:1 sdb 8:16  [active][undef]
  ┗ 6:0:0:1 sdf 8:80  [active][undef]

 

WWN は IEEE が企業に発行した OUI(Organizationally Unique Identifier)を含む8バイト(64bit)の数字で表します。

IEEE が定義する WWN は2種類あります。

 

  • 本来のアドレッシング方式

 → 合計8バイト
   先頭2バイトが「16進数で 10:00 または 2x:xx(x はベンダー指定)」
   次の3バイトがベンダー識別子
   残る3バイトがベンダーの指定するシリアル番号

  • 新しいアドレッシング方式

 → 合計8バイト
   先頭4ビットが16進数で「5」または「6」
   続く3バイトがベンダー識別子
   残る4バイトと4ビットがベンダー指定のシリアル番号

 

マルチパスの要件

マルチパスを利用するためには要件があります。

ちなみに、個人向けのデバイス(安い、機能が低い、すぐ壊れる)ではなくエンタープライズ向けのデバイス(高い、機能が高い、24時間365日稼働させ続けても壊れない)が必要になります。

 

つまり、ストレージがマルチパスに対応していないと利用できません。

まずは「HP」や「IBM」や「HITACHI」や「NEC」など主要なメーカーの高額ストレージを扱っているベンダーの営業に連絡をするところから始まります。

 

ストレージプロトコルについて

ストレージプロトコルについて表にしてみました。

方式メリットデメリット
FC
(Fibre Channel)
・実績が多い
・高帯域(最大 16Gb/ポート)
・サードパーティ製PSAが利用できる
・高価(FCスイッチ、FCケーブル、FCポートなど)
・機種によってはポート/スイッチの増設に
追加ライセンスが必要になる
NFS・実績豊富
・Linuxデフォルトの機能
・安価なL2スイッチが利用できる
・L2スイッチのため拡張しやすい
・ファイルシステムなので扱いやすい
・運用が簡単
・一部レイテンシの情報を取得できない
・マルチパスを構成しにくい
・FCに比べる機能が劣る
iSCSI・実績が豊富
・安価なL2スイッチが利用できる
・L2スイッチのため拡張しやすい
・サードパーティ製PSA
・他のプロトコルに比べCPU負荷が高い
FC0E・ケーブル本数の集約・実績が少ない
・DBC対応のスイッチが必要
Virtual SAN
(VSAN)
・コストパフォーマンスが良い
・SSDキャッシュにより読み込みが特に速い
・安価にディスクミラーリングが可能
・実績が少ない

device-mapper-multipathのインストール手順

「FC」でも「iSCSI」でもまずは「device-mapper-multipath」というパッケージが必要です。

以下、device-mapper-multipathのインストール手順とその起動と起動確認手順です。

# yum install device-mapper-multipath
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: mirror.premi.st
 * extras: ftp.tsukuba.wide.ad.jp
 * ius: mirrors.kernel.org
 * updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ device-mapper-multipath.x86_64 0:0.4.9-99.el7_3.1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=====================================================================================================================================
 Package                                  アーキテクチャー        バージョン                          リポジトリー              容量
=====================================================================================================================================
インストール中:
 device-mapper-multipath                  x86_64                  0.4.9-99.el7_3.1                    updates                  129 k

トランザクションの要約
=====================================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 129 k
インストール容量: 188 k
Is this ok [y/d/N]: y
Downloading packages:
device-mapper-multipath-0.4.9-99.el7_3.1.x86_64.rpm                                                           | 129 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : device-mapper-multipath-0.4.9-99.el7_3.1.x86_64                                                      1/1
  検証中                  : device-mapper-multipath-0.4.9-99.el7_3.1.x86_64                                                      1/1

インストール:
  device-mapper-multipath.x86_64 0:0.4.9-99.el7_3.1

完了しました!

 

問題なくインストールしたら、multipathd の起動と起動確認です。

ただ /etc/multipath.conf が存在しない状況なので、multipathd の起動には失敗しています。

この後設定します。

# systemctl list-unit-files | grep multipathd.service
multipathd.service                            enabled
# systemctl status multipathd.service
● multipathd.service - Device-Mapper Multipath Device Controller
   Loaded: loaded (/usr/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
# systemctl start multipathd.service
# systemctl status multipathd.service
● multipathd.service - Device-Mapper Multipath Device Controller
   Loaded: loaded (/usr/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
Condition: start condition failed at 土 2017-05-13 16:05:00 JST; 3s ago
           ConditionPathExists=/etc/multipath.conf was not met ←multipath.confファイルがないのでmultipathdが起動できませんでした。
#

 

multipathコマンド

この後、マルチパスの運用・管理で multipath コマンドを使うので、コマンドの使い方の整理をします。

 

multipath(8)コマンドの一般構文:

multipath [-v verbosity] [-d] [-h|-l|-ll|-f|-F] [-p failover | multibus | group_by_serial | group_by_prio| group_by_node_name ]

 

コマンド説明
multipath devicename特定のマルチパスデバイスを設定します。
devicenameを、/dev/sdb または major:minor 形式などの
デバイス名で置き換えます。
multipath -fマップされたけど使用していないデバイスを削除します。
multipath -F devicenameマップされたけど使用していないデバイスを特定して削除します。
devicenameを、/dev/sdb または major:minor 形式などの
デバイス名で置き換えます。
multipath -dドライ実行します。
可能性のあるマルチパスデバイスを表示するだけで、
実際のデバイスの作成やデバイスマップの設定・変更は行いません。
multipath -lすべてのマルチパスデバイスの状態を表示します。
特に sysfs 内の情報から収集したマルチパストポロジーと
デバイスマッパーを表示します。
multipath -llすべてのマルチパスデバイスの状態を表示します。
-l オプションが表示する情報と、その他のすべての
使用可能なシステムコンポーネントを表示します。
multipath -ll devicename指定されたマルチパスデバイスのステータスを表示します。
devicenameを、/dev/sdb または major:minor 形式などの
デバイス名で置き換えます。
multipath -v1作成または更新されたマルチパス名のみが出力されます。
multipath -v2すべての検知されたパス、マルチパスおよびデバイスマップが
表示されます。
multipath -w devicename(Red Hat Enterprise Linux 6.6 以降) wwids ファイルから
指定されたデバイスの wwid を削除します。
multipath -W(Red Hat Enterprise Linux 6.6 以降) 現在の
マルチパスデバイスのみを組み込むように
wwids ファイルをリセットします。

 

その他マルチパス設定時に利用するコマンド

mdadm コマンド

mdadm (Multiple Devices Administration) をインストールすると、mdadm コマンドでマルチパスデバイスの状態を確認することができます。

 

kpartx コマンド

マルチパスデバイス上のパーティションにdevmapをマップします。

マルチパス設定

それぞれのマルチパスデバイスには World Wide Identifier (WWID) があり、これはグローバルに一意かつ不変であることが保証されます。デフォルトでは、マルチパスデバイス名は、その WWID に設定されます。

別の方法として、マルチパス設定ファイルで user_friendly_names オプションを設定して、エイリアスを mpathn 形式のノードに一意の名前に設定することができます。

 

有名どころのストレージを使っているなら、multipath が自動的に構成してくれます。

デフォルトで既知のマルチパスデバイスとしてサポートされていないストレージデバイスを追加する必要がある場合は、/etc/multipath.conf ファイルを編集して、適切なデバイス情報を挿入します。

 

mpathconf

マルチパスのセットアップは「mpathconf」コマンドで設定します。

mpathconfは以下のmanコマンドの結果のように、デバイスマッパー マルチパスを設定するためのコマンドです。

# man mpathconf | col -b
MPATHCONF(8)                                                                                       Linux Administrator's Manual                                                                                       MPATHCONF(8)

NAME
       mpathconf - A tool for configuring device-mapper-multipath
  mpathconf - device-mapper-multipathを設定するためのツール

SYNOPSIS
       mpathconf [commands] [options]

DESCRIPTION
       mpathconf  is a utility that creates or modifies /etc/multipath.conf.  It can enable or disable multipathing and configure some common options.  mpathconf can also load the dm_multipath module, start and stop the multi‐pathd daemon, and configure the multipathd service to start automatically or not. If mpathconf is called with no commands, it will display the current configuration.
  mpathconfは/etc/multipath.confを作成または変更するユーティリティです。マルチパスを有効または無効にし、いくつかの共通オプションを構成できます。 mpathconfは、dm_multipathモ​​ジュールをロードし、マルチパスデーモンの起動と停止を行い、multipathdサービスが自動的に起動するように設定することもできます。オプションなしでmpathconfコマンドを実行すると、現在の設定が表示されます。

       The default options for mpathconf are --with_module The --with_multipathd option is not set by default.  Enabling multipathing will load the dm_multipath module but it will not immediately start  it.  This  is  so  that users can manually edit their config file if necessary, before starting multipathd.
  mpathconfのデフォルトオプションは--with_moduleです--with_multipathdオプションはデフォルトでは設定されていません。マルチパスを有効にすると、dm_multipathモ​​ジュールがロードされますが、すぐには開始されません。これは、マルチパスを開始する前に、必要に応じてユーザが設定ファイルを手動で編集できるようにするためです。

       If /etc/multipath.conf already exists, mpathconf will edit it. If it does not exist, mpathconf will use /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf as the starting file. This file has user_friendly_names set. If this file does not exist, mpathconf will create /etc/multipath.conf from scratch.  For most users, this means that user_friendly_names will be set by default, unless they use the --user_friendly_names n command.
  /etc/multipath.confがすでに存在する場合、mpathconfはそれを編集します。存在しない場合、mpathconfは/usr/share/doc/device-mapper-multipath-0.4.9/multipath.confを開始ファイルとして使用します。このファイルにはuser_friendly_namesが設定されています。このファイルが存在しない場合、mpathconfは最初から/etc/multipath.confを作成します。ほとんどのユーザにとって、これは--user_friendly_names nコマンドを使用しない限り、デフォルトでuser_friendly_namesが設定されることを意味します。

COMMANDS
       --enable
              Removes any line that blacklists all device nodes from the /etc/multipath.conf blacklist section.
      /etc/multipath.confブラックリストセクションからすべてのデバイスノードをブラックリストする行を削除します。

       --disable
              Adds a line that blacklists all device nodes to the /etc/multipath.conf blacklist section. If no blacklist section exists, it will create one.
     すべてのデバイスノードを/etc/multipath.confブラックリストセクションにブラックリストする行を追加します。ブラックリストセクションが存在しない場合は、ブラックリストセクションが作成されます。

       --user_friendly_name  { y | n }
              If set to y, this adds the line user_friendly_names yes to the /etc/multipath.conf defaults section. If set to n, this removes the line, if present. This command can be used along with any other command.
     yに設定すると、/etc/multipath.confのdefaultsセクションにuser_friendly_namesという行が追加されます。 nに設定すると、行があれば削除されます。このコマンドは、他のコマンドと一緒に使用できます。

       --find_multipaths { y | n }
              If set to y, this adds the line find_multipaths yes to the /etc/multipath.conf defaults section. If set to n, this removes the line, if present. This command can be used aldong with any other command.
     yに設定すると、find_multipaths yesという行が/etc/multipath.confのdefaultsセクションに追加されます。 nに設定すると、行があれば削除されます。このコマンドは、他のコマンドと一緒にaldongで使用できます。

OPTIONS
       --with_module { y | n }
              If set to y, this runs modprobe dm_multipath to install the multipath modules. This option only works with the --enable command. This option is set to y by default.
     yに設定すると、modprobe dm_multipathが実行され、マルチパスモジュールがインストールされます。このオプションは--enableコマンドでのみ動作します。このオプションはデフォルトでyに設定されています。

       --with_multipathd { y | n }
              If set to y, this runs service multipathd start to start the multipathd daemon on --enable, service multipathd stop to stop the multipathd daemon on --disable, and service multipathd reload to reconfigure  multi‐pathd on --user_frindly_names and --find_multipaths.  This option is set to n by default.
     yに設定すると、service multipathd startを実行してマルチパスデーモンを起動します。 - multipathdデーモンを停止するにはmultipathdデーモンを--disableで停止し、multipathd reloadを実行してマルチパスを再設定します。--user_frindly_namesと--find_multipaths このオプションはデフォルトでnに設定されています。

FILES
       /etc/multipath.conf

SEE ALSO
       multipath.conf(5), modprobe(8), multipath(8), multipathd(8), service(8),

AUTHOR
       Benjamin Marzinski <bmarzins@redhat.com>

                                                                                                             June 2010                                                                                                MPATHCONF(8)

 

初期状態では、「/etc/multipath.conf」ファイルは存在しないので、以下の2つの方法のうち、どちらかを実行します。

  • mpathconfコマンドの実行
  • /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf ファイルをコピーする

デフォルトでは、/etc/multipath.conf ファイルがないので multipathd が起動しません。

 

mpathconfコマンドの実行例

# mpathconf --enable --with_multipathd y
# systemctl status multipathd.service
multipathd.service - Device-Mapper Multipath Device Controller
   Loaded: loaded (/usr/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
   Active: active (running) since 土 2017-05-13 16:26:29 JST; 16s ago ← multipathdが起動していることが確認できます。
  Process: 5645 ExecStart=/sbin/multipathd (code=exited, status=0/SUCCESS)
  Process: 5641 ExecStartPre=/sbin/multipath -A (code=exited, status=0/SUCCESS)
  Process: 5639 ExecStartPre=/sbin/modprobe dm-multipath (code=exited, status=0/SUCCESS)
 Main PID: 5648 (multipathd)
   CGroup: /system.slice/multipathd.service
           mq5648 /sbin/multipathd

 5月 13 16:26:29 centos7 systemd[1]: Starting Device-Mapper Multipath Device Controller...
 5月 13 16:26:29 centos7 systemd[1]: Started Device-Mapper Multipath Device Controller.
 5月 13 16:26:29 centos7 multipathd[5648]: path checkers start up

 

multipathd が起動していることが確認できたので、/etc/multipath.conf ファイルが作成されているか確認します。

初期状態ではほとんどがコメントアウトされていますが、デフォルトで「user_friendly_names yes」「find_multipaths yes」が設定されています。

# cat /etc/multipath.conf
# This is a basic configuration file with some examples, for device mapper
# multipath.
#
# For a complete list of the default configuration values, run either
# multipath -t
# or
# multipathd show config
#
# For a list of configuration options with descriptions, see the multipath.conf
# man page

## By default, devices with vendor = "IBM" and product = "S/390.*" are
## blacklisted. To enable mulitpathing on these devies, uncomment the
## following lines.
#blacklist_exceptions {
#       device {
#               vendor  "IBM"
#               product "S/390.*"
#       }
#}

## Use user friendly names, instead of using WWIDs as names.
defaults {
        user_friendly_names yes
        find_multipaths yes
}
##
## Here is an example of how to configure some standard options.
##
#
#defaults {
#       polling_interval        10
#       path_selector           "round-robin 0"
#       path_grouping_policy    multibus
#       uid_attribute           ID_SERIAL
#       prio                    alua
#       path_checker            readsector0
#       rr_min_io               100
#       max_fds                 8192
#       rr_weight               priorities
#       failback                immediate
#       no_path_retry           fail
#       user_friendly_names     yes
#}
##
## The wwid line in the following blacklist section is shown as an example
## of how to blacklist devices by wwid.  The 2 devnode lines are the
## compiled in default blacklist. If you want to blacklist entire types
## of devices, such as all scsi devices, you should use a devnode line.
## However, if you want to blacklist specific devices, you should use
## a wwid line.  Since there is no guarantee that a specific device will
## not change names on reboot (from /dev/sda to /dev/sdb for example)
## devnode lines are not recommended for blacklisting specific devices.
##
#blacklist {
#       wwid 26353900f02796769
#       devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
#       devnode "^hd[a-z]"
#}
#multipaths {
#       multipath {
#               wwid                    3600508b4000156d700012000000b0000
#               alias                   yellow
#               path_grouping_policy    multibus
#               path_selector           "round-robin 0"
#               failback                manual
#               rr_weight               priorities
#               no_path_retry           5
#       }
#       multipath {
#               wwid                    1DEC_____321816758474
#               alias                   red
#       }
#}
#devices {
#       device {
#               vendor                  "COMPAQ  "
#               product                 "HSV110 (C)COMPAQ"
#               path_grouping_policy    multibus
#               path_checker            readsector0
#               path_selector           "round-robin 0"
#               hardware_handler        "0"
#               failback                15
#               rr_weight               priorities
#               no_path_retry           queue
#       }
#       device {
#               vendor                  "COMPAQ  "
#               product                 "MSA1000         "
#               path_grouping_policy    multibus
#       }
#}

blacklist {
}
#

 

multipathd が起動したら、multipathd が自動でデバイスを検出するので、「maltipath -v2」コマンドで現在の設定を確認し、ローカルデバイスが含まれていたら「/etc/multipath.conf」ファイルの「blacklist」にWWIDを追加します。

追加したら、multipathd を再起動します。

マルチパスデバイスの生成時にローカルディスクを無視する

内蔵ディスクのマルチパス化は推奨されていません。

そのため、

  • ブラックリスト化する
  • find_multipaths パラメータを「yes」にする

など設定しておきます。

ブラックリスト化する場合は「/etc/multipath.conf」ファイルの「blacklist」に追加します。

以下、「/etc/multipath.conf」ファイルの設定例です。

blacklist {
       wwid 26353900f02796769 ← 個別に指定できます。
       devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" ← 正規表現で指定できます。
       devnode "^hd[a-z]" ← 正規表現で指定できます。
}

 

find_multipaths パラメータを修正する場合も「/etc/multipath.conf」を修正します。

以下、「/etc/multipath.conf」ファイルの設定例です。

## Use user friendly names, instead of using WWIDs as names.
defaults {
        user_friendly_names yes 
        find_multipaths yes ← デフォルトでは「yes」になっています。
}

 

設定後は設定を反映させるために multipathd を再起動後、「multipath -v2」コマンドを実行して不要なデバイスが削除されていることを確認します。

 

iSCSI環境でマルチパスを設定する手順の概要

参考サイト:OSSはアルミニウムの翼で飛ぶ

最近は10GB/bpsなど、ネットワーク環境が充実してきているので、高額な Fibre Channe を利用せずに、低コストの iSCSI 環境でマルチパスを構成するケースが多くなりました。

iSCSIはクライアント/サーバーシステムの構成

下図のように iSCSI は、クライアント/サーバーシステムの構成になっています。

  • iSCSIの接続元になる側 → iSCSIイニシエーター
  • iSCSIの接続先になる側 → iSCSIターゲット

iSCSI環境でマルチパスを設定する手順の概要

iSCSIでマルチパスを作成する手順の概要を以下に記載します。

随時検証環境で検証後に更新していきます。

1. iSCSIイニシエーターのインストール

iSCSIの接続元となるサーバーにiSCSIイニシエーターをインストールします。

iSCSIイニシエーターをインストールすると、「iscsiadm」コマンドで管理できるようになります。

# yum install iscsi-initiator-utils

 

インストール後に「iscsiadm --help」コマンドで動作確認をします。

# iscsiadm --help
iscsiadm -m discoverydb [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type -p ip:port -I ifaceN ... [ -Dl ] ] | [ [ -p ip:port -t type] [ -o operation ] [ -n name ] [ -v value ] [ -lD ] ]
iscsiadm -m discovery [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type -p ip:port -I ifaceN ... [ -l ] ] | [ [ -p ip:port ] [ -l | -D ] ]
iscsiadm -m node [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ -S ] [ [ -T targetname -p ip:port -I ifaceN ] [ -l | -u | -R | -s] ] [ [ -o  operation  ] [ -n name ] [ -v value ] ]
iscsiadm -m session [ -hV ] [ -d debug_level ] [ -P  printlevel] [ -r sessionid | sysfsdir [ -R | -u | -s ] [ -o operation ] [ -n name ] [ -v value ] ]
iscsiadm -m iface [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -I ifacename | -H hostno|MAC ] [ [ -o  operation  ] [ -n name ] [ -v value ] ] [ -C ping [ -a ip ] [ -b packetsize ] [ -c count ] [ -i interval ] ]
iscsiadm -m fw [ -d debug_level ] [ -l ]
iscsiadm -m host [ -P printlevel ] [ -H hostno|MAC ] [ [ -C chap [ -x chap_tbl_idx ] ] | [ -C flashnode [ -A portal_type ] [ -x flashnode_idx ] ] | [ -C stats ] ] [ [ -o operation ] [ -n name ] [ -v value ] ]
iscsiadm -k priority

 

2. LinuxからiSCSIターゲットを認識させる

初期は何も登録されていない状態です。

# iscsiadm -m node

 

discoveryでターゲットを認識させます。

# iscsiadm -m discovery -t sendtargets -p 192.168.xx.xx

 

3.iSCSIターゲットへのログイン

再度、下記のコマンドで iSCSI が認識されているか確認します。

# iscsiadm -m node

 

認識されていたら、iSCSI ターゲットにログインします。

# iscsiadm -m node -T iqn.xxx.xxx:xxx.sdb -p 192.168.xx.xx --login

 

4. 認識したディスクの確認

fsckコマンドでディスクを確認します。

# fdisk -l

※fdiskコマンドでハードディスクのパーティション情報を調べることができます。

 

fdiskコマンドを実行して iscsiadm コマンドで認識した iSCSI を確認します。

OS が iSCSI ディスクを認識できたら、fdisk コマンドで iSCSI ディスクが表示されます。

※フォーマットしてファイルシステムを作成するまでは正常なディスクとして認識されません。

→「ディスク●●は正常な領域テーブルを含んでいません」というような警告が表示されます。

 

ここでのチェックで重要なのは、1つのディスクを複数のパスで見えている、ということです。

上図のように1つのストレージに対して複数のパスが見えていれば、マルチパスの設定がうまく行っています。

 

5.WWID(WWN)をチェックする

scsi_idコマンドで WWN をチェックできます。

CentOS7ではscsi_idコマンドは「/usr/lib/udev/scsi_id」にありました。

# /usr/lib/udev/scsi_id -g -d /dev/mapper/cl-root
3500xxxxxx64de7a8
# /usr/lib/udev/scsi_id --whitelisted -d /dev/mapper/cl-root
3500xxxxxx64de7a8
#

 

6. /etc/multipath.conf を編集する。

以下のように/etc/multipath.confを編集します。

※これは一例で1つのディスクを多数のパスで読み込む場合を想定しています。

multipaths {
       multipath {
              wwid                  3500xxxxxx64de7a8 ←自身のサーバーのwwidを調べて入力します。
              alias                  test_multipath ← multipath 属性が適用されるマルチパスデバイスのシンボリック名(エイリアス)を指定します。
              path_grouping_policy  failover  ← デフォルトのパスグルーピングポリシーを指定します。
              path_selector         "round-robin 0"  ← デフォルトのパスグルーピングポリシーを指定します。
              failback              manual ← パスグループのフェイルバックを指定します。
              rr_weight             priorities ← パスの重みづけを指定します。
              no_path_retry         5 ← 障害が発生した場合、何回施行するのかを決定します。
       }
}

上記のようにマルチパスの設定を入れます。

設定の肝は、正しいWWIDが設定されているかどうか。

 

7.設定が正しいか確認する

設定が完了したら、正しくマルチパスが設定されていることを確認します。

以下の結果は参考例です。

# multipath -ll
3500xxxxxx64de7a8 dm-10 WINSYS,SF2372
size=269G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 19:0:0:1 sdc 8:32  active ready  running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 18:0:0:1 sdh 8:112 active ready  running

上記のように1つのディスクに対して複数のパスが通っていることを確認します。

ちょっとややこしい WWN(WWID)  WWNN  WWPN の違いは?

いろいろ調べていたら似たような用語がいくつか出てきました。

WWN(WWID)→ ストレージで使う識別子

WWPN → ファイバーチャネルのファブリック内のポートに割り当てられた名前

WWNN → ファイバーチャネルのファブリック内のノードに割り当てられた名前

※ファブリックとは、ファイバーチャネルスイッチ(FCスイッチ)を中心としたネットワークのことを言います。

WWN(WWID)

WWN(World Wide Name)またはWWID(World Wide Identifier)は、

  • FC(ファイバーチャネル)
  • ATA(Advanced Technology Attachment)
  • SAS(Serial Attached SCSI)

などのストレージで使用される一意の(ユニークな)識別子です。

一意なので100%重複はありません。ユニークという意味です。

WWNは、様々な利用ができます。

たとえば、ファイバチャネルネットワークでは、WWNをスイッチを識別するためのWWNN(World Wide Node Name)またはスイッチ上の個々のポートを識別するWWPN(World Wide Port Name)として使用できます。

WWPN(World Wide Port Name)

World Wide Port Nameは、ファイバーチャネルのファブリック内のポートに割り当てられたWorld Wide Nameです。

ストレージエリアネットワークで使用され、ネットワーク内の一意の識別子のため、イーサネットプロトコルのMACアドレスと同等の機能を実行します。

WWNN

World Wide Node Name、WWNN、ファイバーチャネルのファブリック内のノード(エンドポイント、デバイス)に割り当てられたWorld Wide Nameです。

単一のネットワーク・ノードの複数のネットワーク・インターフェースとしてポートを識別する、同じWWNNがネットワーク上の多くの異なるポート(異なるアドレス)で認識されます。

まとめ

全然まとまらない感じになってしまいました。

すみません。

のちほど検証して検証結果を詳しく追記したいと思います。

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。