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インターフェースを呼び出す方法については、テナントの作成を参照してください。このインターフェースは非同期保守タスクを作成します。タスクの進捗状況を確認する方法については、タスクの詳細情報を取得するを参照してください。タスクが完了するまで待機すると、作成が完了します。
[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 unit コマンドグループの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