vm.gowatana.jp

NEOにほんごVMware(仮)

Oracle Linux 9 の LIO iSCSI Target が VAAI 対応しているか確認してみる。

この投稿は、JPOUG Advent Calendar 2023 の7日目のものです。前日の6日目は、chasunuma さんによる「配属4ヵ月目でお客様対応に挑戦!オラクルサポート担当育成の裏側を22卒社員が紹介 」でした。

adventar.org

 

VMware vSphere には、ストレージ機器側に処理をオフロードする VMware vSphere APIs: Array Integration (VAAI)  という機能があります。

Linux-IO(LIO)が VAAI に対応しているという噂を聞いたことがあります。そこで、自宅ラボむけに利用できたら便利かなと思い、Oracle Linux 9 による LIO iSCSI Target を用意して様子を見てみました。

下記のように、iSCSI 接続の VMFS データストアを用意して、仮想マシンをクローンしてネットワーク トラフィックのカウンタを見てみます。VAAI が機能するのであれば、クローン処理はストレージ側にオフロードされるので、トラフィックがほとんどないはず・・・

 

今回の内容です。

 

今回利用するバージョンは下記です。

  • Oracle Linux 9.3
  • vSphere 8.0 U2(vCenter Server 8.0 U2a、ESXi 8.0 U2)

 

1. 構築準備

Oracle Linux 9 のドキュメントでは、下記のあたりが参考になります。

 

Oracle Linux 9 インストーラの ISO イメージ ファイルは、下記からダウンロードできます。最近はユーザ認証なしでもダウンロード可能になりました。

 

今回の Oracle Linux は、「最小限のインストール」でインストールしてあり、ネットワーク設定ずみの状態です。

 

今回の Oracle Linux です。

[root@lab-iscsi-01 ~]# cat /etc/oracle-release
Oracle Linux Server release 9.3

 

firewalld は停止してしまいます。

[root@lab-iscsi-01 ~]# systemctl stop firewalld
[root@lab-iscsi-01 ~]# systemctl disable firewalld

 

2. iSCSI Target の構築

構築する iSCSI Target のイメージは、下記のようになります。

  • 独立したストレージ デバイス(/dev/sdb)で LVM の LV を作成し、iSCSI の LUN として提供します。
  • 動作確認しやすいように、iSCSI 用のネットワーク / NIC を用意します。

 

2-1. LUN 用デバイスの準備(Linux LV 作成)

iSCSI で LUN として提供するデバイスを、Linux LVM の LV(論理ボリューム)として用意します。

 

Linux マシンの、2つ目のディスク(/dev/sdb)を iSCSI LUN として提供します。

