vSAN の SCSI-3 Persistent Reservation(SCSI-3 PR)を Linux で確認してみる。

vSAN の SCSI-3 Persistent Reservation(SCSI-3 PR)を Linux で確認してみる。

vSphere 6.7 U3 では、ネイティブな VMDK が SCSI-3 Persistent Reservation(SCSI-3 PR)対応になりました。

VMware vSAN 6.7 Update 3 リリース ノート

ネイティブ vSAN VMDK 上の Windows Server Failover Clusters (WSFC)。vSAN 6.7 Update 3 では SCSI-3 PR がネイティブにサポートされており、Windows Server Failover Clusters を最初のクラスのワークロードとして VMDK に直接デプロイできます。この機能を使用すると、物理 RDM のレガシー環境または外部ストレージ プロトコルを vSAN に移行できます。

vSAN 6.7 U2 以前でも、vSAN iSCSI ターゲット(VIT)による LUN を共有ディスクを利用することで

vSAN による仮想ディスク(VMDK)で SCSI-3 PR が利用でき、

WSFC(Windows Server Failover Clustering)のようなクラスタウェアの

排他制御のしくみで利用することができていました。

しかし 6.7 U3 以降では、VIT による LUN ではない(ネイティブな)VMDK(いわゆる 共有 VMDK)でも、WSFC などで利用可能とのことです。

これは下記のあたりが参考になります。

Configuring a shared disk resource for Windows Server Failover Cluster (WSFC)

and migrating SQL Server Failover Cluster Instance (FCI) from SAN (RDMs) to vSAN

https://kb.vmware.com/s/article/74786

Hosting Windows Server Failover Cluster (WSFC) with shared disk on VMware vSphere: Doing it right!

https://blogs.vmware.com/apps/2019/05/wsfc-on-vsphere.html

そこで今回は、vSAN 6.7 U2 と vSAN 6.7 U3 の環境で、Linux VM から SCSI-3 PR の様子を見てみました。

今回の vSAN 環境。

vCenter 6.7 U3 に、ESXi 6.7 U2 / ESXi 6.7 U3 を登録して、

それぞれで vSAN 6.7 U2 / vSAN 6.7 U3 のクラスタを作成してあります。

そして、vSAN バージョンの異なるクラスタを用意しています。

クラスタ: vSAN-Cluster-67u2

  • vSAN 6.7 U2
  • ESXi 6.7 U2(Build 13006603)
  • 稼働している VM: vm01-on-67u2、vm02-on-67u2

クラスタ: vSAN-Cluster-67u2

  • vSAN 6.7 U3
  • ESXi 6.7 U3(Build 14320388)
  • 稼働している VM: vm01-on-67u3、vm02-on-67u3

vSAN-Cluster-67u2 クラスタに参加しているすべての ESXi のビルドは 13006603 なので、

ESXi 6.7 U2 → vSAN 6.7 U2 になります。

vsan-env-05.png

vSAN 6.7 U2 では、vSAN オン ディスク フォーマット が バージョン 7 です。

vsan-env-04.png

一方、vSAN-Cluster-67u3 クラスタに参加しているすべての ESXi のビルドは 14320388 なので、

ESXi 6.7 U3 → vSAN 6.7 U3 になります。

vSAN 6.7 U3 では、vSAN オン ディスク フォーマット が バージョン 10 です。

vsan-env-06.png

vSAN のバージョンアップによる新機能を利用するには、この環境のように

新バージョンの vSAN にあったオン ディスク フォーマットにしておく必要があります。

vSAN バージョンとオン ディスク フォーマットの関係は、下記で確認できます。

Build numbers and versions of VMware vSAN

https://kb.vmware.com/s/article/2150753

今回の vSAN 上のゲスト OS。

検証で利用する ゲスト OS は、Oracle Linux 7 です。

[root@vm01-on-67u2 ~]# cat /etc/oracle-release

Oracle Linux Server release 7.7

SCSI-3 PR の動作確認では、Linux の sg_persist コマンドを利用します。

これは、sg3_utils パッケージ(Linux ディストリビューション同梱のもの)に含まれています。

[root@vm01-on-67u2 ~]# which sg_persist

/usr/bin/sg_persist

[root@vm01-on-67u2 ~]# rpm -qf /usr/bin/sg_persist

sg3_utils-1.37-18.0.1.el7_7.2.x86_64

これらの VM では、vSAN データストアに配置した 10GB の VMDK「ハード ディスク 2」を接続しています。

vsan-env-14.png

仮想 SCSI コントローラ 1 で(デフォルトの SCSI コントローラ 0 とは分けて)接続しています。

そして SCSI コントローラ 1 では、SCSI パスの共有を「物理」に設定しています。

vsan-env-15.png

