VMware Data Services ManagerでDBaaSを試す

VMware Data Services Manager（旧名称：Data Management for VMware Tanzu）のv1.5を導入して、Databaseを立ち上げるところまで確認した時のメモ。

## VMware Data Services Managerとは
VMware Data Services ManagerとはDB as a Serviceを実現するVMwareの製品で、[VMware Data Solutions](https://www.vmware.com/jp/solutions/data-solutions.html)というデータ関連の一連の製品群の中の1つである。
![1687320213486.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/bd549296-e1a5-aa4e-f1ff-99248c491a8c.png)

アーキテクチャは以下となる。（[こちら](https://docs.vmware.com/en/VMware-Data-Services-Manager/1.5/data-services-manager/GUID-concepts-architecture.html)から引用）
![1686219195319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/01fb8a6f-2be5-bfee-64f2-39e60587241f.png)

Privderという管理コンポーネントが管理用UIを提供し、各vSphereクラスタ上でDBを展開するためのAgentがvSphereクラスタ/VMCクラスタごとに配置され、データベースを展開する。
また、データベースのテンプレートはVMwareのTanzu Networkで配布されており、これをProviderが取得してAgentはこれを利用してデプロイするようだ。


## 前提条件
VMware Data Services Managerを利用するための前提条件は[こちら](https://docs.vmware.com/en/VMware-Data-Services-Manager/1.5/data-services-manager/GUID-vsphere-requirements.html)に記載されている。
- vSphere 6.7,7.0,8.0
- Provider VM: 8CPU,16GBメモリ, ストレージ736GB(thin)
- Agent VM: 8CPU,16GBメモリ, ストレージ668GB(thin)
- 100GB以上の空きがあるS3互換ストレージ（分散させることは可能）
  - S3内に6つのバケット(※[命名ルールあり](https://docs.vmware.com/en/VMware-Data-Services-Manager/1.5/data-services-manager/GUID-vsphere-requirements.html#naming-convention-of-object-storage-buckets))
    - Provider Repo
    - Provider logs
    - Provider backups
    - Database Backup local storage
    - Database Backup storage
    - Agent Template storage

S3はドキュメントには特に記載がなかったが、実質TLS対応していないと使えないので、MinIOとかで立てる人はTLS化して利用する必要がある。
またSANもチェックするので、MinIO OperatorでMinIOをデプロイする場合とかは注意。

また、前提ではないが、OVAのサイズが大きいので、構築を始める前に[Tanzu NetworkのVMware Data Services Managerのページ](https://network.tanzu.vmware.com/products/data-management-tanzu#)から`Provider Virtual Appliance`をダウンロードしておくことを推奨する。

あと、今回はvCenterに接続するアカウントをadminで済ませていたが、正しいロール・権限で進める場合は[Configuring vSphere SSO Users](https://docs.vmware.com/en/VMware-Data-Services-Manager/1.5/data-services-manager/GUID-vsphere-onboard_tenant.html#configuring-vsphere-sso-users)を見てアカウントを作成・権限付与するとよい。

## 検証
手順としては大きくは以下となる。
1. Provider VMのデプロイ・設定
3. Agent VMのデプロイ・設定
4. データベースのデプロイ


### Provider VMのデプロイ・設定
#### Provider VMのデプロイ
OVAのダウンロードが終わっていない場合、[Tanzu Network](https://network.tanzu.vmware.com/products/data-management-tanzu#)にアクセスし、Provider Virtual Appliance(v1.5の場合、dms-provider-va-1.5.0.2980-21842200.ova)をダウンロードする。
![1686279036285.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/fb80db80-1932-dafa-084b-64e07897c429.png)
ダウンロードが済んだらvSphere上にovaをデプロイする。この際、パスワードのみ設定する。

ovaデプロイ後、VMを起動してIPに対してhttpsでアクセスする。すると以下のような画面が表示される。
![1686561982386.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/6460fdfb-fa39-2318-3b62-5eb0a135129e.png)

パスワードとメールアドレスを入力し、`CREATE PROVIDER USER`を選択すると、Providerというロールを持つ初期ユーザが作成されて、ダッシュボードが表示される。

![1686705115240.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/6342463f-7412-ceb4-3262-1926935d84f3.png)

#### Organizationの作成
<!-- [公式手順](https://docs.vmware.com/en/VMware-Data-Services-Manager/1.5/data-services-manager/GUID-vsphere-deploy_provider_vm.html#create_provider_user)ではProvider VM起動後にユーザを作成する手順となっているが、-->
次にユーザを作成したいところだが、Organizationを作っておかないとユーザが所属する組織(Organization)が選択できないので、先に作成する。 
左サイドバーの`Organizations`->`CREATE ORGANIZATION` を選択し、各項目を埋めていく。
![1686707536355.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/19063c75-c10d-3f35-1e91-a16178cdac42.png)
各項目の意味は以下となる。
- `Organization name`: 組織名（全体で一意）
- `Email`: 組織の代表メールアドレス(他と重複不可)
- `DB FQDN Suffix`: 払い出すDBのSuffix（全体で一意）
- `VM Configuration Mode`:
  - `Plans Mode`: DBの払い出し(Provisioning)時、CPUとメモリを事前に定義されたものから選ぶ 
  - `Free Mode`: DBの払い出し(Provisioning)時、CPUとメモリをそのタイミングで指定する

入力後、`ADD`を選択して作成を完了させる。

#### VM PLANの追加
先程のOrganization作成時に`Plans Mode`を選択した場合、DB払い出し時にPlanの選択を迫られるので、予め作っておく。
左サイドバーの`VM Plans`->`ADD NEW VM PLAN` を選択し、プラン名、割当CPU数、割当メモリサイズを入力して`ADD`を選択する。
![1686708944192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/9dd7ecf4-eeae-b7f8-0a28-8b78cd51a39f.png)

#### OrganizationのAdminアカウントの作成
先程作成したOrganizationのAdminを作成する。
特に迷うところはないかと思われるので、詳細な説明は省略する。
なお、`Email id`は他との重複が不可となる。
入力後、`ADD`を選択して作成を完了させる。

#### DBのテンプレートの追加と公開
DBのテンプレートの追加にはS3バケットと、TanzuNetworkのアクセストークンが必要となる。
S3のバケットは予め作成しておく。
バケットが用意できたら、Data Services Managerの左サイドバーの`Settings`->`Storage Settings` を選択し、`Provider Repo Url`の横にある`Actions`から追加する。
![1686716082622.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/ff08b9d1-9bbf-4f4e-fe4c-f27d92053d21.png)

上記のような感じで項目を埋めたら、`CONNECT`を押して接続確認した後に`SAVE`で保存する。

なお、ついでに他のExternal Storageも同じ用に設定し、Database Backup Storageにも追加しておく（バケットが2つ必要なので、2つ追加しておく）。
![1687316285664.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/3d7fe9f3-c9fd-b191-ec42-309914d47e19.png)


Tanzu Networkのアクセストークンについては、Tanzu Networkにログイン後、アカウントをクリックして[Edit Profile](https://network.tanzu.vmware.com/users/dashboard/edit-profile)から`UAA API TOKEN`の横にある`REQUEST NEW REFRESH TOKEN`から発行できる。
発行したアクセストークンはData Services Managerの左サイドバーの`Settings`->`Information` を選択し、`Tanzu Net Token`の横にある`ACTIONS`から追加する。

それぞれ終わってしばらく待つと、左サイドバーの`Database Templates`にデータベースの一覧が表示されるようになる。
![1686718895018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/f11a303e-9dc0-91e7-7fd4-e78d537617e7.png)

データベースの列の`Actions`の項目をクリックすると、`Publish`というのが選べるので、デプロイしたいDBを`Publish`に変更する

![1687317008681.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/e6991200-4522-8aea-62a5-a0298cf9b16b.png)


なお、`Database Templates`にデータベースが表示されるようになったら、`Environments`の`Provider Status`も`Ready To Onboard`に変更される

![1686719336321.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/660a80dc-840e-4459-19c9-10f67f7c7bb6.png)

#### Agent VMの展開先環境のセットアップ
Agent VMをデプロイするために、Agent VMのデプロイ先の環境情報をセットアップする。
左サイドバーの`Environments`->`SETUP NEW ENVIRONMENT` を選択すると、
`Consolidated Environment`か`Distributed Environment`を聞かれる。
DBの展開先が同一vSphereクラスタ内であれば`Consolidated Environment`がよさそう。
ここでは`Consolidated Environment`で進めるものとする。
`Consolidated Environment`を選択後、暫く待つと`Agent Onboarding`という画面に遷移する。
![1686721092388.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/fe92a5ae-a7b7-052b-c2c5-c45dcfa0cdd4.png)
`Cluster Type`で`VSPHERE`を選択し、vCenterのFQDNやアカウントを入力して`CONNECT`を選択する。最初の`vCenter Credentials`は管理者権限を持つユーザー、次に聞かれる`Monitoring Read-Only Credentials`はRead権限を持つユーザーを指定する。`CONNECT`をクリックして問題なければ、`NEXT`がクリックできるようになるのでクリックする。
次にデプロイ先について聞かれるが、プルダウンで選べるようになっているので、デプロイ先として使うクラスタやネットワークなどを選んでいく。
選択後、`VALIDATE`を選んで問題なければ、`NEXT`をクリックする。

次にDBのテンプレートのS3ストレージを聞かれるので、DBのテンプレート追加時に設定したS3のバケット情報などを入力する。
![1686722148228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/6a4d27de-7754-fab5-e502-134042877590.png)

Storage Nameは任意の名前でよい模様。
なお、ここで大きな注意点として、S3ストレージのEndpointはhttpsである必要があり、かつIP/FQDNもSANに含まれるものである必要がある
（スクショは失敗時のものでhttpで指定していた）。
現時点ではhttpで`CONNECT`をクリックしてもエラーが出ず、その先の`SAVE`をクリック後画面が進まなくなってしまう。
エラーが出ないだけにかなりやっかいなので、よく注意しておくこと。

S3の情報を入力して先に進み、最後に確認画面で`SAVE`を押すと環境のセットアップが開始される。
1,2分待つと、以下の様に環境がEnvironmentsで表示されるようになる。
![1687258364317.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/73527da3-99b5-4290-ede0-7ec28397ca46.png)

### Agent VMのデプロイ・設定
#### Agent VMのデプロイ

環境のセットアップが終わっている場合、左サイドバーの`Environments`から`DEPLOY NEW AGENT`が選択できるようになっている。
これをクリックして各項目を埋めていく。
![1687259027081.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/cebefa7e-462a-377e-5210-4f9c276596b3.png)

1のvCenter Authenticationでは迷うところはないだろう。
2のSelect OVA templateでは`OVA from Provider Repository`のプルダウンを選択するとOVAが選べるので、ここでは`dms-agent-va-1.5.0.2797-21842199.ova`を選択した。
![1687303971119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/9061ba0f-4b7e-0f2f-a71b-1716a79380c9.png)

3のPlacement Configurationでは`Virtual Machine Name`に任意の名前を設定し、他はプルダウンで選択していく。
4, 5のSelect StorageおよびSelect Networkも特に迷うところはないと思う。
6のCustomize VM Templateはパスワードを設定し、ネットワークに関しては固定IPを使いたい時などは設定しておく。
今回はDHCPで検証したため、特に設定変更せずにそのまま進んだ。
![1687304311469.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/82bf11ac-d8cb-b732-49b0-45200186efb3.png)

最後、確認画面が表示される。IP AllocationがStaticになっているが、気にせずに`DEPLOY AGENT`をクリックしてデプロイを実施する。
クリック後、デプロイ中のステータスなどは確認できないが、vCenter側ではVMが作成されていることが確認できる。
![1687304557167.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/a74bdb60-0462-d380-711d-53ec3ff0a324.png)

しばらく待つとデプロイが完了しVMの電源が自動でOnとなり、Data Services Managerの`Environments`にも表示されるようになる。

![1687305923864.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/5d52dec3-39e3-089a-c90f-7b218ea5a3d9.png)

なお、ovaのデプロイはvSphere Clientからも実施することが可能。
この場合、手動でVMの電源を入れる必要がある点が異なるため注意が必要である。

#### Agent VMの設定
[こちら](https://docs.vmware.com/en/VMware-Data-Services-Manager/1.5/data-services-manager/GUID-vsphere-onboard_tenant.html#procedure-to-onboard-an-agent-or-a-consolidated-agent-through-provider-console)の手順を参考にデプロイされたAgent VMの設定を行う。
なお、ドキュメントにはAgent VMのIPにアクセスして設定する方法も記載されているが、こちらで確認したところ最後に401エラーが出て最後まで進めることが出来なかった。
左サイドバーの`Environments`から`Available Agent VMs`の欄にある、先程デプロイしたVMのActionで`ONBOARD AGENT`が選択できるようになっているのでクリックする。
![1687313807621.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/e1887a94-d213-e998-6e75-4a713c559fcd.png)

ここの設定は`SETUP NEW ENVIRONMENT`で実施した設定とほぼ同じなので詳細の説明は割愛する。
1点注意点としては、Resource Poolの設定で過去に利用したことがあるリソースプールは選択は出来るが後でエラーとなるため、新規にリソースプールを作成してそれを指定した方がよい。
問題なく設定できると、以下のような画面となる。
![1687314173335.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/358744f5-28b4-870c-d8ad-59c98fcdb64d.png)

#### Namespaceの作成
Databaseを展開するために、展開先のNamespaceを作成しておく必要がある。
左サイドバーの`Namespaces`->`CREATE NAMESPACE` を選択すると、作成用の画面が表示される。
1のName and Descriptionでは任意の名前を入力する。
2のEnvironmentでは展開先の環境を選択する。
![1687315579708.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/008610bf-1bc6-d53a-9e67-c2ac3db99797.png)

3ではバックアップ先を選択する。ここでバックアップ先が出てこない場合、`Settings`->`Storage Settings`で`Database Backup Storage`にデータベースが登録できているかを確認する。（External StorageのBackup Repo UIを設定とは別に設定が必要）
![1687316395143.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/1d32732d-5a24-1636-2ca6-e6a43cad0405.png)

4,5のVM DatastoresとDatabase Networksは使えるものを選択する。
最後に6のOrganization Associationで関連付けるOrganizationを選択する。
ここでは先程作成したOrganizationに紐付ける。

### Databaseのデプロイ

ここからアカウントを切り替えて、先程作成したユーザーでログインする。
切り替えたアカウントから先程Namespace作成時に紐づけた環境が確認できる。
![1687316849307.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/ad1d9d56-c01e-1642-0a2f-bdf0367ee913.png)

ここにDatabaseを作成する。
左サイドバーの`Databases`->`CREATE DB` を選択すると、作成用の画面が表示される。
ここでは先程`Database Templates`で`Published`に設定したデータベースをデプロイすることが出来る。
1のDatabase ConfigurationではMySQLを選択し、`Admin Password`だけ変更して`NEXT`をクリックする。
2のVM Configurationでは作成しておいたPlanを選択する。
3のManagemetnt Configurationでは監視やバックアップ設定、クラスタ設定をすることが出来る。
一旦デフォルト値のままで先に進む。
4,5のAlert Configuration, Additional Configurationでも同様にデフォルト値のまま先に進む。
Summaryで設定した値に問題なければ、`CREATE DATABASE`をクリックする。
![1687317332723.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/2ff62072-0ee9-5f3d-0221-cd848a1e5e19.png)

しばらくすると、DatabaseのVMが作成される。
![1687319745483.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/3c44799c-ff69-9178-97a5-3f2988b8b624.png)

Databaseの一覧からもDatabaseの詳細が確認できる。
![1687319776344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/f5ada427-b4e5-4030-de6b-b10205395008.png)

データベースにアクセスしてみる。
```
$ mysql -u dbaas -p -h 10.41.78.93
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 167
Server version: 8.0.32-24 Percona Server (GPL), Release 24, Revision e5c6e9d2

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
```
中も見てみる。
```
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| dbaas              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.02 sec)
```
問題なさそうだ。

<!-- [こちら](https://docs.vmware.com/en/VMware-Data-Services-Manager/1.5/data-services-manager/GUID-vsphere-onboard_tenant.html#procedure-to-onboard-an-agent-through-agent-console)を参考にデプロイされたAgent VMの設定を行う。
`https://<Agent VMのIP>`でAgent VMに接続し、ユーザー名は`root`、パスワードは先程設定したものでログインする。
ログインするとProvider VMに関して聞かれるので、Provider VMのIP、Provider AdminかOrganization Adminのユーザ名、パスワードを入力し`CONNECT`で接続した後、OrganizationとOperationを選択して`CONTINUE`をクリックする。
![picture 21](../../images/DSM/1687306959017.png)  
続いてStep2, Step3でvCenter、Environmentの情報を入力する。環境のセットアップと同じ流れで入力していく。 -->



## Q&A
### UIにアクセスしても"Service is not running.” と表示されてログインできない
VMの起動後に順々に内部で関連するサービスを起動しているようで、UIの起動が先行しているため、UIにアクセスできるからといってもすぐには利用できない。
30分くらい時間をおいて再度アクセスしてみるとよい。

### Database Templatesにデータベースが表示されない
何かしらのタイミングで処理が止まった場合、処理を再実行してあげる必要がある。
（自分は`Storage Settings`で設定後にMinIOを再起動して遭遇した）
この場合は再度`Storage Settings`でProvider Repo Urlの値をUpdateしてやると処理が再実行される模様。Updateする際の値は前と同じものを再入力するだけでよい。

### 環境セッティング時、`Placement Configuration`の設定で`VALIDATE`を押すと、`User [administrator@vsphere.local] missing [[Datastore.AllocateSpace, ...`というエラーが出る
VM FolderでvCLSを選ぶと出る。ちゃんと使えるフォルダを選択する必要がある。

### Environmentで環境を追加してSAVEを押しても画面が変わらない
![1687258784210.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/0bdda88c-64a1-3677-9fed-678d0017bd32.png)

上記の様になっている場合、非TLSのS3ストレージを選択している可能性が高い。
S3指定時、httpsを指定したかどうかを確認するとよい。