環境要件
環境内の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 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) 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 自分を MASTER にする 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) } }