ONTAP を使用した RHEL 8.4 用 NVMe-oF ホスト構成
サポート性
NVMe over Fabrics または NVMe-oF ( NVMe/FC やその他の転送を含む)は、 ANA ( Asymmetric Namespace Access )を使用する RHEL 8.4 でサポートされます。ANA は、 NVMe-oF 環境では ALUA に相当し、現在はカーネル内 NVMe マルチパスで実装されています。RHEL 8.4 および ONTAP で ANA を使用し、カーネル内で NVMe マルチパスを使用して NVMe-oF を有効にする方法について、詳しくはこちらで説明しています。
の機能
-
RHEL 8.2 以降 'nvme-fc auto-connect' スクリプトはネイティブの 'nvme-cli' パッケージに含まれています外部ベンダーが提供する outbox 自動接続スクリプトをインストールする代わりに、これらのネイティブ自動接続スクリプトを使用できます。
-
RHEL 8.2 以降、ネイティブの udev ルールは、 NVMe マルチパスのラウンドロビンロードバランシングを可能にする「 nvme-cli 」パッケージの一部としてすでに提供されています。( RHEL 8.1 の場合と同様に)これ以上このルールを手動で作成する必要はありません。
-
RHEL 8.2 以降では、新規の同じホスト上で NVMe トラフィックと SCSI トラフィックの両方を実行できます。実際、これは、お客様に一般的に導入されるホスト構成であると想定されています。したがって、 SCSI の場合、 SCSI LUN では「 m-mmultipath 」を通常どおりに設定すると「 m path 」デバイスになりますが、 NVMe マルチパスを使用してホスト上の NVMe-oF マルチパスデバイスを設定することができます。
-
RHEL 8.2 以降、ネイティブの「 nvme-cli 」パッケージに含まれるネットアッププラグインでは、 ONTAP ネームスペースと同様に ONTAP の詳細を表示できます。
既知の制限
-
RHEL 8.4 では、カーネル内の NVMe マルチパスはデフォルトで無効なままになります。そのため、手動で有効にする必要があります。
-
RHEL 8.4 の NVMe/FC は、未解決の問題が原因で引き続きテクノロジプレビュー機能です。を参照してください "RHEL 8.4 リリースノート" を参照してください。
設定要件
を参照してください "NetApp Interoperability Matrix を参照してください" サポートされている構成に関する正確な情報については、を参照
カーネル内の NVMe マルチパスを有効にします
-
サーバに RHEL 8.4 GA をインストールします。インストールが完了したら、指定した RHEL 8.4 GA カーネルを実行していることを確認します。を参照してください "NetApp Interoperability Matrix を参照してください" サポートされるバージョンの最新のリストについては、を参照してください。
-
インストールが完了したら、指定した RHEL 8.4 カーネルを実行していることを確認します。を参照してください "NetApp Interoperability Matrix を参照してください" サポートされるバージョンの最新のリストについては、を参照してください。
例
# uname -r 4.18.0-305.el8.x86_64
-
「 nvme-cli 」パッケージをインストールします。
例
# rpm -qa|grep nvme-cli nvme-cli-1.12-3.el8.x86_64
-
カーネル内の NVMe マルチパスを有効にします。
# grubby --args=nvme_core.multipath=Y --update-kernel /boot/vmlinuz-4.18.0-305.el8.x86_64
-
ホストで、 /etc/nvme/hostnqn に示されたホスト NQN 文字列を確認し、 ONTAP アレイの対応するサブシステムのホスト NQN 文字列に一致することを確認します。例
# cat /etc/nvme/hostnqn nqn.2014-08.org.nvmexpress:uuid:9ed5b327-b9fc-4cf5-97b3-1b5d986345d1 ::> vserver nvme subsystem host show -vserver vs_fcnvme_141 Vserver Subsystem Host NQN ----------- --------------- ---------------------------------------------------------- vs_fcnvme_14 nvme_141_1 nqn.2014-08.org.nvmexpress:uuid:9ed5b327-b9fc-4cf5-97b3-1b5d986345d1
ホストの NQN 文字列が一致しない場合は、「 vserver modify 」コマンドを使用して、ホストのホスト NQN 文字列「 /etc/nvme/hostnqn 」に一致するように、対応する ONTAP サブシステムでホストの NQN 文字列を更新する必要があります。 -
ホストをリブートします。
NVMe と SCSI の両方のトラフィックを同じホストで同時に実行する場合は、 ONTAP ネームスペースにはカーネル内の NVMe マルチパスを、 ONTAP LUN にはそれぞれ dm-multipath を使用することを推奨します。つまり、 dm-multipath がこれらのネームスペースデバイスを要求しないように、 ONTAP ネームスペースを dm-multipath から除外する必要があります。これを行うには 'enable_foreign 設定を /etc/multipath.conf ファイルに追加します
# cat /etc/multipath.conf defaults { enable_foreign NONE }
-
multipathd デーモンを再起動します。新しい設定が有効になるように、「 ystemctl restart multipathd 」コマンドを実行します。
NVMe/FC を設定
Broadcom / Emulex
-
サポートされているアダプタを使用していることを確認します。を参照してください "NetApp Interoperability Matrix を参照してください" サポートされているアダプタの最新のリストについては、を参照してください。
# cat /sys/class/scsi_host/host*/modelname LPe32002-M2 LPe32002-M2 # cat /sys/class/scsi_host/host*/modeldesc Emulex LightPulse LPe32002-M2 2-Port 32Gb Fibre Channel Adapter Emulex LightPulse LPe32002-M2 2-Port 32Gb Fibre Channel Adapter
-
推奨される Broadcom lpfc ファームウェアとインボックスドライバを使用していることを確認します。を参照してください "NetApp Interoperability Matrix を参照してください" サポートされているアダプタドライバとファームウェアのバージョンの最新リストについては、を参照してください。
# cat /sys/class/scsi_host/host*/fwrev 12.8.340.8, sli-4:2:c 12.8.340.8, sli-4:2:c # cat /sys/module/lpfc/version 0:12.8.0.5
-
lpfc_enable_fc4_type が 3 に設定されていることを確認します
# cat /sys/module/lpfc/parameters/lpfc_enable_fc4_type 3
-
イニシエータポートが起動して実行中であること、およびターゲット LIF が表示されていることを確認してください。
# cat /sys/class/fc_host/host*/port_name 0x100000109b1c1204 0x100000109b1c1205 # cat /sys/class/fc_host/host*/port_state Online Online # cat /sys/class/scsi_host/host*/nvme_info NVME Initiator Enabled XRI Dist lpfc0 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc0 WWPN x100000109b1c1204 WWNN x200000109b1c1204 DID x011d00 ONLINE NVME RPORT WWPN x203800a098dfdd91 WWNN x203700a098dfdd91 DID x010c07 TARGET DISCSRVC ONLINE NVME RPORT WWPN x203900a098dfdd91 WWNN x203700a098dfdd91 DID x011507 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000f78 Cmpl 0000000f78 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 000000002fe29bba Issue 000000002fe29bc4 OutIO 000000000000000a abort 00001bc7 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00001e15 Err 0000d906 NVME Initiator Enabled XRI Dist lpfc1 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc1 WWPN x100000109b1c1205 WWNN x200000109b1c1205 DID x011900 ONLINE NVME RPORT WWPN x203d00a098dfdd91 WWNN x203700a098dfdd91 DID x010007 TARGET DISCSRVC ONLINE NVME RPORT WWPN x203a00a098dfdd91 WWNN x203700a098dfdd91 DID x012a07 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000fa8 Cmpl 0000000fa8 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 000000002e14f170 Issue 000000002e14f17a OutIO 000000000000000a abort 000016bb noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00001f50 Err 0000d9f8
1MB の I/O サイズを有効にする(オプション)
ONTAP は Identify コントローラデータに MDT ( MAX Data 転送サイズ) 8 を報告します。つまり、最大 I/O 要求サイズは最大 1 MB でなければなりません。ただし 'Broadcom NVMe/FC ホストのサイズが 1 MB の問題 I/O 要求の場合 'lpfc パラメータ 'lpfc_sg_seg_cnt' もデフォルト値の 64 から 256 までバンピングする必要があります次の手順を使用して実行します。
-
それぞれの「 m odprobe lpfc.conf 」ファイルに「 256 」という値を追加します。
# cat /etc/modprobe.d/lpfc.conf options lpfc lpfc_sg_seg_cnt=256
-
「 racut-f 」コマンドを実行し、ホストを再起動します。
-
リブート後、対応する「 sysfs 」の値を確認して、上記の設定が適用されていることを確認します。
# cat /sys/module/lpfc/parameters/lpfc_sg_seg_cnt 256
これで、 Broadcom FC-NVMe ホストが ONTAP ネームスペースデバイスで最大 1MB の I/O 要求を送信できるようになります。
Marvell/QLogic
RHEL 8.4 GA カーネルに含まれているネイティブインボックスの qla2xxx ドライバには、 ONTAP のサポートに不可欠な最新のアップストリーム修正が含まれています。
-
次のコマンドを使用して、サポートされているアダプタドライバとファームウェアのバージョンを実行していることを確認します。
# cat /sys/class/fc_host/host*/symbolic_name QLE2742 FW:v9.06.02 DVR:v10.02.00.104-k QLE2742 FW:v9.06.02 DVR:v10.02.00.104-k
-
次のコマンドを使用して、 Marvell アダプタを NVMe/FC イニシエータとして機能できるように、「 ql2xnvmeenable 」が設定されていることを確認します。
# cat /sys/module/qla2xxx/parameters/ql2xnvmeenable 1
NVMe/FC を設定
NVMe/FC とは異なり、 NVMe/FC は自動接続機能を備えていません。これにより、 Linux NVMe/FC ホストには次の 2 つの大きな制限があります。
-
* パスが復活した後の自動再接続は行われない * NVMe/TCP は、パスダウン後 10 分間のデフォルトの「 Ctrl-loss -TTMO 」タイマーを超えて復活したパスに自動的に再接続することはできません。
-
* ホストの起動時に自動接続が行われない * ホストの起動時に NVMe/FC が自動的に接続されることもありません。
ONTAP フェイルオーバーイベント (SFO など ) を快適に利用するには 'Ctrl_LONS_TMO' タイマーを調整して '30 分間などの長い再試行期間を設定することをお勧めします詳細は次のとおりです。
-
サポートされている NVMe/FC LIF の検出ログページデータをイニシエータポートが読み込めたかどうかを確認します。
# nvme discover -t tcp -w 192.168.1.8 -a 192.168.1.51 Discovery Log Number of Records 10, Generation counter 119 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 0 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.56e362e9bb4f11ebbaded039ea165abc:subsystem.nvme_118_tcp_1 traddr: 192.168.2.56 sectype: none =====Discovery Log Entry 1====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 1 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.56e362e9bb4f11ebbaded039ea165abc:subsystem.nvme_118_tcp_1 traddr: 192.168.1.51 sectype: none =====Discovery Log Entry 2====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 0 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.56e362e9bb4f11ebbaded039ea165abc:subsystem.nvme_118_tcp_2 traddr: 192.168.2.56 sectype: none ...
-
他の NVMe/FC イニシエータターゲット LIF のコンボファイルが検出ログページデータを正常に取得できることを確認します。例:
# nvme discover -t tcp -w 192.168.1.8 -a 192.168.1.52 # nvme discover -t tcp -w 192.168.2.9 -a 192.168.2.56 # nvme discover -t tcp -w 192.168.2.9 -a 192.168.2.57
-
ノード全体でサポートされているすべての NVMe/FC イニシエータターゲット LIF に対して、「 nvme connect -all 」コマンドを実行します。接続中に 'ctrl_loss _tmo' 期間を延長して(たとえば '-l 1800' で設定できる 30 分) ' パスが失われた場合に再試行するようにしてください例:
# nvme connect-all -t tcp -w 192.168.1.8 -a 192.168.1.51 -l 1800 # nvme connect-all -t tcp -w 192.168.1.8 -a 192.168.1.52 -l 1800 # nvme connect-all -t tcp -w 192.168.2.9 -a 192.168.2.56 -l 1800 # nvme connect-all -t tcp -w 192.168.2.9 -a 192.168.2.57 -l 1800
NVMe-oF を検証します
-
次のチェックボックスをオンにして、カーネル内の NVMe マルチパスが実際に有効になっていることを確認
# cat /sys/module/nvme_core/parameters/multipath Y
-
各 ONTAP ネームスペースの適切な NVMe-oF 設定(「 NetApp ONTAP Controller 」に設定された「 model 」や「 loadbalancing iopolicy 」が「ラウンドロビン」に設定されているなど)がホストに正しく反映されていることを確認します。
# cat /sys/class/nvme-subsystem/nvme-subsys*/model NetApp ONTAP Controller NetApp ONTAP Controller # cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy round-robin round-robin
-
ONTAP ネームスペースがホストに正しく反映されていることを確認します。例:
# nvme list Node SN Model Namespace ------------ --------------------- --------------------------------- /dev/nvme0n1 81CZ5BQuUNfGAAAAAAAB NetApp ONTAP Controller 1 Usage Format FW Rev ------------------- ----------- -------- 85.90 GB / 85.90 GB 4 KiB + 0 B FFFFFFFF
別の例:
# nvme list Node SN Model Namespace ------------ --------------------- --------------------------------- /dev/nvme0n1 81CYrBQuTHQFAAAAAAAC NetApp ONTAP Controller 1 Usage Format FW Rev ------------------- ----------- -------- 85.90 GB / 85.90 GB 4 KiB + 0 B FFFFFFFF
-
各パスのコントローラの状態がライブで、適切な ANA ステータスであることを確認します。例:
# nvme list-subsys /dev/nvme1n1 nvme-subsys1 - NQN=nqn.1992-08.com.netapp:sn.04ba0732530911ea8e8300a098dfdd91:subsystem.nvme_145_1 \ +- nvme2 fc traddr=nn-0x208100a098dfdd91:pn-0x208200a098dfdd91 host_traddr=nn-0x200000109b579d5f:pn-0x100000109b579d5f live non-optimized +- nvme3 fc traddr=nn-0x208100a098dfdd91:pn-0x208500a098dfdd91 host_traddr=nn-0x200000109b579d5e:pn-0x100000109b579d5e live non-optimized +- nvme4 fc traddr=nn-0x208100a098dfdd91:pn-0x208400a098dfdd91 host_traddr=nn-0x200000109b579d5e:pn-0x100000109b579d5e live optimized +- nvme6 fc traddr=nn-0x208100a098dfdd91:pn-0x208300a098dfdd91 host_traddr=nn-0x200000109b579d5f:pn-0x100000109b579d5f live optimized
別の例:
#nvme list-subsys /dev/nvme0n1 nvme-subsys0 - NQN=nqn.1992-08.com.netapp:sn.37ba7d9cbfba11eba35dd039ea165514:subsystem.nvme_114_tcp_1 \ +- nvme0 tcp traddr=192.168.2.36 trsvcid=4420 host_traddr=192.168.1.4 live optimized +- nvme1 tcp traddr=192.168.1.31 trsvcid=4420 host_traddr=192.168.1.4 live optimized +- nvme10 tcp traddr=192.168.2.37 trsvcid=4420 host_traddr=192.168.1.4 live non-optimized +- nvme11 tcp traddr=192.168.1.32 trsvcid=4420 host_traddr=192.168.1.4 live non-optimized +- nvme20 tcp traddr=192.168.2.36 trsvcid=4420 host_traddr=192.168.2.5 live optimized +- nvme21 tcp traddr=192.168.1.31 trsvcid=4420 host_traddr=192.168.2.5 live optimized +- nvme30 tcp traddr=192.168.2.37 trsvcid=4420 host_traddr=192.168.2.5 live non-optimized +- nvme31 tcp traddr=192.168.1.32 trsvcid=4420 host_traddr=192.168.2.5 live non-optimized
-
ネットアッププラグインに ONTAP ネームスペースデバイスごとに適切な値が表示されていることを確認します。例:
# nvme netapp ontapdevices -o column Device Vserver Namespace Path --------- ------- -------------------------------------------------- /dev/nvme1n1 vserver_fcnvme_145 /vol/fcnvme_145_vol_1_0_0/fcnvme_145_ns NSID UUID Size ---- ------------------------------ ------ 1 23766b68-e261-444e-b378-2e84dbe0e5e1 85.90GB # nvme netapp ontapdevices -o json { "ONTAPdevices" : [ { "Device" : "/dev/nvme1n1", "Vserver" : "vserver_fcnvme_145", "Namespace_Path" : "/vol/fcnvme_145_vol_1_0_0/fcnvme_145_ns", "NSID" : 1, "UUID" : "23766b68-e261-444e-b378-2e84dbe0e5e1", "Size" : "85.90GB", "LBA_Data_Size" : 4096, "Namespace_Size" : 20971520 } ] }
別の例:
# nvme netapp ontapdevices -o column Device Vserver Namespace Path --------- ------- -------------------------------------------------- /dev/nvme0n1 vs_tcp_114 /vol/tcpnvme_114_1_0_1/tcpnvme_114_ns NSID UUID Size ---- ------------------------------ ------ 1 a6aee036-e12f-4b07-8e79-4d38a9165686 85.90GB # nvme netapp ontapdevices -o json { "ONTAPdevices" : [ { "Device" : "/dev/nvme0n1", "Vserver" : "vs_tcp_114", "Namespace_Path" : "/vol/tcpnvme_114_1_0_1/tcpnvme_114_ns", "NSID" : 1, "UUID" : "a6aee036-e12f-4b07-8e79-4d38a9165686", "Size" : "85.90GB", "LBA_Data_Size" : 4096, "Namespace_Size" : 20971520 } ] }
トラブルシューティング
NVMe/FC 障害のトラブルシューティングを開始する前に、 IMT の仕様に準拠した設定を実行していることを確認し、次の手順に進んでホスト側の問題をデバッグします。
lpfc 詳細ログ
-
lpfc_log_sverbose' ドライバ設定を次のいずれかの値に設定して 'NVMe/FC イベントをログに記録できます
#define LOG_NVME 0x00100000 /* NVME general events. */ #define LOG_NVME_DISC 0x00200000 /* NVME Discovery/Connect events. */ #define LOG_NVME_ABTS 0x00400000 /* NVME ABTS events. */ #define LOG_NVME_IOERR 0x00800000 /* NVME IO Error events. */
-
これらの値のいずれかを設定した後、「 dracut-f 」コマンドを実行して「 initramfs 」を再作成し、ホストを再起動します。
-
リブート後、設定を確認します。
# cat /etc/modprobe.d/lpfc.conf options lpfc lpfc_log_verbose=0xf00083 # cat /sys/module/lpfc/parameters/lpfc_log_verbose 15728771
qla2xxx 詳細ログ
lpfc ドライバの場合と同様の、 NVMe/FC 用の qla2xxx ログ機能はありません。したがって、次の手順を使用して一般的な qla2xxx ログレベルを設定できます。
-
対応する「 m odprobe qla2xxx conf 」ファイルに「 ql2xextended_error_logging=0x1e400000 」の値を追加します。
-
「 d racut-f 」コマンドを実行して「 initramfs 」を再作成し、ホストを再起動します。
-
リブート後、次のように詳細ログが適用されていることを確認します。
# cat /etc/modprobe.d/qla2xxx.conf options qla2xxx ql2xnvmeenable=1 ql2xextended_error_logging=0x1e400000 # cat /sys/module/qla2xxx/parameters/ql2xextended_error_logging 507510784
一般的な nvme-CLI エラーとその回避策があります
NVMe 検出、 NVMe 接続、または NVMe 接続の際に「 nvme-cli 」で表示されるエラーとその回避策を次の表に示します。
エラーは 'nvme-cli' によって表示されます | 原因と考えられます | 回避策 |
---|---|---|
'/dev/nvme-Fabrics への書き込みに失敗しました : 引数が無効です |
構文が正しくありません |
上記の NVMe コマンドに正しい構文を使用していることを確認してください。 |
'/dev/nvme-Fabrics への書き込みに失敗しました : このようなファイルまたはディレクトリはありません |
複数の問題が原因でこのエラーが発生する可能性NVMe コマンドに誤った引数を渡すことが、一般的な原因の 1 つです。 |
|
' 取得する検出ログエントリがありません |
一般に、「 /etc/nvme/hostnqn 」文字列がネットアップアレイの対応するサブシステムに追加されていないか、不正な hostnqn 文字列が各サブシステムに追加されています。 |
正確な「 /etc/nvme/hostnqn 」文字列がネットアップアレイの対応するサブシステムに追加されていることを確認します(「 vserver nvme subsystem host show 」コマンドで確認します)。 |
'/dev/nvme-Fabrics への書き込みに失敗しました:オペレーションはすでに進行中です |
コントローラの関連付けまたは指定された処理がすでに作成されているか、または作成中であるかを示します。これは、上記にインストールされている自動接続スクリプトの一部として発生する可能性があります。 |
なしNVMe 検出を実行するには、しばらくしてからこのコマンドを実行してください。nvme connect および connect-all の場合は 'nvme list コマンドを実行して ' ネームスペースデバイスがすでに作成され ' ホストに表示されていることを確認します |
テクニカルサポートへの連絡のタイミング
問題が解決しない場合は、次のファイルとコマンドの出力を収集し、テクニカルサポートに問い合わせてトリアージを依頼してください。
cat /sys/class/scsi_host/host*/nvme_info /var/log/messages dmesg nvme discover output as in: nvme discover --transport=fc --traddr=nn-0x200a00a098c80f09:pn-0x200b00a098c80f09 --host-traddr=nn-0x20000090fae0ec9d:pn-0x10000090fae0ec9d nvme list nvme list-subsys /dev/nvmeXnY