本記事では、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:Isolation Zone
[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を参照してください。