首批通过分布式安全可靠测评,为关键业务系统打造
接管非 obshell 部署集群
更新时间:2026-04-07 20:57:20
obshell 接管非 obshell 部署的 OceanBase 集群支持两种方式:
通过 SDK 方法接管
通过 obshell 命令接管
本文将以一个由 OCP 部署的三副本 OceanBase 集群为例,介绍如何使用 obshell 接管 OceanBase 集群。无论 OceanBase 集群处于什么状态,obshell 都可以进行接管。
部署模式
本文中三台机器的使用情况如下:
| 角色 | 机器 | 备注 |
|---|---|---|
| OBServer 节点 | 10.10.10.1 | OceanBase 数据库 zone1 |
| OBServer 节点 | 10.10.10.2 | OceanBase 数据库 zone2 |
| OBServer 节点 | 10.10.10.3 | OceanBase 数据库 zone3 |
通过 SDK 方法接管
示例如下,通过 obshell-sdk-python 接管集群的介绍可参见 接管集群。
from obshell import takeover, NodeConfig
def init_nodes():
ips = [
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
]
work_dir = "/data/ob" # OceanBase 数据库的工作目录
nodes_config = []
for _, ip in enumerate(ips):
node = NodeConfig(ip, work_dir)
nodes_config.append(node)
takeover("pwd", nodes_config) # pwd 表示待被接管集群 root@sys 用户的密码,需根据实际密码替换
示例如下,通过 obshell-sdk-go 接管集群的介绍可参见 接管集群。
func main() {
ips := []string{
"10.10.10.1",
"10.10.10.2",
"10.10.10.3",
}
workDir := "/data/ob" // OceanBase 数据库的工作目录
nodeConfigs := make([]util.NodeConfig, 0)
for _, ip := range ips {
nodeConfigs = append(nodeConfigs, util.NewNodeConfig(ip, workDir, 2886))
}
// pwd 表示待被接管集群 root@sys 用户的密码,需根据实际密码替换
if err := util.Takeover("pwd", nodeConfigs...); err != nil {
panic(err)
}
}
通过 obshell 命令接管
步骤 1:设置密码环境变量
如果当前 OceanBase 集群 sys 租户的 root 用户设置了密码,则需要在任一 OBServer 节点执行如下命令以便 obshell 获得密码。此处以在 10.10.10.1 节点执行为例,pwd 表示待被接管集群 root@sys 用户的密码,需根据实际密码替换。
[admin@test001 ~]$ export OB_ROOT_PASSWORD="pwd"
步骤 2:接管集群
在 步骤 1 的节点(10.10.10.1)中执行如下命令即可拉起当前 OceanBase 集群内每个 OBServer 节点所属的 obshell 并执行接管。obshell 位于 OceanBase 数据库安装目录的 bin 目录下(/home/admin/oceanbase/bin/obshell)。命令详见 obshell cluster start。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster start -a
检查是否接管成功
通过调用任一 obshell 的 /api/v1/ob/info 接口,当 agent_info 中 identity 为 CLUSTER AGENT 时,当前 OceanBase 集群即被 obshell 运维。接口详情可参见 查询 OceanBase 信息。
说明
obshell 会对被调用的 API 进行安全校验。因此,您在每次调用 API 之前都需先参考 API 混合加密 一文对请求进行加密,并在 curl 命令中配置加密后的请求头部(${request_headers})和请求体(${request_body})。
调用
[admin@test001 ~]$ curl -H 'X-OCS-Header:${request_headers}' -X GET http://10.10.10.1:2886/api/v1/ob/info返回
{ ....... "agent_info": [ { "ip": "10.10.10.1", "identity": "CLUSTER AGENT", ...... }, { "ip": "10.10.10.2", "identity": "CLUSTER AGENT", ...... }, { "ip": "10.10.10.3", "identity": "CLUSTER AGENT", ...... } ], ...... }
说明
当 OceanBase 集群被 obshell 运维时,即表示接管成功。