Amazon FSx for NetApp ONTAP の iSCSI LUN を Linux で認識させる

# 概要
Amazon FSx for NetApp ONTAP では、ファイルストレージ(NFS)だけじゃなく、ブロックストレージとして iSCSI が利用できます。

今回は、Amazon FSx for NetApp ONTAP の iSCSI LUN を Linux で認識させるところまで実践してみたいと思います。

基本的な手順は、[AWS公式](https://docs.aws.amazon.com/ja_jp/fsx/latest/ONTAPGuide/iSCSI-LUNs.html) を参照しています。

# やること / やらないこと

### やること

今回取り上げるのは、ざっくり以下の内容です。
- NetApp側
    - iSCSIターゲット設定

- Linux側 
    - iSCSIイニシエーター設定
    - DM-Multipath設定

### やらないこと
以下については、Linuxの一般的な操作なので今回はやりません。
- パーティション作成
- ファイルシステム作成
- マウント

# 事前準備
安心安全のクラスメソッドさんの記事などを参考に、事前にSVMとボリュームを作成しておきます。

https://dev.classmethod.jp/articles/amazon-fsx-for-netapp-ontap/

ONTAPに接続後、以下コマンドでも確認可能です。

- SVM
```
::> vserver show
                               Admin      Operational Root
Vserver     Type    Subtype    State      State       Volume     Aggregate
----------- ------- ---------- ---------- ----------- ---------- ----------
fsx         data    default    running    running     fsx_root   aggr1
```
- ボリューム
```
::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
fsx       fsx_root     aggr1        online     RW          1GB    972.1MB    0%
fsx       vol1         aggr1        online     RW          1TB    860.3GB    0%
2 entries were displayed.
```

# LUNの作成
ONTAPの管理エンドポイントにSSH接続します。
```
$ ssh fsxadmin@management.fs-00db1764f1699fd52.fsx.ap-northeast-1.amazonaws.com
Password:

Last login time: 6/22/2023 19:51:03
```
事前にLUNが一つも作成されていないことを確認します。
```
::> lun show
This table is currently empty.
```
**lun create** コマンドで LUNを作成します。


```
::> lun create -vserver fsx -volume vol1 -lun lun01 -size 10240 -ostype linux -space-allocation enabled

Created a LUN of size 10k (10240)
```
LUNが作成されたことを確認します。
```
::> lun show
Vserver   Path                            State   Mapped   Type        Size
--------- ------------------------------- ------- -------- -------- --------
fsx       /vol/vol1/lun01                 online  unmapped linux        10KB
```

# Linux OSのiSCSI設定

必要なパッケージ(`iscsi-initiator-utils`と `device-mapper-multipath`)をインストールします。

```
$ sudo yum install device-mapper-multipath iscsi-initiator-utils -y
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                                                                                                                                                                                                                                                           | 3.7 kB  00:00:00
amzn2extra-docker                                                                                                                                                                                                                                                                                                                                    | 3.0 kB  00:00:00
amzn2extra-kernel-5.10                                                                                                                                                                                                                                                                                                                               | 3.0 kB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ device-mapper-multipath.x86_64 0:0.4.9-136.amzn2 を インストール
--> 依存性の処理をしています: device-mapper-multipath-libs = 0.4.9-136.amzn2 のパッケージ: device-mapper-multipath-0.4.9-136.amzn2.x86_64
--> 依存性の処理をしています: libmultipath.so.0()(64bit) のパッケージ: device-mapper-multipath-0.4.9-136.amzn2.x86_64
--> 依存性の処理をしています: libmpathpersist.so.0()(64bit) のパッケージ: device-mapper-multipath-0.4.9-136.amzn2.x86_64
--> 依存性の処理をしています: libmpathcmd.so.0()(64bit) のパッケージ: device-mapper-multipath-0.4.9-136.amzn2.x86_64
---> パッケージ iscsi-initiator-utils.x86_64 0:6.2.0.874-7.amzn2 を インストール
--> 依存性の処理をしています: iscsi-initiator-utils-iscsiuio >= 6.2.0.874-7.amzn2 のパッケージ: iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ device-mapper-multipath-libs.x86_64 0:0.4.9-136.amzn2 を インストール
---> パッケージ iscsi-initiator-utils-iscsiuio.x86_64 0:6.2.0.874-7.amzn2 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

============================================================================================================================================================================================================================================================================================================================================================================
 Package                                                                                                アーキテクチャー                                                               バージョン                                                                                  リポジトリー                                                                        容量
============================================================================================================================================================================================================================================================================================================================================================================
インストール中:
 device-mapper-multipath                                                                                x86_64                                                                         0.4.9-136.amzn2                                                                             amzn2-core                                                                         147 k
 iscsi-initiator-utils                                                                                  x86_64                                                                         6.2.0.874-7.amzn2                                                                           amzn2-core                                                                         420 k
依存性関連でのインストールをします:
 device-mapper-multipath-libs                                                                           x86_64                                                                         0.4.9-136.amzn2                                                                             amzn2-core                                                                         266 k
 iscsi-initiator-utils-iscsiuio                                                                         x86_64                                                                         6.2.0.874-7.amzn2                                                                           amzn2-core                                                                          90 k

トランザクションの要約
============================================================================================================================================================================================================================================================================================================================================================================
インストール  2 パッケージ (+2 個の依存関係のパッケージ)

総ダウンロード容量: 924 k
インストール容量: 3.3 M
Downloading packages:
(1/4): device-mapper-multipath-0.4.9-136.amzn2.x86_64.rpm                                                                                                                                                                                                                                                                                            | 147 kB  00:00:00
(2/4): device-mapper-multipath-libs-0.4.9-136.amzn2.x86_64.rpm                                                                                                                                                                                                                                                                                       | 266 kB  00:00:00
(3/4): iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64.rpm                                                                                                                                                                                                                                                                                            | 420 kB  00:00:00
(4/4): iscsi-initiator-utils-iscsiuio-6.2.0.874-7.amzn2.x86_64.rpm                                                                                                                                                                                                                                                                                   |  90 kB  00:00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                                                                                                                                                                                                        2.7 MB/s | 924 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64                                                                                                                                                                                                                                                                                              1/4
  インストール中          : iscsi-initiator-utils-iscsiuio-6.2.0.874-7.amzn2.x86_64                                                                                                                                                                                                                                                                                     2/4
  インストール中          : device-mapper-multipath-libs-0.4.9-136.amzn2.x86_64                                                                                                                                                                                                                                                                                         3/4
  インストール中          : device-mapper-multipath-0.4.9-136.amzn2.x86_64                                                                                                                                                                                                                                                                                              4/4
  検証中                  : device-mapper-multipath-0.4.9-136.amzn2.x86_64                                                                                                                                                                                                                                                                                              1/4
  検証中                  : iscsi-initiator-utils-iscsiuio-6.2.0.874-7.amzn2.x86_64                                                                                                                                                                                                                                                                                     2/4
  検証中                  : device-mapper-multipath-libs-0.4.9-136.amzn2.x86_64                                                                                                                                                                                                                                                                                         3/4
  検証中                  : iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64                                                                                                                                                                                                                                                                                              4/4

インストール:
  device-mapper-multipath.x86_64 0:0.4.9-136.amzn2                                                                                                                                     iscsi-initiator-utils.x86_64 0:6.2.0.874-7.amzn2

依存性関連をインストールしました:
  device-mapper-multipath-libs.x86_64 0:0.4.9-136.amzn2                                                                                                                              iscsi-initiator-utils-iscsiuio.x86_64 0:6.2.0.874-7.amzn2

完了しました!
$
```
iSCSIサービスを起動します。
```
$ sudo systemctl status iscsid.service
● iscsid.service - Open-iSCSI
   Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:iscsid(8)
           man:iscsiadm(8)

$ sudo systemctl start iscsid

$ sudo systemctl status iscsid.service
● iscsid.service - Open-iSCSI
   Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
   Active: active (running) since 木 2023-06-22 20:29:35 UTC; 2s ago
     Docs: man:iscsid(8)
           man:iscsiadm(8)
  Process: 17175 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS)
 Main PID: 17177 (iscsid)
   CGroup: /system.slice/iscsid.service
           ├─17176 /usr/sbin/iscsid
           └─17177 /usr/sbin/iscsid

 6月 22 20:29:35 ip-10-0-0-142.ap-northeast-1.compute.internal systemd[1]: Starting Open-iSCSI...
 6月 22 20:29:35 ip-10-0-0-142.ap-northeast-1.compute.internal iscsid[17175]: iSCSI logger with pid=17176 started!
 6月 22 20:29:35 ip-10-0-0-142.ap-northeast-1.compute.internal systemd[1]: Failed to parse PID from file /var/run/iscsid.pid: Invalid argument
 6月 22 20:29:35 ip-10-0-0-142.ap-northeast-1.compute.internal iscsid[17176]: iSCSI daemon with pid=17177 started!
 6月 22 20:29:35 ip-10-0-0-142.ap-northeast-1.compute.internal systemd[1]: Started Open-iSCSI.
```

以下のコマンドでフェイルオーバー設定用の DM-Multipath をセットアップします。
このコマンドでマルチパス設定が有効になり、multipathd デーモンが起動されます。
```
$ sudo mpathconf --enable --with_multipathd y
```

EC2インスタンスのイニシエーター名を確認します。
```
$ sudo cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:0f38a7bcd63
```

# iSCSIターゲットの設定
ONTAP CLI からiSCSIターゲットの設定をします。

事前にigroupが1つも作成されていないことを確認します。
```
::> lun igroup show
This table is currently empty.
```

igroup(イニシエーターグループ)を作成します。
`-initiator` には、先ほど確認したEC2インスタンスのイニシエータ名を記載します。
```
::> lun igroup create -vserver fsx -igroup igroup_01 -initiator iqn.1994-05.com.redhat:0f38a7bcd63 -protocol iscsi -ostype linux
```
igroupが作成されたことを確認します。
```
::> lun igroup show
Vserver   Igroup       Protocol OS Type  Initiators
--------- ------------ -------- -------- ------------------------------------
fsx       igroup_01    iscsi    linux    iqn.1994-05.com.redhat:0f38a7bcd63
```
LUNとイニシエーターグループのマッピングを作成します。
事前にマッピング状態を確認します。
この時点では、unmapped になっています。
```
::> lun show -path /vol/vol1/lun01 -fields state,mapped,serial-hex
vserver path            serial-hex               state  mapped
------- --------------- ------------------------ ------ --------
fsx     /vol/vol1/lun01 6c574230673f55744a346669 online unmapped
```

マッピングを作成します。
```
::> lun mapping create -vserver fsx -path /vol/vol1/lun01 -igroup igroup_01 -lun-id 01
```

再度コマンドを実行し、mapped となっていることを確認します。
```
::> lun show -path /vol/vol1/lun01 -fields state,mapped,serial-hex
vserver path            serial-hex               state  mapped
------- --------------- ------------------------ ------ ------
fsx     /vol/vol1/lun01 6c574230673f55744a346669 online mapped
```

対象SVMのiSCSI IPアドレスを確認します。
```
::> network interface show -vserver fsx
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
fsx
            iscsi_1      up/up    10.0.0.41/24       FsxId00db1764f1699fd52-01 e0e true
            iscsi_2      up/up    10.0.0.121/24      FsxId00db1764f1699fd52-02 e0e true
            nfs_smb_management_1 up/up 10.0.0.217/24 FsxId00db1764f1699fd52-01 e0e true
3 entries were displayed.
```

# Amazon Linux 2 で認識させる

事前に確認した`iscsi_1`のIPアドレスを `--portal` に指定して、ターゲットのiSCSIノードを検出します。
```
$ sudo iscsiadm --mode discovery --op update --type sendtargets --portal 10.0.0.41
10.0.0.41:3260,1028 iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3
10.0.0.121:3260,1030 iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3
```
各アベイラビリティーゾーンの ONTAP ノードごとにイニシエーターごとに 4 つのセッションを確立し、クライアントが最大 20 Gb/秒 (2,500 MB / 秒) の集約スループットを iSCSI LUN に駆動できるようにします。

```
$ sudo iscsiadm --mode node -T iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3 --op update -n node.session.nr_sessions -v 4
```

ターゲットイニシエーターにログインします。
iSCSI LUN が、使用可能なディスクとして表示されます。
```
$ sudo iscsiadm --mode node -T iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3 --login
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] (multiple)
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.41,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.c8bdab770d1a11eeaea9bb21f0b8b056:vs.3, portal: 10.0.0.121,3260] successful.
```

マルチパスの状態を見ると、iSCSI セッションを識別してマージしたことが確認できます。
```
$ sudo multipath -ll
3600a09806c574230673f55744a346669 dm-0 NETAPP  ,LUN C-Mode
size=10K features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 4:0:0:1 sdd  8:48  active ready running
| |- 2:0:0:1 sdb  8:16  active ready running
| `- 5:0:0:1 sdc  8:32  active ready running
`-+- policy='service-time 0' prio=10 status=enabled
  |- 6:0:0:1 sdf  8:80  active ready running
  |- 7:0:0:1 sde  8:64  active ready running
  |- 8:0:0:1 sdg  8:96  active ready running
  `- 9:0:0:1 sdh  8:112 active ready running
```

ブロックデバイスとしても認識されています。
```
$ lsblk
NAME                                MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
sda                                   8:0    0  10K  0 disk
sdb                                   8:16   0  10K  0 disk
└─3600a09806c574230673f55744a346669 253:0    0  10K  0 mpath
sdc                                   8:32   0  10K  0 disk
└─3600a09806c574230673f55744a346669 253:0    0  10K  0 mpath
sdd                                   8:48   0  10K  0 disk
└─3600a09806c574230673f55744a346669 253:0    0  10K  0 mpath
sde                                   8:64   0  10K  0 disk
└─3600a09806c574230673f55744a346669 253:0    0  10K  0 mpath
sdf                                   8:80   0  10K  0 disk
└─3600a09806c574230673f55744a346669 253:0    0  10K  0 mpath
sdg                                   8:96   0  10K  0 disk
└─3600a09806c574230673f55744a346669 253:0    0  10K  0 mpath
sdh                                   8:112  0  10K  0 disk
└─3600a09806c574230673f55744a346669 253:0    0  10K  0 mpath
xvda                                202:0    0   8G  0 disk
└─xvda1                             202:1    0   8G  0 part  /
```
以上が iSCSI LUN を Linux で認識させるまでの作業になります。

# まとめ
NetAppは昔よく触っていたのですが、AWSで使えるようになったのでリハビリがてら触ってみました。

仕事で使う機会があまりなさそうですが、ONTAPのコマンドとかは結構面白いので、ボリューム拡張したり、スナップショット取ったり、いろんなものを破壊したり、今後も色々試してみようと思います。

今回はここまで！ ありがとうございました！！！

# 参考文献
https://dev.classmethod.jp/articles/mount-iscsi-lun-created-on-amazon-fsx-for-netapp-ontap-file-system/