この投稿は、JPOUG Advent Calendar 2023 の7日目のものです。前日の6日目は、chasunuma さんによる「配属4ヵ月目でお客様対応に挑戦!オラクルサポート担当育成の裏側を22卒社員が紹介 」でした。
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 のドキュメントでは、下記のあたりが参考になります。
- Linux I-Oストレージの操作
https://docs.oracle.com/cd/F61088_01/stordev/stordev-WorkingWithLinuxIOStorage.html
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 さんです。よろしくお願いします。