首批通过分布式安全可靠测评,为关键业务系统打造
升级 OceanBase 集群
更新时间:2026-04-10 11:58:35
obshell 升级 OceanBase 数据库支持两种方式:
通过调用 API 升级
通过 obshell 命令升级
本文将以一个 3 副本的 OceanBase 集群为例,介绍如何通过 obshell 升级 OceanBase 集群。
前提条件
OceanBase 集群已被 obshell 运维管理,详细的判断方法及接管操作可参见 接管非 obshell 部署集群。
OceanBase 集群的所有 OBServer 节点和 obshell 都正常运行。
升级前,保证 OceanBase 集群未处于租户合并中。
部署模式
本文中三台机器的使用情况如下(obshell 使用默认端口 2886):
| 角色 | 机器 | 备注 |
|---|---|---|
| OBServer 节点 | 10.10.10.1 | OceanBase 数据库 zone1 |
| OBServer 节点 | 10.10.10.2 | OceanBase 数据库 zone2 |
| OBServer 节点 | 10.10.10.3 | OceanBase 数据库 zone3 |
通过 API 升级
说明
obshell 会对被调用的 API 进行安全校验。因此,您在每次调用 API 之前都需先参考 API 混合加密 一文对请求进行加密,并在 curl 命令中配置加密后的请求头部(${request_headers})和请求体(${request_body})。
步骤 1:上传目标版本的 RPM 包
调用任一 obshell 的 /api/v1/upgrade/package 接口进行包的上传。OceanBase 集群升级时需要上传 oceanbase-ce 和 oceanbase-ce-libs 两个包。
命令行中调用对应 API 接口的说明可参见 上传 RPM 包。
[admin@test001 ~]$ curl -H 'X-OCS-Header:${request_headers}' -X POST -F "file=@/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm" http://10.10.10.1:2886/api/v1/upgrade/package
[admin@test001 ~]$ curl -H 'X-OCS-Header:${request_headers}' -X POST -F "file=@/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm" http://10.10.10.1:2886/api/v1/upgrade/package
通过 obshell-sdk-python 请求对应 API 方法的介绍可参见 上传 RPM 包。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm") # 调用 /api/v1/upgrade/package
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm") # 调用 /api/v1/upgrade/package
···
通过 obshell-sdk-go 请求对应 API 方法的介绍可参见 上传 RPM 包。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm")
dag, err := client.V1().UploadPkgWithRequest(req) // 调用 /api/v1/upgrade/package
req = client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm")
dag, err = client.V1().UploadPkgWithRequest(req) // 调用 /api/v1/upgrade/package
···
步骤 2:调用升级检查接口(可选)
调用任一 obshell 的 /api/v1/ob/upgrade/check 进行升级检查。包括检查环境、目标版本的包是否上传、升级所需制品是否齐全等。
命令行中调用对应 API 接口的说明可参见 OceanBase 数据库升级检查。该接口会创建一个异步任务,查看任务进度参考 获取任务的详细信息。等待任务完成,则升级检查完成。
[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/upgrade/check
通过 obshell-sdk-python 请求对应 API 方法的介绍可参见 OceanBase 数据库升级检查。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upgrade_ob_check_sync("x.x.x.x", "xxx.el7") # 调用 /api/v1/ob/upgrade/check
···
通过 obshell-sdk-go 请求对应 API 方法的介绍可参见 OceanBase 数据库升级检查。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUpgradeObCheckRequest("x.x.x.x", "xxx.el7")
dag, err := client.V1().UpgradeObCheckSyncWithRequest(req) // 调用 /api/v1/ob/upgrade/check
···
步骤 3:调用升级接口
调用任一 obshell 的 /api/v1/ob/upgrade 进行升级。
命令行中调用对应 API 接口的说明可参见 升级 OceanBase 数据库。该接口会创建一个异步运维任务,查看任务进度参考 获取任务的详细信息。等待任务完成,则升级完成。
[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/upgrade
通过 obshell-sdk-python 请求对应 API 方法的介绍可参见 升级 OceanBase 数据库。
···
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.upgrade_ob_sync("x.x.x.x", "xxx.el7") # 调用 /api/v1/ob/upgrade
···
通过 obshell-sdk-go 请求对应 API 方法的介绍可参见 升级 OceanBase 数据库。
···
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
req := client.V1().NewUpgradeObRequest("x.x.x.x", "xxx.el7")
dag, err := client.V1().UpgradeObSyncWithRequest(req) // 调用 /api/v1/ob/upgrade
···
步骤 4:验证升级成功
使用 root 用户登录 OceanBase 数据库的 sys 租户,执行如下命令查看数据库版本。
obclient [oceanbase]> select build_version from oceanbase.dba_ob_servers;执行如下命令查看 obshell 版本。
obclient [oceanbase]> select version from ocs.all_agent;
完整代码示例
from obshell import ClientSet
from obshell.auth import PasswordAuth
client = ClientSet("10.10.10.1", PasswordAuth("****"))
# 上传升级所需包。
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm")
client.v1.upload_pkg("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm")
# 升级前检查。
client.v1.upgrade_ob_check_sync("x.x.x.x", "xxx.el7")
# 升级 OceanBase 数据库。
client.v1.upgrade_ob_sync("x.x.x.x", "xxx.el7")
package main
import (
"github.com/oceanbase/obshell-sdk-go/services"
)
func main() {
var err error // 生产环境中需要处理 error。
// 创建 client 实例,节点地址为 '10.10.10.1',端口为 2886。
// 所在集群的 root@sys 密码为 '****'。
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "***")
// 向集群上传 RPM 包。
req1 := client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-x.x.x.x-xxx.el7.x86_64.rpm")
dag1, err := client.V1().UploadPkgWithRequest(req1)
req2 := client.V1().NewUploadPkgRequest("/data/upgrade/oceanbase-ce-libs-x.x.x.x-xxx.el7.x86_64.rpm")
dag2, err := client.V1().UploadPkgWithRequest(req2)
// 升级前检查。
req3 := client.V1().NewUpgradeObCheckRequest("x.x.x.x", "xxx.el7")
dag3, err := client.V1().UpgradeObCheckSyncWithRequest(req3)
// 升级 OceanBase 数据库。
req4 := client.V1().NewUpgradeObRequest("x.x.x.x", "xxx.el7")
dag4, err := client.V1().UpgradeObSyncWithRequest(req4)
}
通过 obshell 命令升级
步骤 1:调用升级命令执行升级
在任一节点调用 obshell cluster upgrade 命令,通过 -d 指定目标版本包的存放路径。命令详见 obshell cluster upgrade。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell cluster upgrade -d /home/admin/oceanbase/upgrade/
步骤 2:验证升级成功
使用 root 用户登录 OceanBase 数据库的 sys 租户,执行如下命令查看数据库版本。
obclient [oceanbase]> select build_version from oceanbase.dba_ob_servers;执行如下命令查看 obshell 版本。
obclient [oceanbase]> select version from ocs.all_agent;