首批通过分布式安全可靠测评,为关键业务系统打造
obshell-sdk-go 快速上手
更新时间:2026-04-10 11:58:01
环境要求
需确保环境中的 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 集群:一是向 obshell 请求对应的 API 方法成功后,立刻返回;二是向 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) } // 加入 follower 到集群 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) } // 加入 follower 到集群 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) } }