LoginSignup
6
10

More than 5 years have passed since last update.

複数ポート接続でのDM-Multipathを使ったiSCSI設定

Last updated at Posted at 2017-06-19

複数ポートを持ったiSCSIストレージへの接続の設定

通常iSCSIストレージには複数の接続用ポートがあるため冗長化と帯域を稼ぐことが同時に可能となる。

DM-Multipathを利用する理由

bondingでも良さそうに思えるが、冗長化は実現出来たとしても負荷分散はできないため。

下準備

環境

  • ホスト(イニシエータ)側サーバにはiSCSIのために4ポート分NICが追加してある (2ポートGbE ×2枚)
  • iSCSIストレージ(ターゲット)はDELL MD3200i
    • 4ポートのiSCSI用GbEポートを持つコントローラが2枚取り付けてある
  • 解説中で利用している表示はCentOS 7のものだが、CentOS 6でも同じ設定で対応可能

IPアドレス

iSCSI用のIPアドレスを設定する。このとき、各デバイスでポート毎に異なるサブネットになるようにする。

デバイス IPアドレス
ホスト 192.168.201.1 - 192.168.204.1
ストレージコントローラ0 192.168.201.101 - 192.168.204.101
ストレージコントローラ1 192.168.201.102 - 192.168.204.102

ホスト側の各ポートのMACアドレスを確認しておく。

ポートNo. IPアドレス MACアドレス
0 192.168.201.1 xx:xx:xx:xx:xx:aa
1 192.168.202.1 xx:xx:xx:xx:xx:bb
2 192.168.203.1 xx:xx:xx:xx:xx:cc
3 192.168.204.1 xx:xx:xx:xx:xx:dd

iSCSIの設定

iSCSIイニシエータ用パッケージの導入

# yum install -y iscsi-initiator-utils

iSCSIイニシエータIQN

イニシエータIQNをメモするか好きな値に書き換える。書き換える場合は決められたフォーマットに従うようにする。
このイニシエータIQNからストレージの使いたいLUNにアクセス出来るよう設定しておく。

# vi /etc/iscsi/initiatorname.iscsi

ifaceの設定

# iscsiadm -m iface -I iface0 -o new
New interface iface0 added
# iscsiadm -m iface -I iface1 -o new
New interface iface1 added
# iscsiadm -m iface -I iface2 -o new
New interface iface2 added
# iscsiadm -m iface -I iface3 -o new
New interface iface3 added

# iscsiadm -m iface -I iface0 -o update -n iface.hwaddress -v xx:xx:xx:xx:xx:aa
iface0 updated.
# iscsiadm -m iface -I iface1 -o update -n iface.hwaddress -v xx:xx:xx:xx:xx:bb
iface1 updated.
# iscsiadm -m iface -I iface2 -o update -n iface.hwaddress -v xx:xx:xx:xx:xx:cc
iface2 updated.
# iscsiadm -m iface -I iface3 -o update -n iface.hwaddress -v xx:xx:xx:xx:xx:dd
iface3 updated.

# iscsiadm -m iface
default tcp,<empty>,<empty>,<empty>,<empty>
iser iser,<empty>,<empty>,<empty>,<empty>
iface0 tcp,xx:xx:xx:xx:xx:aa,<empty>,<empty>,<empty>
iface1 tcp,xx:xx:xx:xx:xx:bb,<empty>,<empty>,<empty>
iface2 tcp,xx:xx:xx:xx:xx:cc,<empty>,<empty>,<empty>
iface3 tcp,xx:xx:xx:xx:xx:dd,<empty>,<empty>,<empty>

iSCSIターゲットを認識させる

iscsiadmコマンドでiSCSIターゲットのディスカバリをサブネット毎に行う。複数の接続エラーが表示され、うんざりするほど時間がかかるが最終的に認識していれば問題ない。
ストレージコントローラ0側のIPアドレスに対して行えばコントローラ1側も自動的に認識してくれたが機種によるのかも?ストレージ装置が複数ある場合は同一サブネット内でも見つけてくれないので別途そのIPを指定する必要がある。

# iscsiadm -m discovery -t sendtargets -p 192.168.201.101
(略)
# iscsiadm -m discovery -t sendtargets -p 192.168.202.101
(略)
# iscsiadm -m discovery -t sendtargets -p 192.168.203.101
(略)
# iscsiadm -m discovery -t sendtargets -p 192.168.204.101
(略)

追記

下記のように設定すれば余計な手間が省けるかもしれないので今後検証してみる。
下記のようにサブネット毎に接続されているifaceを明示することで一瞬でディスカバリが終了する。しかし以降の手順で楽になることはない。

# iscsiadm -m discovery -t sendtargets -p 192.168.201.101 -I iface0
# iscsiadm -m discovery -t sendtargets -p 192.168.202.101 -I iface1
# iscsiadm -m discovery -t sendtargets -p 192.168.203.101 -I iface2
# iscsiadm -m discovery -t sendtargets -p 192.168.204.101 -I iface3

詳細な認識状況を確認

全てのifaceXが全てのストレージのポートと通信可能ということになっている。

#  iscsiadm -m node -P 1
Target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        Portal: 192.168.201.201:3260,1
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3
        Portal: 192.168.202.201:3260,1
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3
        Portal: 192.168.203.201:3260,1
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3
        Portal: 192.168.204.201:3260,1
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3
        Portal: 192.168.201.202:3260,2
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3
        Portal: 192.168.202.202:3260,2
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3
        Portal: 192.168.203.202:3260,2
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3
        Portal: 192.168.204.202:3260,2
                Iface Name: iface0
                Iface Name: iface1
                Iface Name: iface2
                Iface Name: iface3

実際には通信不可能な組み合わせを削除

何か間違ってるんじゃないかと思うくらいとても面倒くさい作業…

# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.202.101 -I iface0 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.202.102 -I iface0 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.203.101 -I iface0 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.203.102 -I iface0 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.204.101 -I iface0 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.204.102 -I iface0 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.201.101 -I iface1 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.201.102 -I iface1 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.203.101 -I iface1 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.203.102 -I iface1 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.204.101 -I iface1 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.204.102 -I iface1 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.201.101 -I iface2 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.201.102 -I iface2 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.202.101 -I iface2 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.202.102 -I iface2 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.204.101 -I iface2 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.204.102 -I iface2 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.201.101 -I iface3 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.201.102 -I iface3 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.202.101 -I iface3 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.202.102 -I iface3 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.203.101 -I iface3 -o delete
# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p 192.168.203.102 -I iface3 -o delete

削除後の設定を確認

不要なエントリを削除して綺麗になった

#  iscsiadm -m node -P 1
Target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        Portal: 192.168.201.101:3260,1
                Iface Name: iface0
        Portal: 192.168.202.101:3260,1
                Iface Name: iface1
        Portal: 192.168.203.101:3260,1
                Iface Name: iface2
        Portal: 192.168.204.101:3260,1
                Iface Name: iface3
        Portal: 192.168.201.102:3260,2
                Iface Name: iface0
        Portal: 192.168.202.102:3260,2
                Iface Name: iface1
        Portal: 192.168.203.102:3260,2
                Iface Name: iface2
        Portal: 192.168.204.102:3260,2
                Iface Name: iface3

全てのiSCSIターゲットにログイン

実際に接続されていないiSCSIターゲットのエントリを消していると数秒でログイン処理が完了するはず。変なエントリがあるとタイムアウトが発生する。

# iscsiadm -m node -l
Logging in to [iface: iface0, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.201.201,3260] (multiple)
Logging in to [iface: iface1, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.202.201,3260] (multiple)
Logging in to [iface: iface2, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.203.201,3260] (multiple)
Logging in to [iface: iface3, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.204.201,3260] (multiple)
Logging in to [iface: iface0, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.201.102,3260] (multiple)
Logging in to [iface: iface1, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.202.102,3260] (multiple)
Logging in to [iface: iface2, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.203.102,3260] (multiple)
Logging in to [iface: iface3, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.204.102,3260] (multiple)
Login to [iface: iface0, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.201.101,3260] successful.
Login to [iface: iface1, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.202.101,3260] successful.
Login to [iface: iface2, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.203.101,3260] successful.
Login to [iface: iface3, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.204.101,3260] successful.
Login to [iface: iface0, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.201.102,3260] successful.
Login to [iface: iface1, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.202.102,3260] successful.
Login to [iface: iface2, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.203.102,3260] successful.
Login to [iface: iface3, target: iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: 192.168.204.102,3260] successful.

# iscsiadm -m session
tcp: [1] 192.168.201.101:3260,1 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)
tcp: [2] 192.168.202.101:3260,1 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)
tcp: [3] 192.168.203.101:3260,1 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)
tcp: [4] 192.168.204.101:3260,1 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)
tcp: [5] 192.168.201.102:3260,2 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)
tcp: [6] 192.168.202.102:3260,2 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)
tcp: [7] 192.168.203.102:3260,2 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)
tcp: [8] 192.168.204.102:3260,2 iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(non-flash)

iSCSIボリュームの認識状況を確認

ホスト側のイニシエータIQNのマッピングがストレージ側で適切に行われていないとiSCSIのセッションを確立出来てもブロックデバイスが見えない。# iscsiadm -m session --rescanしても表示されないため、その場合はストレージ側の設定を変更した後に一度iSCSIセッションを切断して再度ログインする。
複数のiSCSIストレージにログインしている時には既に利用している接続に影響を及ぼさないようにターゲット名を指定してログアウトすること。

# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3200i.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --logout
(略)

# iscsiadm -m node --login
(略)

iSCSIセッションを切断する前に既にマウントしているiSCSIボリュームがある場合はアンマウントする必要があるため、場合によってはかなりキツい。LUNを追加した場合は# iscsiadm -m node -Rでログアウトすること無く追加したiSCSIボリュームを認識させられるが、容量変更や削除した場合はログアウトさせる必要がある(確認した限りそう思われる)。

上手く認識出来ていれば以下のようになる(sdb~sdi)。

# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   149G  0 disk
tqsda1   8:1    0   500M  0 part /boot
tqsda2   8:2    0 140.5G  0 part /
mqsda3   8:3    0     8G  0 part [SWAP]
sdb      8:16   0   100G  0 disk
sdc      8:32   0   100G  0 disk
sdd      8:48   0   100G  0 disk
sde      8:64   0   100G  0 disk
sdf      8:80   0   100G  0 disk
sdg      8:96   0   100G  0 disk
sdh      8:112  0   100G  0 disk
sdi      8:128  0   100G  0 disk
sr0     11:0    1  1024M  0 rom

multipath設定

DM-Multipathパッケージの導入

# yum install -y device-mapper-multipath
# modprobe dm-multipath

設定ファイルの作成

multipath用設定ファイルを作成する。このファイルは自動では作成されないためテンプレをコピーして書き換えるか自分で適当に作成する必要がある。間違えて /etc/multipath/ 配下に作成しないこと
基本的にブラックリストに設定して利用したいwwidのみ例外登録するのが安全だと思う。

/etc/multipath.conf
blacklist {
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^hd[a-z]"
    devnode "sda"
    wwid *

    device {
        vendor "*"
        product "Universal Xport"
    }
}
blacklist_exceptions {
    wwid aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
}          
defaults {
    user_friendly_names yes
    path_grouping_policy multibus
}
devices {
    device {
        vendor "DELL"
        product "MD32xxi"
        rr_min_io 32
        path_checker rdac
        path_selector "round-robin 0"
        hardware_handler "1 rdac"
        failback immediate
        prio rdac
    }
}

設定を反映させる

最期に# multipath -v2を実行したときに表示が出れば成功。上手くいかないときは# multipath -v3で詳細を確認すると良い。
設定ファイルを書き換えた場合は再度# multipathから順に実行する。

# multipath
# multipath -F
# multipath -v2
(略)

どのようにmultipathが構成されているか確認

# multipath -ll
mpatha (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) dm-0 DELL    ,MD32xxi
size=100G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=14 status=active
| |- 14:0:0:0 sdd 8:48  active ready running
| |- 15:0:0:0 sdb 8:16  active ready running
| |- 16:0:0:0 sdc 8:32  active ready running
| `- 17:0:0:0 sde 8:64  active ready running
`-+- policy='round-robin 0' prio=9 status=enabled
  |- 18:0:0:0 sdi 8:128 active ready running
  |- 19:0:0:0 sdg 8:96  active ready running
  |- 20:0:0:0 sdh 8:112 active ready running
  `- 21:0:0:0 sdf 8:80  active ready running

mpathaという名前を変えたい場合は/etc/multipath/bindingsを書き換えて上記の# multipathからの手順をやり直す。
その際にフレンドリ名とwwidの間に余計なスペースがあると失敗する。

常駐設定

最初の# multipathの実行時に起動しているが一応起動と常駐のための操作を行う。

# systemctl start multipathd
# systemctl enable multipathd

ベンチマーク

fioを使って下記のベンチマークを実行

seqread4.fio
[global]
filename=/dev/mapper/mpatha
group_reporting=1
direct=1
ioengine=libaio

[seqread4]
readwrite=read
blocksize=1m
size=1g
numjobs=4
loops=5
# fio seqread4.fio
(略)
seqread4: (groupid=0, jobs=4): err= 0: pid=30251: Mon Jun 19 13:23:32 2017
Run status group 0 (all jobs):
   READ: io=20480MB, aggrb=297717KB/s, minb=297717KB/s, maxb=297717KB/s, mint=70441msec, maxt=70441msec

300MB/s程度の速度が出ていることからDM-multipathにより負荷分散が出来ていることが確認できる。

メモ

あくまで本内容は個人的な検証結果のメモです。
CentOS 6まではiSCSIのセッションが確立されている状態で# /etc/init.d/network restartするとiSCSIがログアウトされてしまうため悲惨な状態になっていたが、CentOS 7からは問題ないように対応されている模様。

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10