この ハード ディスク 2 は、ゲスト OS からは

「VMware Virtual disk」である /dev/sdb という名前で認識されています。

[root@vm01-on-67u2 ~]# lsscsi

[0:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda

[1:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sdb

[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0

/dev/sdb は「ハード ディスク 2」なので 10GB です。

[root@vm01-on-67u2 ~]# lsblk -i

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda           8:0    0   16G  0 disk

|-sda1        8:1    0    1G  0 part /boot

`-sda2        8:2    0   15G  0 part

  |-ol-root 249:0    0 13.4G  0 lvm  /

  `-ol-swap 249:1    0  1.6G  0 lvm  [SWAP]

sdb           8:16   0   10G  0 disk

sr0          11:0    1 1024M  0 rom

vSAN 6.7 U2 での ネイティブ VMDK と SCSI-3 PR。

vSAN 6.7 U2 までは、ネイティブ VMDK だと SCSI-3 PR に対応していません。

sg_persist を実行すると、サポートされていないことがわかります。

ちなみに、-s は SCSI-3 PR のステータスを、-k では SCSI-3 PR で登録するキーを読み取ろうとしています。

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdb -s

  VMware    Virtual disk      2.0

  Peripheral device type: disk

PR in (Read full status): bad field in cdb including unsupported service action

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdb -k

  VMware    Virtual disk      2.0

  Peripheral device type: disk

PR in (Read keys): bad field in cdb including unsupported service action

vSAN 6.7 U2 での vSAN iSCSI LUN と SCSI-3 PR。

vSAN 6.7 U2 でも、vSAN iSCSI ターゲット(VIT)の LUN であれば、SCSI-3 PR に対応しています。

そこで Linux から VIT の LUN に接続して、SCSI-3 PR の動作確認をしてみます。

まず、vSAN で iSCSI ターゲットと、LUN を作成します。

ここでは iqn.2016-09.jp.go-lab:vit67u2 という IQN の iSCSI ターゲットを作成して、

そこに 5GB の LUN を追加しています。

vsan-env-13.png

Linux OS 側には iscsi-initiator-utils をインストールして・・・

(設定コマンドの出力結果は、一部省略しています)

[root@vm01-on-67u2 ~]# yum install -y iscsi-initiator-utils

[root@vm01-on-67u2 ~]# systemctl enable iscsid

[root@vm01-on-67u2 ~]# systemctl start iscsid

[root@vm01-on-67u2 ~]# systemctl is-active iscsid

active

iscsiadm コマンドで、iSCSI ターゲットに接続します。

[root@vm01-on-67u2 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.1.33 --discover

[root@vm01-on-67u2 ~]# iscsiadm --mode node --portal 192.168.1.33:3260 --login

[root@vm01-on-67u2 ~]# iscsiadm -m session

tcp: [1] 192.168.1.33:3260,257 iqn.2016-09.jp.go-lab:vit67u2 (non-flash)

接続された iSCSI LUN は「VMware Virtual SAN」による /dev/sdc として認識されました。

[root@vm01-on-67u2 ~]# lsscsi

[0:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda

[1:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sdb

[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0

[34:0:0:0]   disk    VMware   Virtual SAN      0001  /dev/sdc

さきほどのスクリーンショットにあった LUN なので、/dev/sdc は 5GB です。

[root@vm01-on-67u2 ~]# lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda           8:0    0   16G  0 disk

tqsda1        8:1    0    1G  0 part /boot

mqsda2        8:2    0   15G  0 part

  tqol-root 249:0    0 13.4G  0 lvm  /

  mqol-swap 249:1    0  1.6G  0 lvm  [SWAP]

sdb           8:16   0   10G  0 disk

sdc           8:32   0    5G  0 disk

sr0          11:0    1 1024M  0 rom

では、sg_persist コマンドで様子を確認してみます。

この iSCSI LUN であれば、SCSI-3 PR に対応しているため、さきほどの /dev/sdc とは出力結果がことなります。

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -s

  VMware    Virtual SAN       0001

  Peripheral device type: disk

  PR generation=0x0

  No full status descriptors

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -k

  VMware    Virtual SAN       0001

  Peripheral device type: disk

  PR generation=0x0, there are NO registered reservation keys

ためしに /dev/sdc デバイスに、SCSI-3 PR の Reservation を設定してみます。

まずは、キーを登録します。

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -o --register -S 123

  VMware    Virtual SAN       0001

  Peripheral device type: disk

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -k

  VMware    Virtual SAN       0001

  Peripheral device type: disk

  PR generation=0x1, 1 registered reservation key follows:

    0x123

この時点では、まだ Reservation を持っていません。

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -r

  VMware    Virtual SAN       0001

  Peripheral device type: disk

  PR generation=0x1, there is NO reservation held

それでは、登録したキーを指定(-K 123)して、

他のホストから書き込めないように Reservation を設定(-T 1)してみます。

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -o --reserve -K 123 -T 1

  VMware    Virtual SAN       0001

  Peripheral device type: disk

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -r

  VMware    Virtual SAN       0001

  Peripheral device type: disk

  PR generation=0x1, Reservation follows:

    Key=0x123

    scope: LU_SCOPE,  type: Write Exclusive

/dev/sdc デバイスには、この Linux からは、書き込みができます。

※デバイスまで書き込むように oflag=sync をつけています。

[root@vm01-on-67u2 ~]# dd if=/dev/zero of=/dev/sdc count=1 oflag=sync

1+0 レコード入力

1+0 レコード出力

512 バイト (512 B) コピーされました、 0.00960002 秒、 53.3 kB/秒

一方で、おなじ LUN に接続している別の Linux からは、書き込みができなくなっています。

ホスト名 vm02-on-67u2 の Linux からも同様に iSCSI LUN に接続して /dev/sdc と認識していますが・・・

[root@vm02-on-67u2 ~]# iscsiadm -m session

tcp: [1] 192.168.1.33:3260,257 iqn.2016-09.jp.go-lab:vit67u2 (non-flash)

[root@vm02-on-67u2 ~]# lsscsi

[0:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda

[1:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sdb

[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0

[34:0:0:0]   disk    VMware   Virtual SAN      0001  /dev/sdc

[root@vm02-on-67u2 ~]# lsblk /dev/sdc

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sdc    8:32   0   5G  0 disk

SCSI-3 PR の Reservation によって、デバイスへの書き込みはエラーになりました。

[root@vm02-on-67u2 ~]# dd if=/dev/zero of=/dev/sdc count=1 oflag=sync

dd: `/dev/sdc' に書き込み中です: 入力/出力エラーです

1+0 レコード入力

0+0 レコード出力

0 バイト (0 B) コピーされました、 0.0144499 秒、 0.0 kB/秒

そして Reservation  を開放すると、他のホストからの書き込みもできるようになります。

vm01-on-67u2 で Reservation  を開放(--release)すると・・・

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -o --release -K 123 -T 1

  VMware    Virtual SAN       0001

  Peripheral device type: disk

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -r

  VMware    Virtual SAN       0001

  Peripheral device type: disk

  PR generation=0x1, there is NO reservation held

vm02-on-67u2 でも、書き込みができるようになります。

[root@vm02-on-67u2 ~]# dd if=/dev/zero of=/dev/sdc count=1 oflag=sync

1+0 レコード入力

1+0 レコード出力

512 バイト (512 B) コピーされました、 0.0161903 秒、 31.6 kB/秒

最後に、キーの登録も削除しておきます。

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -o --register -K 123

[root@vm01-on-67u2 ~]# sg_persist -d /dev/sdc -k

  VMware    Virtual SAN       0001

  Peripheral device type: disk

  PR generation=0x2, there are NO registered reservation keys

vSAN 6.7 U3 での ネイティブ VMDK と SCSI-3 PR。

vSAN 6.7 U3 では、ネイティブ VMDK でも SCSI-3 PR に対応します。

sg_persist コマンドでキーを読み取ろうとすると iSCSI LUN と同様の出力結果となり、

SCSI-3 PR に対応していそうな様子が見られました。

※この時点ではキーが未登録なので「NO registered reservation keys」です。

[root@vm01-on-67u3 ~]# sg_persist -d /dev/sdb -k

  VMware    Virtual disk      2.0

  Peripheral device type: disk

  PR generation=0x0, there are NO registered reservation keys

ただし、Full Status を確認しようとすると、失敗(command failed)してしまいます。

[root@vm01-on-67u3 ~]# sg_persist -d /dev/sdb -s

  VMware    Virtual disk      2.0

  Peripheral device type: disk

persistent reservation in: scsi status: Busy

PR in (Read full status): command failed

また、キー登録を試みても同様に失敗してしまいました。

[root@vm01-on-67u3 ~]# sg_persist -d /dev/sdb -o --register -S 123

  VMware    Virtual disk      2.0

  Peripheral device type: disk

persistent reserve out: scsi status: Busy

PR out: command failed

vSAN 6.7 U3 でのネイティブ VMDK の SCSI-3 PR 対応は、WSFC をサポートするようです。

しかし、他のクラスタウェアなどで SCSI-3 PR 要件がある場合に vSAN でネイティブ VMDK の共有接続をするには

実際に利用する想定のソフトウェアで動作確認をしたほうがよさそうかなと思いました。

以上、vSAN の SCSI-3 PR の様子を確認してみる話でした。

Version history
Revision #:
1 of 1
Last update:
‎03-05-2020 06:26 AM
Updated by: