環境要件
環境内のobshellが実行中であることを確認する必要があります。
手順
obshell-sdk-goのインストール
go get github.com/oceanbase/obshell-sdk-goクライアントの作成
単一バージョンのクライアントを作成するか、マルチバージョンのクライアントセットを作成するか選択できます。
シングルビュークライアントの作成マルチバージョンクライアントセットの作成package main import ( "github.com/oceanbase/obshell-sdk-go/services/v1" ) func main() { client, err := v1.NewClientWithPassword("10.10.10.1", 2886, "${password}") if err != nil { // Handle exceptions panic(err) } }package main import ( "github.com/oceanbase/obshell-sdk-go/services" ) func main() { clientset, err := services.NewClientWithPassword("10.10.10.1", 2886, "${password}") if err != nil { // Handle exceptions panic(err) } }例の
10.10.10.1はターゲットobshellノードのIPアドレス、2886はターゲットobshellノードのサービスポート番号です。実際の状況に応じて対応するIPとポート番号に変更してください。${password}はターゲットobshellが存在するクラスタのroot@sysユーザーのパスワードを設定する必要があります。OceanBaseクラスタのデプロイ
obshell-sdk-goは、OceanBaseクラスタを作成するための2種類のメソッドを提供します。1つは、obshellに対応するAPIメソッドをリクエストし、成功した後すぐに返却する方法です。もう1つは、obshellにAPIをリクエストして成功した後、obshellのタスク実行完了を待ってから返却する方法です。前者は非同期タスク実行、後者は同期タスク実行です。
このセクションでは、1-1-1クラスタのデプロイを例に説明します。コードは以下のとおりです:
タスクの非同期実行タスクの同期的実行package main import ( "github.com/oceanbase/obshell-sdk-go/services" "github.com/oceanbase/obshell-sdk-go/services/v1" ) func main() { client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****") if err != nil { panic(err) } // join で自分自身を MASTER にする joinRequest1 := client.V1().NewJoinRequest("10.10.10.1", 2886, "zone1") dag, err := client.V1().JoinSyncWithRequest(joinRequest1) if err != nil { panic(err) } if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil { panic(err) } // フォロワーをクラスターに追加する joinRequest2 := client.V1().NewJoinRequest("10.10.10.2", 2886, "zone2") dag, err = client.V1().JoinSyncWithRequest(joinRequest2) if err != nil { panic(err) } if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil { panic(err) } joinRequest3 := client.V1().NewJoinRequest("10.10.10.3", 2886, "zone3") dag, err = client.V1().JoinSyncWithRequest(joinRequest3) if err != nil { panic(err) } if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil { panic(err) } // obshell のバージョンが 4.2.3.0 より古い場合は、mysql_port(rpc_port) を使用し、mysql_port(rpc_port) は使用しないでください。 configs := map[string]string{ "mysql_port": "2881", "rpc_port": "2882", "datafile_size": "24G", "cpu_count": "16", "memory_limit": "16G", "system_memory": "8G", "log_disk_size": "24G", } // 各 OBServerノードのパラメータを設定する configObserverReq := client.V1().NewConfigObserverRequest(configs, v1.SCOPE_GLOBAL) dag, err = client.V1().ConfigObserverSyncWithRequest(configObserverReq) if err != nil { panic(err) } if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil { panic(err) } // OceanBaseクラスタの設定情報を設定する configObclusterReq := client.V1().NewConfigObclusterRequest("obshell-sdk-test", 12358).SetRootPwd("****") dag, err = client.V1().ConfigObclusterSyncWithRequest(configObclusterReq) if err != nil { panic(err) } if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil { panic(err) } // クラスタを初期化する initReq := client.V1().NewInitRequest() dag, err = client.V1().InitSyncWithRequest(initReq) if err != nil { panic(err) } if _, err = client.V1().WaitDagSucceed(dag.GenericID); err != nil { panic(err) } }package main import ( "github.com/oceanbase/obshell-sdk-go/services" "github.com/oceanbase/obshell-sdk-go/services/v1" ) func main() { client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****") if err != nil { panic(err) } // join で自分自身をマスターにする joinRequest1 := client.V1().NewJoinRequest("10.10.10.1", 2886, "zone1") if _, err = client.V1().JoinSyncWithRequest(joinRequest1); err != nil { panic(err) } // フォロワーをクラスターに追加する joinRequest2 := client.V1().NewJoinRequest("10.10.10.2", 2886, "zone2") if _, err = client.V1().JoinSyncWithRequest(joinRequest2); err != nil { panic(err) } joinRequest3 := client.V1().NewJoinRequest("10.10.10.3", 2886, "zone3") if _, err = client.V1().JoinSyncWithRequest(joinRequest3); err != nil { panic(err) } // obshell prior to 4.2.3.0 should use mysqlPort(rpcPort) instead of mysql_port(rpc_port). configs := map[string]string{ "mysql_port": "2881", "rpc_port": "2882", "datafile_size": "24G", "cpu_count": "16", "memory_limit": "16G", "system_memory": "8G", "log_disk_size": "24G", } // 各OBServerノードのパラメータを設定する configObserverReq := client.V1().NewConfigObserverRequest(configs, v1.SCOPE_GLOBAL) if _, err = client.V1().ConfigObserverSyncWithRequest(configObserverReq); err != nil { panic(err) } // OceanBaseクラスタの設定情報を設定する configObclusterReq := client.V1().NewConfigObclusterRequest("obshell-sdk-test", 12358).SetRootPwd("****") if _, err = client.V1().ConfigObclusterSyncWithRequest(configObclusterReq); err != nil { panic(err) } // クラスタを初期化する initReq := client.V1().NewInitRequest() if _, err = client.V1().InitSyncWithRequest(initReq); err != nil { panic(err) } }