obshellを使用してクラスタにテナントを作成するには、以下の2つの方法があります。
APIを呼び出してテナントを作成する
obshellコマンドを使用してテナントを作成する
本記事では、3レプリカのOceanBaseクラスタを例に、obshellを使用してテナントを作成する方法を説明します。
前提条件
OceanBaseクラスタはobshellによって運用管理されていること。詳細な判断方法および接続操作については、obshell以外でデプロイされたクラスタの接続を参照してください。
OceanBaseクラスタのすべてのOBServerノードとobshellが正常に稼働していること。
デプロイメントモード
本記事で使用する3台のマシンの構成は以下のとおりです(obshellはデフォルトポート2886を使用します):
ロール |
マシン |
備考 |
|---|---|---|
| OBServerノード | 10.10.10.1 | OceanBaseデータベースzone1 |
| OBServerノード | 10.10.10.2 | OceanBaseデータベースzone2 |
| OBServerノード | 10.10.10.3 | OceanBaseデータベースzone3 |
APIによるテナントの作成
説明
obshellは呼び出されたAPIに対してセキュリティ検証を行います。そのため、APIを呼び出すたびに、API混合暗号化の記事を参照してリクエストを暗号化し、curlコマンドで暗号化後のリクエストヘッダー(${request_headers})とリクエストボディ(${request_body})を設定する必要があります。
ステップ1:リソース仕様の作成
任意のobshellのPOST /api/v1/unit/configインターフェースを呼び出すことで、指定したリソース仕様を作成できます。
コマンドラインで対応するAPIを呼び出す方法については、リソース仕様の作成を参照してください。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/unit/config
暗号化前のリクエストボディの内容は以下のとおりです:
{
"name":"unit_1",
"memory_size": "5GB",
"max_cpu": 3,
}
obshell-sdk-pythonを使用して対応するAPIメソッドをリクエストする方法の詳細については、リソース仕様の作成を参照してください。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.create_resource_unit_config("unit_1", memory_size="5G", max_cpu=8)
...
obshell-sdk-goで対応するAPIメソッドを呼び出す方法の詳細については、リソース仕様の作成を参照してください。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "********")
if err != nil {
fmt.Print(err)
return
}
if err := client.V1().CreateResourceUnitConfig("unit_1", "5G", 8); err != nil {
fmt.Print(err)
return
}
...
ステップ2:テナントの作成
任意のobshellのPOST /api/v1/tenantエンドポイントを呼び出し、指定されたリソース仕様に基づいてテナントを作成できます。
コマンドラインで対応するAPIを呼び出す方法の説明については、テナントの作成を参照してください。このAPIは非同期の運用保守タスクを作成します。タスクの進捗状況を確認する方法については、タスクの詳細情報の取得を参照してください。タスクが完了するのを待つと、作成は完了します。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/tenant
暗号化前のリクエストボディの内容は以下のとおりです:
{
"name": "tenant_1",
"zone_list": [
{
"name": "zone1",
"unit_config_name": "unit_1",
"unit_num": 1
},
{
"name": "zone2",
"unit_config_name": "unit_1",
"unit_num": 1
},
{
"name": "zone3",
"unit_config_name": "unit_1",
"unit_num": 1
}
],
}
obshell-sdk-pythonを使用して対応するAPIメソッドをリクエストする方法の詳細については、テナントの作成を参照してください。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.create_tenant_sync("tenant_1", [ZoneParam("zone1", 'unit_1', 1),
ZoneParam("zone2", 'unit_1', 1),
ZoneParam("zone3", 'unit_1', 1)])
...
obshell-sdk-goで対応するAPIメソッドをリクエストする方法の詳細については、テナントの作成を参照してください。
...
req := client.V1().NewCreateTenantRequest("tenant_1", []v1.ZoneParam{
{
Name: "zone1",
ReplicaType: "FULL",
UnitConfigName: "unit_1",
UnitNum: 1,
},
{
Name: "zone2",
ReplicaType: "FULL",
UnitConfigName: "unit_1",
UnitNum: 1,
},
{
Name: "zone3",
ReplicaType: "FULL",
UnitConfigName: "unit_1",
UnitNum: 1,
},
})
if _, err = client.V1().CreateTenantSyncWithRequest(req); err != nil {
fmt.Print(err)
}
...
ステップ3:テナント情報を確認する
任意のobshellでGET /api/v1/tenant/:nameを呼び出すと、テナント情報を確認できます。
コマンドラインで対応するAPIを呼び出す方法については、テナント情報のクエリを参照してください。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X GET http://10.10.10.1:2886/api/v1/tenant/tenant_1
obshell-sdk-pythonで対応するAPIメソッドをリクエストする方法の詳細については、テナント情報のクエリを参照してください。
...
client = ClientSet("10.10.11", 2886, PasswordAuth("****"))
tenant_info = client.v1.get_tenant_info("tenant_1")
...
obshell-sdk-goで対応するAPIメソッドをリクエストする方法の詳細については、テナント情報の照会を参照してください。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
tenant, err := client.V1().GetTenantInfo("tenant_1")
...
obshellコマンドによる作成
ステップ1:リソース仕様の作成
任意のノードで以下のコマンドを実行すると、指定したリソース仕様が作成されます。コマンドの詳細については、obshellユニットコマンドグループ の obshell unit create のセクションを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell unit create unit_1 -m 5G -c 8
ステップ2:テナントの作成
任意のノードで以下のコマンドを実行すると、指定したテナントが作成されます。コマンドの詳細については、obshellテナントコマンドグループ の obshell tenant create のセクションを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell tenant create tenant_1 -u unit_1
ステップ3:テナント情報の確認
任意のノードで以下のコマンドを実行すると、指定したテナントの情報を確認できます。コマンドの詳細については、obshellテナントコマンドグループ の obshell tenant show のセクションを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell tenant show tenant_1