前回のエントリー で Virtual SAN の重複排除と圧縮の機能を取り上げました。これらの機能と Virtual SAN の仮想マシン ストレージ ポリシー ルールの一つである「オブジェクト スペースの予約 (Object Space Reservation)」 の組み合わせは、少し特異なためこのエントリーに纏めます。

オブジェクト スペースの予約 (Object Space Reservation [OSR]) とは

OSR は、仮想ディスクを始めとする vsanDatastore 上のオブジェクトの容量を vsanDatastore 上でどの程度事前割当るか、を指定するルールになります。OSR 0% は Thin Provisioning と同等で、OSR 100% は Lazy-zero Thick Provisioning と同様になります。1~99% まで OSR を指定出来き仮想ディスクの事前割当容量を可変にできるのが Virtual SAN 独特の機能でもあります。この OSR ルールを仮想マシン ストレージ ポリシーに組み込み、仮想マシン ストレージ ポリシーを仮想ディスクや VM ホームに適用します。

なお、OSR の値が設定されていない場合、デフォルトの値 OSR 0% が適用されます。

重複排除と圧縮を利用している場合の OSR の制限

重複排除と圧縮が無効な vsanDatastore では OSR の値は 0~100% までの値をとることができます。しかし、重複排除と圧縮を vsanDatastore で有効にしている場合、OSR の値は 0% または 100% のみが許されます。

また、vsanDatastore の重複排除と圧縮を無効から有効に切り替える際にも制限があります。OSR が 1~99% の値を持つ仮想マシン ストレージ ポリシーが適用された仮想マシンのある vsanDatastore では、重複排除と圧縮を後から有効にすることは出来ません。OSR が 0% または 100% の値を持つ仮想マシン ストレージ ポリシーに変更するか、Storage vMotion で問題のある仮想マシンを vsanDatastore から追い出すことが必要となります。

ところが…

重複排除と圧縮を有効にした Virtual SAN 環境において OSR が 20% の仮想マシン ストレージ ポリシーを作成し、それを新規仮想マシンを作成時に使用すると、警告は表示されるものの、OSR 20% が適用されたいるようにみえる仮想マシンが作成されてしまいます。既存の仮想マシンに OSR 20% の仮想マシン ストレージ ポリシーを適用した場合も同様です。以下は警告の内容です。

Object space reservation can only be 0 or 100 when deduplication and compression is on. Any value lower than 100 will be treated as 0. Currrent value is 20.

重複排除と圧縮が有効な Virtual SAN 環境で許容される OSR の値、0% でも 100% でもないので、「仮想マシン ストレージ ポリシー自体が不適切である」というアラームなりイベントを発行して欲しいところです。しかしながら、残念なことに現在の実装ではどちらも発行されません。まぁ、そもそもポリシーの適用をエラーとし封じて欲しいところですが…。(いや、そもそもなんで英語?とか Current のスペル間違ってるわ、などツッコミ処もそこかしこに…Orz)

では適用されてしまったかのように見える OSR 20% は本当に仮想マシンに適用されているのでしょうか?実は適用されているように見えて OSR 0% と見なされます。これはマニュアルに記述があります。

VMware Virtual SAN 6.0 のドキュメント > VMware Virtual SAN の管理 > Virtual SAN クラスタの領域効率の向上

100% 未満の比例容量のポリシーは、比例容量の予約が要求されなかったものとして扱われます。 オブジェクトはポリシーに準拠したままで、イベントはログに記録されません。

比例容量ってなんぞや?ということで英語のマニュアルから引用してみます。

Policies with less than 100 percent proportional capacity are treated as if no proportional capacity reservation was requested. The object remains compliant with the policy, and no events are logged.

