はじめに
ONTAP 9.19.1からA70などのAFF機器では、iSCSIおよびNVMe/TCPプロトコルにおいてActive/ActiveなMultipath構成をサポートするようになってます。
この機能では、LIFを構成するPortに異常を検知した際には、LIFが自動的に別のPortへ移行する仕組みを採用する事で、最適化されたPathへの切り替えが迅速に行われ、Failover影響を最小限に抑えます。
本記事ではLinux環境のActive/Active化したiSCSI構成の作成手順について記載いたします。
Active/Active化における制約事項
利用にあたっての詳細な制約事項については、マニュアルを参照頂ければと思いますが、要点としては以下の内容になります。
-
ONTAP9.19.1で新規作成したSVMのみ利用可能
(既存構成からの変換はできない) -
High Availability構成間におけるActive/Active化
(4 Node間で自由にLIF移動できるということではない)
記事における環境情報
本記事では、以下の環境で実施した内容となります。
分かり易くするために、Network構成は単純化しています。
- ONTAP:9.19.1 (A400の2 Node構成)
- Red Hat Enterprise Linux 9.8
iSCSI用のActive/Active環境作成手順
1. SVMの作成及び設定
1-1. SVMの新規作成
san-multipathingをactive-activeとして指定し、SVMの作成を実施します。
> vserver create -vserver iscsi_test01 -subtype default -san-multipathing active-active
[Job 3058] Job succeeded:
Vserver creation completed.
# 状態の確認
> vserver show -vserver iscsi_test01 -fields san-multipathing
vserver san-multipathing
------------ ----------------
iscsi_test01 active-active
1-2. SVMへLIFの作成
各NodeをHomeとしたiSCSi用のLIFを作成します。
作成時はfailover-policy指定することなく、sfo-partner-onlyで作成されます。
# Node1用のLIF
> net int create -vserver iscsi_test01 -lif data01 -service-policy default-data-iscsi -address 172.16.21.55 -netmask 255.255.255.0 -home-node PS-A400-01 -home-port a0a-21
(network interface create)
# Node2用のLIF
> net int create -vserver iscsi_test01 -lif data02 -service-policy default-data-iscsi -address 172.16.21.56 -netmask 255.255.255.0 -home-node PS-A400-02 -home-port a0a-21
(network interface create)
# 状態の確認
> net int show -vserver iscsi_test01 -fields address,service-policy,curr-node,curr-port,failover-policy
(network interface show)
vserver lif service-policy address curr-node curr-port failover-policy
------------ ------ ------------------ ------------ ---------- --------- ----------------
iscsi_test01 data01 default-data-iscsi 172.16.21.55 PS-A400-01 a0a-21 sfo-partner-only
iscsi_test01 data02 default-data-iscsi 172.16.21.56 PS-A400-02 a0a-21 sfo-partner-only
2 entries were displayed.
1-3. VolumeとLUNの作成
本記事では、シンプロ構成でVolumeとLUNを作成します。
また、容量溢れが起きないように、pace-allocationも有効化しておきます。
(LinuxのファイルシステムとONTAP上のWAFLの空きを同期させる)
# Volumeの作成
> volume create -vserver iscsi_test01 -volume iscsivol01 -state online -aggregate aggr1_node1 -size 10g -space-guarantee none -snapshot-policy none
[Job 3059] Job succeeded: Successful
# LUNの作成
> lun create -vserver iscsi_test01 -path /vol/iscsivol01/lun01 -size 8g -ostype linux -space-reserve disabled -space-allocation enabled
Created a LUN of size 8g (8589934592)
1-4. iSCSIの有効化
SVMへiSCSIを有効化させます。
> iscsi create -vserver iscsi_test01:
1-5. igroupの作成とLUNとのMapping
igroupの作成は実施しますが、Linux側ではiscsiに必要なモジュールをまだ導入していないので、Initiator登録は後で実施します。
# igroupの作成
> igroup create -vserver iscsi_test01 -igroup ig01 -protocol iscsi -ostype linux
# LunとのMapping
> lun mapping create -vserver iscsi_test01 -path /vol/iscsivol01/lun01 -igroup ig01
# LunとのMapping確認
> lun show -m -vserver iscsi_test01
Vserver Path Igroup LUN ID Protocol
---------- ---------------------------------------- ------- ------ --------
iscsi_test01
/vol/iscsivol01/lun01 ig01 0 iscsi
2. Linux側のiSCSI設定
2-1. iSCSI Initiatorの導入
iSCSI Initiatorが必要になるので、iscsi-initiator-utilsの導入を実施します。
> sudo dnf install iscsi-initiator-utils
サブスクリプション管理リポジトリーを更新しています。
<中略>
完了しました!
# iscsidサービスの有効化
> sudo systemctl start iscsid
> sudo systemctl enable iscsid
Created symlink /etc/systemd/system/multi-user.target.wants/iscsid.service → /usr/lib/systemd/system/iscsid.service
2-2. ONTAPのigroupへInitiatorの追加
Linux側のIQN(iSCSI Qualified Name)を確認します。
> cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:982ba056d7a
Linux側のIQNが確認できるようになったので、ONTAP側でigroupへIQNの追加を実施します。
# ONTAP側で操作
> igroup add -vserver iscsi_test01 -igroup ig01 -initiator iqn.1994-05.com.redhat:982ba056d7a
2-3. iSCSI Targetの探索
ONTAPで作成したiSCSI用SVMの探索を実施します。
> sudo iscsiadm -m discovery -t sendtargets -p 172.16.21.55
172.16.21.55:3260,1048 iqn.1992-08.com.netapp:sn.968f261ca1d511f1ba79d039ead56cfd:vs.36
172.16.21.56:3260,1049 iqn.1992-08.com.netapp:sn.968f261ca1d511f1ba79d039ead56cfd:vs.36
2-4. iSCSI Targetにログイン
探索したiSCSI Target(SVM)へloginを実施します。
> sudo iscsiadm -m node --login -p 172.16.21.55
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.968f261ca1d511f1ba79d039ead56cfd:vs.36, portal: 172.16.21.55,3260] successful.
> sudo iscsiadm -m node --login -p 172.16.21.56
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.968f261ca1d511f1ba79d039ead56cfd:vs.36, portal: 172.16.21.56,3260] successful.
# ログインセッションが確立したことを確認
> sudo iscsiadm -m session
tcp: [1] 172.16.21.55:3260,1048 iqn.1992-08.com.netapp:sn.968f261ca1d511f1ba79d039ead56cfd:vs.36 (non-flash)
tcp: [2] 172.16.21.56:3260,1049 iqn.1992-08.com.netapp:sn.968f261ca1d511f1ba79d039ead56cfd:vs.36 (non-flash)
2-5. ONTAPのLUNデバイスの確認
fdiskコマンドを実行するとONTAPに作成してあるLUNが見えるので、確認できたデバイスのwwidを確認しておきます。
(後のMultipath設定の部分で利用)
まだMultipathの設定は実施していないので、同じLUNが別デバイスとして2つ見えてるはずです。
> sudo fdisk -l
<中略>
ディスク /dev/sdb: 8 GiB, 8589934592 バイト, 16777216 セクタ
ディスク型式: LUN C-Mode
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 65536 バイト
ディスク /dev/sdc: 8 GiB, 8589934592 バイト, 16777216 セクタ
ディスク型式: LUN C-Mode
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 65536 バイト
> sudo /lib/udev/scsi_id --whitelisted --device=/dev/sdb
3600a0980383152454f242f3845393573
> sudo /lib/udev/scsi_id --whitelisted --device=/dev/sdc
3600a0980383152454f242f3845393573
3. Linux側でMultipath設定
3-1. device-mapper-multipathの導入
> sudo dnf install device-mapper-multipath
サブスクリプション管理リポジトリーを更新しています。
<中略>
インストール済み:
device-mapper-multipath-0.8.7-45.el9.x86_64 device-mapper-multipath-libs-0.8.7-45.el9.x86_64
完了しました!
# multipathサービスの有効化
> sudo systemctl start multipathd
> sudo systemctl enable multipathd
3-2. Multipathの設定
Linuxのroot領域は ONTAP上のLUNでは無く、本記事ではMultipath設定にする必要が無いので、multipath.confのblacklistの項目に追記を行います。
追記に必要なroot領域のwwidを確認しておきます。
> sudo /lib/udev/scsi_id --whitelisted --device=/dev/sda
3600224807514249494f4b536145885eb
multipath.confの修正を実施しますが、本記事では以下の内容を加味して修正しています。
- root領域は対象外なので、black listに追記
-
認識するONTAP LUNに対してmpathXXというMultipath Device名となるように設定
(指定しない場合は、長い英数字で表示) - path_selectorは記載しないので、デフォルトのround-robin 0を利用
# multipathの設定ファイルを編集
> cat /etc/multipath.conf
defaults {
user_friendly_names yes
find_multipaths yes
}
devices {
device {
vendor "NETAPP "
product "LUN.*"
no_path_retry queue
path_checker tur
}
}
blacklist {
wwid 3600224807514249494f4b536145885eb
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
devnode "^cciss.*"
}
multipaths {
multipath {
wwid 3600a0980383152454f242f3845393573
alias mpath0
}
}
3-3. Multipathの認識
マルチパスデバイスの一覧を更新してから、パスの状態を確認します。
表示されるPathがactiveのみなっていることが確認できるかと思います。
> sudo multipath -r
> sudo multipath -ll
mpath0 (3600a0980383152454f242f3845393573) dm-3 NETAPP,LUN C-Mode
size=8.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
`-+- policy='service-time 0' prio=50 status=active
|- 2:0:0:0 sdc 8:32 active ready running
`- 3:0:0:0 sdb 8:16 active ready running
ONTAP9.19.1以前だと以下のようにactiveとenabledと表示されていたかと思います。
> multipath -ll
mpath1 (3600a098038313951683f576a526d3138) dm-5 NETAPP,LUN C-Mode
size=3.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- 4:0:0:1 sde 8:64 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
`- 5:0:0:1 sdg 8:96 active ready running
4. クライアントからのアクセス
LUNからファイルシステムを作成し、アクセス時に両Pathを使用していることを確認するために、まずはパーティション作成を実施します。
4-1. ファイルシステムの作成とmount
> sudo fdisk /dev/mapper/mpath0
<中略>
新しい DOS ディスクラベルを作成しました。識別子は 0x73dac415 です。
コマンド (m でヘルプ): n
パーティションタイプ
p 基本パーティション (0 プライマリ, 0 拡張, 4 空き)
e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (1-4, 既定値 1): 1
最初のセクタ (2048-16777215, 既定値 2048):
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P} (2048-16777215, 既定値 16777215):
新しいパーティション 1 をタイプ Linux、サイズ 8 GiB で作成しました。
作成したパーティションからファイルシステムを作成します。
> sudo mkfs.ext4 /dev/mapper/mpath0p1
<中略>
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
ファイルシステムをmountします。
# mountポイントの作成
> sudo mkdir /ontap
> sudo chmod 777 /ontap
# mountを実施と確認
> sudo mount /dev/mapper/mpath0p1 /ontap
> df -h /ontap
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/mpath0p1 7.8G 24K 7.4G 1% /ontap
4-2. fioで負荷を掛けて両パスを使用している事の確認
Linuxからfioで負荷を掛けた際にONTAP側の両Node間で負荷を確認します。
均等に負荷が掛かっているか確認するため、ONTAP上のLUNにQoSを設定しNetworkのPortがボトルネックにならない形としています。
# 最大100mb/secのPolicyが作成されている事の確認
> qos policy-group show -vserver iscsi_test01 -policy-group policy01 -fields max-throughput
policy-group max-throughput
------------ --------------
policy01 100MB/s
# 作成したPolicyがLUNに設定されている事の確認
> lun show -vserver iscsi_test01 -fields qos-policy-group
vserver path qos-policy-group
------------ --------------------- ----------------
iscsi_test01 /vol/iscsivol01/lun01 policy01
Linuxからfioで負荷を掛け、その際の両Node間で負荷を確認します。
# fioによる負荷掛け
> sudo fio --directory="/ontap" --name=random-write --ioengine=libaio --rw=randwrite --bs=16k --size=1G --numjobs=4 --time_based --runtime=60s
random-write: (g=0): rw=randwrite, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=libaio, iodepth=1
...
fio-3.35
Starting 4 processes
Jobs: 4 (f=4): [w(4)][52.5%][eta 00m:28s]
各Nodeの負荷状況を確認します。
# Node1側の負荷
> node run -node PS-A400-01 sysstat -i 1
CPU NFS CIFS iSCSI Net kB/s Disk kB/s iSCSI kB/s Cache
in out read write in out age
2% 0 0 0 17 10 0 0 0 0 15
3% 0 0 0 9 4 0 0 0 0 15
4% 0 0 200 4156 47 4712 24 4407 0 15
8% 0 0 2230 66979 426 1032 11664 62931 0 15
11% 0 0 2317 65215 430 0 24 61997 0 15
9% 0 0 1894 65151 399 12 0 61706 0 15
8% 0 0 2071 65036 405 1708 3152 61850 0 15
8% 0 0 1488 63680 355 0 24 60658 0 15
9% 0 0 1793 64111 377 24 12 61346 0 15
<中略>
# Node2側の負荷
> node run -node PS-A400-02 sysstat -i 1
CPU NFS CIFS iSCSI Net kB/s Disk kB/s iSCSI kB/s Cache
in out read write in out age
1% 0 0 0 12 12 404 960 0 0 >60
4% 0 0 1 9 4 12 0 0 0 >60
3% 0 0 1459 30502 217 0 24 38289 0 >60
3% 0 0 2205 66229 405 12 12 62882 0 >60
6% 0 0 2075 65828 414 0 24 62194 0 >60
4% 0 0 1869 64588 385 0 0 61665 0 >60
3% 0 0 1862 64628 386 24 0 61366 0 >60
6% 0 0 1584 64513 354 0 24 61452 0 >60
3% 0 0 1611 64990 360 0 12 61633 0 >60
<中略>
4-3. LIFの移動を実施した際の負荷確認
ONTAP側でNode1側のLIFをNode2に移動した際、Node2側でもI/Oの停止が発生しない事を確認します。
合わせて、Node2側のNetwork負荷が最終的に倍増する点も確認します。
(100mb/secが片Nodeに集中する点を確認)
# fio実行中にLIFのMigrate
> net int migrate -vserver iscsi_test01 -lif data01 -destination-node PS-A400-02 -destination-port a0a-21
(network interface migrate)
# LIFが移動している事の確認
> net int show -vserver iscsi_test01
(network interface show)
Logical Status Network Current Current Is
Vserver Interface Admin/Oper Address/Mask Node Port Home
----------- ---------- ---------- ------------------ ------------- ------- ----
iscsi_test01
data01 up/up 172.16.21.55/24 PS-A400-02 a0a-21 false
data02 up/up 172.16.21.56/24 PS-A400-02 a0a-21 true
2 entries were displayed.
# Node1側の負荷
> node run -node PS-A400-01 sysstat -i 1
CPU NFS CIFS iSCSI Net kB/s Disk kB/s iSCSI kB/s Cache
in out read write in out age
1% 0 0 0 9 6 24 12 0 0 16
5% 0 0 808 24585 144 4380 13880 29819 0 22
9% 0 0 2445 65703 434 0 24 62865 0 22
10% 0 0 2041 64650 420 12 0 61325 0 22
9% 0 0 2098 64805 393 0 24 61424 0 22
7% 0 0 1844 64300 391 12 12 60719 0 22
9% 0 0 1748 64155 362 12 0 61440 0 22
7% 0 0 1664 64063 368 0 24 60178 0 22
7% 0 0 1350 62062 322 648 1004 60129 0 22
9% 0 0 536 29009 199 32 24 20447 0 22
2% 0 0 0 11 6 12 12 0 0 22
17% 0 0 0 12 7 2840 230440 0 0 22
12% 0 0 0 8 5 1036 361752 0 0 22
10% 0 0 0 18 11 1024 364032 0 0 22
<中略>
# Node2側の負荷
> node run -node PS-A400-02 sysstat -i 1
CPU NFS CIFS iSCSI Net kB/s Disk kB/s iSCSI kB/s Cache
in out read write in out age
2% 0 0 0 8 6 0 24 0 0 >60
3% 0 0 241 1233 14 0 12 8274 0 >60
4% 0 0 2131 66795 406 12 24 62800 0 >60
5% 0 0 2491 65507 473 0 0 62669 0 >60
5% 0 0 1668 63731 350 12 0 60408 0 >60
4% 0 0 2217 64345 422 1444 2512 61161 0 >60
3% 0 0 1332 64246 328 0 12 60961 0 >60
4% 0 0 2063 64824 400 0 24 61751 0 >60
6% 0 0 1082 63198 306 12 0 60670 0 >60
5% 0 0 2068 70332 402 12 0 71868 0 >60
3% 0 0 692 57637 247 0 24 42476 0 >60
4% 0 0 605 32740 127 12 12 44462 0 >60
5% 0 0 2624 124973 630 0 24 118219 0 >60
5% 0 0 1700 111133 532 0 0 104980 0 >60
6% 0 0 1853 109461 482 24 0 104923 0 >60
5% 0 0 1914 110928 540 1644 2500 104792 0 >60
<中略>
参考及びリンク
Learn about SAN multipath and automatic LIF failover support for ONTAP systems
