本記事では、3レプリカ構成のOceanBaseクラスタを例に、obshellを使用してOceanBaseクラスタを起動する方法を説明します。また、本記事ではすべてのシナリオを以下の2つのカテゴリに分類します:
OceanBaseデータベースがobshellによって管理される場合
OceanBaseデータベースがobshellによって管理されない場合
OceanBaseクラスタがobshellによって管理されているかどうかを判断する詳細な方法については、obshell以外でデプロイされたクラスタの引き継ぎの引き継ぎが成功したかどうかの確認を参照してください。
デプロイメントモード
本記事では、以下の3台のマシンを使用します。
| ロール | マシン | 備考 |
|---|---|---|
| OBServerノード | 10.10.10.1 | OceanBaseデータベースzone1 |
| OBServerノード | 10.10.10.2 | OceanBaseデータベースzone2 |
| OBServerノード | 10.10.10.3 | OceanBaseデータベースzone3 |
OceanBaseデータベースはobshellによって管理されます
前提条件
すべてのobshellが正常に稼働していること。詳細については、obshellの起動と停止を参照してください。
APIによる起動
説明
コマンドラインからAPIを呼び出す際は、以下の点にご注意ください:
以下のAPIを呼び出すと非同期タスクが作成されるため、次のステップに進む前にタスクの完了を確認する必要があります。詳細な手順については、タスクの詳細情報を取得するを参照してください。
obshellは呼び出されたAPIに対してセキュリティ検証を行います。そのため、APIを呼び出すたびに、APIハイブリッド暗号化の記事を参照してリクエストを暗号化し、curlコマンドで暗号化後のリクエストヘッダー(
${request_headers})とリクエストボディ(${request_body})を設定する必要があります。
クラスタ内の任意のobshellの/api/v1/ob/startインターフェースを呼び出してノードサービスを開始します。
コマンドラインで対応するAPIインターフェースを呼び出す方法の説明については、クラスタの起動を参照してください。
obshell-sdk-pythonを使用して対応するAPIメソッドを呼び出す方法の紹介については、クラスタの起動を参照してください。
obshell-sdk-goを使用して対応するAPIメソッドを呼び出す方法の紹介については、クラスタの起動を参照してください。
シナリオ1:クラスタのすべてのノードのサービスを起動する
[admin@test001 ~]$ curl -H "Content-Type: application/json" -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/ob/start
暗号化前のリクエストボディ内容は以下のとおりです:
{
"scope": {
"type": "GLOBAL",
"target": ""
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.start_sync("GLOBAL", None) # /api/v1/ob/startを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStartRequest(v1.SCOPE_GLOBAL)
dag, err := client.V1().StartSyncWithRequest(req) // /api/v1/ob/startを呼び出す
···
シナリオ2:特定のノードのサービスを起動する
[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/ob/start
暗号化前のリクエストボディの内容は次のとおりです:
{
"scope": {
"type": "SERVER",
"target": "10.10.10.1:2886,10.10.10.2:2886"
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.start_sync("SERVER", "10.10.10.1:2886,10.10.10.2:2886") # /api/v1/ob/startを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStartRequest(v1.SCOPE_SERVER, "10.10.10.1:2886,10.10.10.2:2886")
dag, err := client.V1().StartSyncWithRequest(req) // /api/v1/ob/startを呼び出す
···
シナリオ3:特定のゾーン内のノードサービスを起動する
[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/ob/start
暗号化前のリクエストボディ内容は以下のとおりです:
{
"scope": {
"type": "ZONE",
"target": "zone1,zone2"
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.start_sync("ZONE", "zone1,zone2") # /api/v1/ob/startを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStartRequest(v1.SCOPE_ZONE, "zone1,zone2")
dag, err := client.V1().StartSyncWithRequest(req) // /api/v1/ob/startを呼び出す
···
obshellコマンドによる起動
シナリオ1:クラスタのすべてのノードサービスを起動する
任意のノードで以下のコマンドを実行すると、起動されていないすべてのノードサービスが起動されます。コマンドの詳細については、obshell cluster startを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -a
シナリオ2:特定のノードサービスを起動する
任意のノードで以下のコマンドを実行して、対応するノードのサービスを起動します。コマンドの詳細については、obshell cluster startを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -s 10.10.10.1:2886,10.10.10.2:2886
シナリオ3:特定のゾーン内のノードサービスを起動する
任意のノードで以下のコマンドを実行して、対応するゾーン内のノードサービスを起動します。コマンドの詳細については、obshell cluster startを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -z zone1,zone2
OceanBaseデータベースはobshellによって管理されない
この場合、クラスタはobshellによって管理されておらず、引き継ぐ必要があります。引き継ぎと同時に、すべてのOBServerプロセスを起動してクラスタを正常な状態にします。詳細については、obshell以外でデプロイされたクラスタの引き継ぎを参照してください。