首批通过分布式安全可靠测评,为关键业务系统打造
启动 OceanBase 集群
更新时间:2026-04-10 11:58:35
本文将以一个 3 副本的 OceanBase 集群为例,介绍如何通过 obshell 启动 OceanBase 集群。本文中将所有场景分为两类:
OceanBase 数据库由 obshell 管理
OceanBase 数据库不由 obshell 管理
判断 OceanBase 集群是否由 obshell 管理,详细方法可参见 接管非 obshell 部署集群 中的 步骤 3。
部署模式
本文中三台机器的使用情况如下:
| 角色 | 机器 | 备注 |
|---|---|---|
| OBServer 节点 | 10.10.10.1 | OceanBase 数据库 zone1 |
| OBServer 节点 | 10.10.10.2 | OceanBase 数据库 zone2 |
| OBServer 节点 | 10.10.10.3 | OceanBase 数据库 zone3 |
OceanBase 数据库由 obshell 管理
前提条件
所有 obshell 都正常运行,详情可参见 启动和停止 obshell。
通过 API 启动
说明
通过命令行命令调用 API 时,需注意以下信息:
调用集群内的任一 obshell 的 /api/v1/ob/start 接口启动节点服务。
命令行命令调用对应 API 接口的说明可参见 启动集群。
通过 obshell-sdk-python 请求对应 API 方法的介绍可参见 启动集群。
通过 obshell-sdk-go 请求对应 API 方法的介绍可参见 启动集群。
场景 1:启动集群所有节点服务
[admin@test001 ~]$ curl -H "Content-Type: application/json" -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/ob/start
加密前的请求体内容如下:
{
"scope": {
"type": "GLOBAL",
"target": ""
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.start_sync("GLOBAL", None) # 调用 /api/v1/ob/start
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStartRequest(v1.SCOPE_GLOBAL)
dag, err := client.V1().StartSyncWithRequest(req) // 调用 /api/v1/ob/start
···
场景 2:启动某些节点服务
[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/start
加密前的请求体内容如下:
{
"scope": {
"type": "SERVER",
"target": "10.10.10.1:2886,10.10.10.2:2886"
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.start_sync("SERVER", "10.10.10.1:2886,10.10.10.2:2886") # 调用 /api/v1/ob/start
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStartRequest(v1.SCOPE_SERVER, "10.10.10.1:2886,10.10.10.2:2886")
dag, err := client.V1().StartSyncWithRequest(req) // 调用 /api/v1/ob/start
···
场景 3:启动某些 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/start
加密前的请求体内容如下:
{
"scope": {
"type": "ZONE",
"target": "zone1,zone2"
}}
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.start_sync("ZONE", "zone1,zone2") # 调用 /api/v1/ob/start
···
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewStartRequest(v1.SCOPE_ZONE, "zone1,zone2")
dag, err := client.V1().StartSyncWithRequest(req) // 调用 /api/v1/ob/start
···
通过 obshell 命令启动
场景 1:启动集群所有节点服务
在任一节点执行如下命令即可拉起所有未启动的节点服务,命令详情参见 obshell cluster start。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -a
场景 2:启动某些节点服务
在任一节点执行如下命令启动对应节点的服务,命令详情参见 obshell cluster start。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -s 10.10.10.1:2886,10.10.10.2:2886
场景 3:启动某些 Zone 内的节点服务
在任一节点执行如下命令启动对应 Zone 内的节点服务,命令详情参见 obshell cluster start。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -z zone1,zone2
OceanBase 数据库不由 obshell 管理
此时集群不由 obshell 管理,需要进行接管。在接管的同时,会拉起所有的 OBServer 进程使得集群恢复正常。详情参见 接管非 obshell 部署集群。