如何使用 obd 对单个 ob_server 进行升级?

【 使用环境 】生产环境 or 测试环境
测试环境

【 OB or 其他组件 】
ob_server

【 使用版本 】
4.2.1.10

【问题描述】清晰明确描述问题
官方文档中提到,通过 obd 升级 ob_server,可以使用以下命令:
obd cluster upgrade obtest -c oceanbase-ce -V 4.2.0.0 --usable=bf178e82c99ca1324a3df9e1a21cbbb8f8c4d46c

这条命令看上去是一次性升级所有节点。我希望能逐个节点的手动升级,请问 obd 支持吗?单台升级的命令是什么?

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据文档库中的信息,obd cluster upgrade 命令确实支持对整个集群进行升级,但并不直接提供逐个节点手动升级的选项。不过,您可以采取以下步骤实现单个 ob_server 的手动升级:

方法概述

  1. 停止目标节点:使用 obd cluster stop 停止需要升级的单个节点。
  2. 升级目标节点:通过手动替换目标节点的二进制文件或重新部署该节点来完成升级。
  3. 启动目标节点:使用 obd cluster start 启动已升级的节点。
  4. 验证升级结果:确保升级后的节点正常工作。

以下是具体操作步骤:


1. 停止单个节点

假设您的集群名为 obtest,需要升级的节点为 node1,可以使用以下命令停止单个节点:

obd cluster stop obtest -n node1

2. 替换目标节点的二进制文件

  • 下载目标版本的 OceanBase 社区版二进制文件(例如 oceanbase-ce-4.2.1.10)。
  • 将下载的二进制文件解压并替换到目标节点的安装目录中。例如:
    # 解压新版本的二进制文件
    tar -xzf oceanbase-ce-4.2.1.10.tar.gz
    
    # 替换目标节点的二进制文件
    rsync -avz --delete oceanbase-ce/ /path/to/node1/install/directory/
    

注意:请确保替换路径与实际安装路径一致,并备份旧版本的二进制文件以防止意外情况。


3. 启动已升级的节点

使用以下命令启动已升级的节点:

obd cluster start obtest -n node1

4. 验证升级结果

登录到目标节点的 sys 租户,执行以下 SQL 查询确认版本是否正确:

SELECT OB_VERSION();

如果返回的结果为 4.2.1.10,则说明升级成功。


注意事项

  • 数据一致性:在生产环境中,建议先测试升级流程以确保不会影响数据一致性。
  • 集群健康检查:升级完成后,使用 obd cluster status 检查整个集群的状态,确保所有节点正常运行。
  • 滚动升级限制:虽然上述方法可以实现单节点升级,但在某些场景下可能需要对整个集群进行滚动升级以避免潜在问题。

总结

目前 obd 并未直接提供逐个节点升级的命令,但可以通过停止、替换二进制文件和启动的方式手动完成单个 ob_server 的升级。如果您希望简化此过程,可以考虑提交功能需求至 OceanBase 社区,以便未来版本中支持更灵活的升级方式。

检索到的文档如下:

  1. 升级 OceanBase 数据库
  2. 使用 obd 进行运维
  3. 常见问题汇总
  4. OceanBase 数据库社区版 V3.1.2
  5. 使用 OBD 升级 OceanBase 数据库
  6. 集群升级
  7. OB_VERSION
1 个赞

如ocp那样进行滚动升级么

是的。但是我没装 ocp,所以希望能够手动逐台滚动升级

官方文档中并未有单独节点升级的命令。这边可以反馈一下看看后续是否可以化个需求

你好 这边咨询了下obd同学。
obd 升级时候判断 如果够3个节点 会自动滚动升级的

假设我有三节点的一个集群,包括 observer1、observer2 和 observer3。
现在我计划先升级 observer1:我可以把 all-in-one 里面的 oceanbase-ce-4.2.5.rpm 上传到 observer1,停止 observer1 原来的 4.2.1 进程,通过 mv 移走原来的安装目录,然后通过 rpm 安装上传的 4.2.5 的 rpm 包,然后在新的安装目录下启动进程吗?
不知道 rpm 安装的方式,会不会改写全局性的东西,还是说只是解压缩放到安装目录下?

学习一下处理过程

通过 obd 升级,如果升级失败,会自动回滚到原来的版本吗?
官方文档里关于升级方面的资料太少了,这样根本无法放心的进行升级。

不会回滚,如升级超时可以再次执行升级任务,集群会继续升级。

mv 移走原来的安装目录,然后通过 rpm 安装上传的 4.2.5 的 rpm 包,然后在新的安装目录下启动进程吗?
这种方法不可取