obshellによるOceanBaseデータベースのテナントレベルでの復元は、以下の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の /api/v1/tenant/restore インターフェースを呼び出すことで、テナントレベルの復元を開始できます。
コマンドラインで対応する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/restore
暗号化前のリクエストボディの内容は以下のとおりです:
{
"data_backup_uri": "file:///data/backup/data",
"restore_tenant_name": "tenant1",
"zone_list":
[
{
"name": "zone1",
"unit_config_name": "unit1",
"unit_num": 1
}
],
"archive_log_uri": "file:///data/backup/archive"
}
obshell-sdk-pythonを使用して対応するAPIメソッドを呼び出す方法の詳細については、テナントの復元を開始するを参照してください。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.post_tenant_restore_sync(
data_backup_uri="file:///data/backup/data",
tenant_name="tenant1",
zone_list=[
tenant.ZoneParam("zone1", "unit1",1),
],
archive_log_uri="file:///data/backup/archive",
)
...
obshell-sdk-goを使用して対応するAPIメソッドを呼び出す方法の詳細については、テナントの復元を開始するを参照してください。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
request := client.V1().NewRestoreRequest(
"tenant1",
"file:///data/backup/data",
[]v1.ZoneParam{{
Name: "zone1",
UnitConfigName: "unit1",
UnitNum: 1,
}})
request.SetArchiveLogUri("file:///data/backup/archive")
dag, err := client.V1().RestoreWithRequest(request)
...
ステップ2:テナントレベルの復元タスクを確認する
任意のobshellの /api/v1/tenant/:name/restore/overview インターフェースを呼び出すことで、テナントレベルの復元タスクを確認できます。
コマンドラインで対応するAPIインターフェースを呼び出す方法の説明については、テナントの復元を確認するを参照してください。
[admin@test001 ~]$ curl
-H "Content-Type: application/json"
-X GET
http://10.10.10.1:2886/api/v1/tenant/tenant1/restore/overview
obshell-sdk-pythonを使用して対応するAPIメソッドを呼び出す方法の詳細については、テナントの復元を確認するを参照してください。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.get_tenant_restore_overview("tenant1")
...
obshell-sdk-goを使用して対応するAPIメソッドを呼び出す方法の詳細については、テナントの復元を確認するを参照してください。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
res, err := client.V1().GetTenantRestoreOverview("tenant1")
...
obshellコマンドを使用した復元
ステップ1:テナントの復元を実行する
任意のノードで obshell tenant restore コマンドを実行すると、テナントの復元がトリガーされます。コマンドの詳細については、obshell テナントコマンドグループの obshell tenant restore のセクションを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell tenant restore tenant1 -d 'file:///data/backup/data' -u unit1 -z zone1 -a 'file:///data/backup/archive'
ステップ2:テナントの復元情報を照会する
使用するコマンドの詳細については、obshell restore コマンドグループ の obshell restore show セクションを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell restore show tenant1