環境要件
環境内の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メソッドのリクエストが成功した後、すぐに返す方法です。2つ目は、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) } // 自分自身を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)の代わりにmysqlPort(rpcPort)を使用する必要があります。 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) } }