Proportional Capacity って何よ?というところですが、Virtual SAN 内部では Object Space Reservation の値を proportionalCapacity という変数名で取り扱っています。マニュアルの記載を言い換えると、重複排除と圧縮が有効な vsanDatastore で OSR を 1~99% の間の値とした場合、OSR を設定しなかったモノとして扱われる、ということになります。つまり OSR を 1~99% の間の値とした場合 OSR の値はデフォルトの 0% となります。そして、残念なことにイベントも発報されず、コンプライアンスも準拠として扱われてしまいます。

仮想マシン作成や設定変更のときに、なんとか警告が出ますのでここで踏みとどまって頂くほかないところがツラいですね。

仮想マシン作成時の警告

仮想マシン編集時の警告

proportionalCapacity という変数名はログや cmmds-tool という ESXi 上のコマンドで確認することができます。

    [root@esxi-01a:~] cmmds-tool find -t POLICY
    
    owner=576aa23a-a0d3-bb78-961d-005056110102(Health: Healthy) uuid=0a996c57-0774-fe28-10cf-005056110103 type=POLICY rev=1 minHostVer=3  [content = (("stripeWidth" i1) ("cacheReservation" i0) ("proportionalCapacity" i0) ("hostFailuresToTolerate" i1) ("forceProvisioning" i0) ("spbmProfileId" "aa6d5a82-1c88-45da-85d3-3d74b91a5bad") ("spbmProfileGenerationNumber" l+0))], errorStr=(null)
    
    owner=576aa240-afa3-25ce-ccc6-005056110107(Health: Healthy) uuid=0b9a6c57-87ed-e83c-e9bc-005056110107 type=POLICY rev=116 minHostVer=3  [content = (("proportionalCapacity" i20) ("hostFailuresToTolerate" i1) ("spbmProfileId" "7bd0359d-59a9-4d2d-9965-6a6139eb1e79") ("spbmProfileGenerationNumber" l+0))], errorStr=(null)
    
    owner=576aa240-afa3-25ce-ccc6-005056110107(Health: Healthy) uuid=70e76c57-5ea4-1a43-0bc4-005056110104 type=POLICY rev=118 minHostVer=3  [content = (("proportionalCapacity" i20) ("hostFailuresToTolerate" i1) ("spbmProfileId" "7bd0359d-59a9-4d2d-9965-6a6139eb1e79") ("spbmProfileGenerationNumber" l+0))], errorStr=(null)
    
    owner=576aa23a-a0d3-bb78-961d-005056110102(Health: Healthy) uuid=6be76c57-5eb6-bd6f-b17f-005056110104 type=POLICY rev=0 minHostVer=3  [content = (("stripeWidth" i1) ("proportionalCapacity" (i0 i100)) ("hostFailuresToTolerate" i1) ("spbmProfileId" "7bd0359d-59a9-4d2d-9965-6a6139eb1e79") ("spbmProfileGenerationNumber" l+0))], errorStr=(null)
    
    owner=576aa241-b2fa-3249-4e35-005056110101(Health: Healthy) uuid=079a6c57-2487-baa6-1946-005056110107 type=POLICY rev=7 minHostVer=3  [content = (("stripeWidth" i1) ("proportionalCapacity" (i0 i100)) ("hostFailuresToTolerate" i1) ("spbmProfileId" "7bd0359d-59a9-4d2d-9965-6a6139eb1e79") ("spbmProfileGenerationNumber" l+0))], errorStr=(null)
    
    
    [root@esxi-01a:~]

まとめ

  • 重複排除と圧縮を有効にした vsanDatastore では OSR の値は 0% と 100% に限定される
  • しかし、警告はでるものの OSR 1~99% の仮想マシン ストレージ ポリシーを仮想マシンの作成やポリシーの変更で選択、適用することがでてきしまう
  • その場合、OSR 1~99% と設定されても、実際には OSR 0% と扱われる。
  • イベントは発報されず、コンプライアンス違反ともならないので、警告を見つけ次第適用を踏みとどまること

OSR 1~99% を重複排除と圧縮が有効になった vsanDatastore 上の仮想マシンに適用出来なくして欲しいところですが、致命的ではないので修正の優先度は高くないのだよなぁ。

参考