[root@lab-iscsi-01 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb    8:16   0  20G  0 disk

 

LVM の VG(vg01)と LV(lv01)を作成します。これで、/dev/vg01/lv01 というデバイスが作成されます。

[root@lab-iscsi-01 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@lab-iscsi-01 ~]# vgcreate vg01 /dev/sdb
  Volume group "vg01" successfully created
[root@lab-iscsi-01 ~]# lvcreate -l 100%free -n lv01 vg01
  Logical volume "lv01" created.

 

2-2. targetcli のインストール

targetcli をインストールします。

[root@lab-iscsi-01 ~]# dnf install targetcli -y

 

target サービスを起動して、有効化しておきます。

[root@lab-iscsi-01 ~]# systemctl start target
[root@lab-iscsi-01 ~]# systemctl enable target

2-3. iSCSI Target の設定

targetcli を起動して設定をすすめます。

iSCSI Target を作成します。

[root@lab-iscsi-01 ~]# targetcli /iscsi create iqn.2016-09.jp.go-lab:lab-iscsi-01
Created target iqn.2016-09.jp.go-lab:lab-iscsi-01.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

 

LV を、ブロック デバイスとして登録します。

[root@lab-iscsi-01 ~]# targetcli /backstores/block create name=lun0 dev=/dev/vg01/lv01
Created block storage object lun0 using /dev/vg01/lv01.

 

登録したブロック デバイスから、iSCSI の LUN を作成します。これで LUN 0 が作成されました。

[root@lab-iscsi-01 ~]# targetcli /iscsi/iqn.2016-09.jp.go-lab:lab-iscsi-01/tpg1/luns create /backstores/block/lun0
Created LUN 0.

 

今回は ACL を無効にしてしまいます。

[root@lab-iscsi-01 ~]# targetcli /iscsi/iqn.2016-09.jp.go-lab:lab-iscsi-01/tpg1 set attribute generate_node_acls=1
Parameter generate_node_acls is now '1'.

 

さらに設定を追加します。

[root@lab-iscsi-01 ~]# targetcli /iscsi/iqn.2016-09.jp.go-lab:lab-iscsi-01/tpg1 set attribute authentication=0 demo_mode_write_protect=0
Parameter authentication is now '0'.
Parameter demo_mode_write_protect is now '0'.

 

設定を保存しておきます。

[root@lab-iscsi-01 ~]# targetcli saveconfig
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json

 

LUN が追加されていることを確認しておきます。

[root@lab-iscsi-01 ~]# targetcli /backstores/block ls
o- block .................................................. [Storage Objects: 1]
  o- lun0 ...................... [/dev/vg01/lv01 (20.0GiB) write-thru activated]
    o- alua ................................................... [ALUA Groups: 1]
      o- default_tg_pt_gp ....................... [ALUA state: Active/optimized]

 

iSCSI Target の設定を確認しておきます。

[root@lab-iscsi-01 ~]# targetcli /iscsi ls
o- iscsi .......................................................... [Targets: 1]
  o- iqn.2016-09.jp.go-lab:lab-iscsi-01 .............................. [TPGs: 1]
    o- tpg1 ................................................ [gen-acls, no-auth]
      o- acls ........................................................ [ACLs: 0]
      o- luns ........................................................ [LUNs: 1]
      | o- lun0 ............... [block/lun0 (/dev/vg01/lv01) (default_tg_pt_gp)]
      o- portals .................................................. [Portals: 1]
        o- 0.0.0.0:3260 ................................................... [OK]

 

3. ESXi での VMFS データストア作成

ESXi には iSCSI Initiator をインストールして、iSCSI 接続の VMFS データストアを作成します。iSCSI 接続用には、独立した物理 NIC(vmnic1)、仮想スイッチ(vSwitch1)、VMkernel アダプタ(vmk1)を用意してあります。

 

ESXi と Oracle Linux iSCSI Target は、下記のように接続します。

 

3-1. ESXi への iSCSI イニシエータの追加

vSphere Client のインベントリで、対象の ESXi ホストの「構成」タブ →「ストレージ」→「ストレージ アダプタ」を開きます。

そして、「ソフトウェア アダプタの追加」→「iSCSI アダプタの追加」をクリックします。

 

確認画面で「OK」をクリックします。これで、iSCSI Initiator にあたる「vmhba65」アダプタが追加されます。

 

3-2. iSCSI Target への接続

追加されたアダプタ「vmhba65」を選択して、「動的検出」タブ →「追加」をクリックします。

 

iSCSI サーバ(iSCSI Target)のアドレスを入力して、「OK」をクリックします。

  • iSCSI サーバ: 192.168.127.11

 

vmhba65 が選択された状態で、「アダプタの再スキャン」をクリックします。

 

「デバイス」タブに、LUN が表示されたことを確認します。

 

3-3. VMFS データストアの作成

ESXi を右クリックして、「ストレージ」→「新しいデータストア」を開きます。

 

「VMFS」を選択して、「次へ」をクリックします。

 

データストア名を入力し、LUN を選択して「次へ」をクリックします。

  • データストアの名前: Datastore-iSCSI-01
  • LUN: LIO-ORG iSCSI Disk ~

 

「VMFS 6」を選択して、「次へ」をクリックします。

 

パーティションは、デフォルトのまま「次へ」をクリックします。

 

設定を確認して、「完了」をクリックします。

 

VMFS データストアが作成されました。

 

さきほどの「ストレージ アダプタ」画面でも、LUN にデータストアが作成されたことが確認できます。

 

3-4. VAAI 対応状況の確認

「Datastore-iSCSI-01」データストアの「構成」→「ハードウェア アクセラレーション」を確認すると、「サポート対象」となっているので、VAAI が有効になっているようです。

 

ESXi に SSH ログインして esxcli コマンドで確認すると、もう少し詳しく対応している(Supported)の機能が分かります。Clone Status: supported となってるので、クローン処理のオフロードにも対応していそうです。

[root@lab-esxi-141:~] esxcli storage core device vaai status get --device=naa.600140567e00147bf544eb2bcb3d0c75
naa.600140567e00147bf544eb2bcb3d0c75
   VAAI Plugin Name:
   ATS Status: supported
   Clone Status: supported
   Zero Status: supported
   Delete Status: unsupported
   Ex Clone Status: unsupported

 

4. 動作確認

作成した iSCSI のデータストアに配置してある仮想マシン「vm01」を、そのデータストア上でクローンして、ネットワーク トラフィックの様子を確認してみます。

※イメージ図は、冒頭のものの再掲です。

 

4-1. 仮想マシンの用意

ESXi のメンテナンス モードを解除して、仮想マシンを作成しておきます。今回は、「vm01」を作成しました。

あまり容量はありませんが、iSCSI データストア上に配置してあります。

 

4-2. 仮想マシン クローン処理の様子見

ためしに仮想マシンをクローン(vm01 → vm02, vm03)してみましたが、iSCSI データストアへの接続経路である vmnic1 のネットワーク使用量はほとんど上がりませんでした。VAAI でクローン処理を、Oracle Linux の LIO iSCSI Target にオフロードできていそう・・・

 

以上、Oracle Linux 9 の LIO iSCSI Target が VAAI に対応しているか確認してみる話でした。

JPOUG Advent Calendar 2023 の明日の投稿は ketsuji さんです。よろしくお願いします。