obshellでは、以下の2つの方法でテナントを拡張できます:
APIを呼び出して拡張する
obshellコマンドを使用して拡張する
本記事では、3レプリカのOceanBaseクラスタを例に、obshellを使用してテナントを拡張する方法(3レプリカから5レプリカへの拡張)を説明します。
説明
本記事で言及されているテナントの拡張とは、新しいテナントレプリカを追加することを指します。
前提条件
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 |
| スケールアウト用OBServerノード | 10.10.10.4 | OceanBaseデータベース zone4にスケールアウト |
| スケールアウト用OBServerノード | 10.10.10.5 | OceanBaseデータベース zone5にスケールアウト |
APIによる拡張
説明
obshellは呼び出されるAPIに対してセキュリティ検証を行います。そのため、APIを呼び出すたびに、API混合暗号化の記事を参照してリクエストを暗号化し、curlコマンドで暗号化されたリクエストヘッダー(${request_headers})とリクエストボディ(${request_body})を設定する必要があります。
ステップ1:クラスタの拡張
OceanBaseクラスタの拡張を参照して、10.10.10.4と10.10.10.5をそれぞれzone4およびzone5に拡張します。
ステップ2:テナントレプリカの追加
任意のobshellでPOST /api/v1/tenant/:name/replicasエンドポイントを呼び出し、テナントtenant1を拡張します。
コマンドラインで対応する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/tenant1/replicas
暗号化前のリクエストボディの内容は以下のとおりです。unit_1 はテナント tenant1 が使用するリソース仕様です。新しいリソースユニットを作成したい場合は、ドキュメントテナントの作成の手順1:リソース仕様の作成を参照してください。
{
"zone_list": [
{
"name": "zone4",
"unit_config_name": "unit_1",
"unit_num": 1
},
{
"name": "zone5",
"unit_config_name": "unit_1",
"unit_num": 1
}
]
}
obshell-sdk-pythonで対応するAPIメソッドをリクエストする方法の詳細については、テナントレプリカの追加を参照してください。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.add_tenant_replica_sync("tenant1", [ZoneParam("zone4", 'unit_1', 1),
ZoneParam("zone5", 'unit_1', 1))
...
obshell-sdk-goで対応するAPIメソッドを呼び出す方法の詳細については、テナントレプリカの追加を参照してください。
...
req := client.V1().NewScaleOutReplicasRequest("tenant1", []v1.ZoneParam{
{
Name: "zone4",
ReplicaType: "FULL",
UnitConfigName: "unit_1",
UnitNum: 1,
},
{
Name: "zone5",
ReplicaType: "FULL",
UnitConfigName: "unit_1",
UnitNum: 1,
},
})
if _, err = client.V1().ScaleOutReplicasSyncWithRequest(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/tenant1
obshell-sdk-pythonを使用して対応するAPIメソッドをリクエストする方法の詳細については、テナント情報のクエリを参照してください。
...
client = ClientSet("10.10.11", 2886, PasswordAuth("****"))
tenant_info = client.v1.get_tenant_info("tenant1")
...
obshell-sdk-goで対応するAPIメソッドを呼び出す方法の詳細については、テナント情報のクエリを参照してください。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
tenant, err := client.V1().GetTenantInfo("tenant1")
...
obshellコマンドによるスケールアウト
ステップ1:クラスタのスケールアウト
OceanBaseクラスタのスケールアウトを参照し、10.10.10.4と10.10.10.5をそれぞれzone4とzone5にスケールアウトします。
ステップ2:新規テナントレプリカの追加
任意のノードで以下のコマンドを実行することで、テナントtenant1のzone4およびzone5へのレプリカを追加できます。コマンドの詳細は、obshell テナントコマンドグループのobshell tenant replica addのセクションを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell tenant replica add tenant1 -z zone4,zone5 -u unit_1
例におけるunit_1はテナントtenant1が使用するリソース構成であり、実際の状況に応じて設定する必要があります。新しいリソースユニットを作成したい場合は、ドキュメントテナントの作成のステップ1:リソース構成の作成を参照してください。
ステップ3:テナント情報の確認
任意のノードで以下のコマンドを実行することで、指定されたテナントの情報を確認できます。コマンドの詳細は、obshell テナントコマンドグループのobshell tenant showのセクションを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell tenant show tenant1