本記事では、3レプリカ構成のOceanBaseクラスタを例に、obshellを使用してOceanBaseクラスタを停止する方法を説明します。
前提条件
OceanBaseクラスタはobshellによって運用管理されていること。詳細な判断方法および引き継ぎ操作については、obshell以外でデプロイされたクラスタの引き継ぎを参照してください。
OceanBaseクラスタのすべてのOBServerノードとobshellが正常に稼働していること。
デプロイメントモード
本記事では、以下の3台のマシンを使用します。
| ロール | マシン | 備考 |
|---|---|---|
| OBServerノード | 10.10.10.1 | OceanBaseデータベースzone1 |
| OBServerノード | 10.10.10.2 | OceanBaseデータベースzone2 |
| OBServerノード | 10.10.10.3 | OceanBaseデータベースzone3 |
APIによる停止
説明
コマンドラインからAPIを呼び出す際は、以下の点にご注意ください:
以下のAPIを呼び出すと非同期タスクが作成されるため、次のステップに進む前にタスクが完了していることを確認する必要があります。詳細な手順については、タスクの詳細情報を取得するを参照してください。
obshellは呼び出されたAPIに対してセキュリティ検証を行います。そのため、APIを呼び出すたびに、APIハイブリッド暗号化の記事を参照してリクエストを暗号化し、curlコマンドで暗号化後のリクエストヘッダー(
${request_headers})とリクエストボディ(${request_body})を設定する必要があります。
クラスタ内の任意のobshellの/api/v1/ob/stopを呼び出してクラスタを停止します。
コマンドラインから対応するAPIを呼び出す方法の説明については、クラスタの停止を参照してください。
obshell-sdk-pythonを使用して対応するAPIメソッドを呼び出す方法の紹介については、クラスタの停止を参照してください。
obshell-sdk-goを使用して対応するAPIメソッドを呼び出す方法の紹介については、クラスタの停止を参照してください。
シナリオ1:すべてのobserverプロセスを停止する
[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/stop
暗号化前のリクエストボディの内容は次のとおりです:
{
"scope": {
"type": "GLOBAL",
"target": ""
},
"force": true}
···
client = ClientSeta("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.stop_sync("GLOBAL", None, force=True) ## /api/v1/ob/stopを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStopRequest(v1.SCOPE_GLOBAL).SetForce()
dag, err := client.V1().StopSyncWithRequest(req) // /api/v1/ob/stopを呼び出す
···
シナリオ2:特定のobserverプロセスを停止する
[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/stop
暗号化前のリクエストボディ内容は以下のとおりです:
{
"scope": {
"type": "SERVER",
"target": "10.10.10.1:2886,10.10.10.2:2886"
},
"force": true}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.stop_sync("GLOBAL", None, force=True) ## /api/v1/ob/stopを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStopRequest(v1.SERVER, "10.10.10.1:2886,10.10.10.2:2886").SetForce()
dag, err := client.V1().StopSyncWithRequest(req) // 调用 /api/v1/ob/stop
···
シナリオ3:特定のゾーン内のobserverプロセスを停止する
[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/stop
暗号化前のリクエストボディの内容は次のとおりです:
{
"scope": {
"type": "ZONE",
"target": "zone1"
},
"force": true}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.stop_sync("ZONE", "zone1", force=True) ## /api/v1/ob/stopを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStopRequest(v1.SCOPE_ZONE, "zone1").SetForce()
dag, err := client.V1().StopSyncWithRequest(req) // 调用 /api/v1/ob/stop
···
シナリオ4:OBServerノードを隔離する
[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/stop
暗号化前のリクエストボディの内容は次のとおりです:
{
"scope": {
"type": "SERVER",
"target": "10.10.10.1:2886,10.10.10.2:2886"
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.stop_sync("SERVER", "10.10.10.1:2886,10.10.10.2:2886") ## /api/v1/ob/stopを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStopRequest(v1.SCOPE_SERVER, "10.10.10.1:2886,10.10.10.2:2886")
dag, err := client.V1().StopSyncWithRequest(req) // /api/v1/ob/stopを呼び出す
···
シナリオ5:アイソレーションゾーン
[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/stop
暗号化前のリクエストボディの内容は次のとおりです:
{
"scope": {
"type": "ZONE",
"target": "zone1"
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.stop_sync("ZONE", "zone1") ## /api/v1/ob/stopを呼び出す
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStopRequest(v1.SCOPE_ZONE, "zone1")
dag, err := client.V1().StopSyncWithRequest(req) // 调用 /api/v1/ob/stop
···
obshellコマンドによる停止
シナリオ1:すべてのobserverプロセスを停止する
任意のノードで以下のコマンドを実行して、すべてのノードのobserverプロセスを停止します。コマンドの詳細については、obshell cluster stopを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster stop -a -f
シナリオ2:特定のobserverプロセスを停止する
任意のノードで以下のコマンドを実行して、対応するノードのobserverプロセスを停止します。コマンドの詳細については、obshell cluster stopを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster stop -s 10.10.10.1:2886,10.10.10.2:2886 -f
シナリオ3:特定のZone内のobserverプロセスを停止する
任意のノードで以下のコマンドを実行して、対応するZone内のobserverプロセスを停止します。コマンドの詳細については、obshell cluster stopを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster stop -z zone1 -f
シナリオ4:observerノードを隔離する
任意のノードで以下のコマンドを実行して、observerノードを隔離します。コマンドの詳細については、obshell cluster stopを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster stop -s 10.10.10.1:2886 -I
シナリオ5:Zoneを隔離する
任意のノードで以下のコマンドを実行して、Zoneを隔離します。コマンドの詳細については、obshell cluster stopを参照してください。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster stop -z zone1 -I
関連ドキュメント
STOP ZONEの詳細については、Isolation Zoneを参照してください。STOP SERVERの詳細については、Isolation Nodeを参照してください。