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インターフェースを呼び出す方法については、テナントレプリカの追加を参照してください。このインターフェースは非同期タスクを作成します。タスクの進捗状況を確認する方法については、タスクの詳細情報を取得するを参照してください。タスクが完了するまで待機すると、テナントレプリカの追加が終了します。
[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:テナントレプリカの追加
任意のノードで以下のコマンドを実行することで、zone4およびzone5上にテナントtenant1のレプリカを追加できます。コマンドの詳細については、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