当前位置: 首页 > news >正文

OceanBase数据库集群升级手册

OceanBase数据库集群升级手册

  • 注意事项
  • 升级仲裁服务
  • 升级OB集群
    • 分析升级拓扑文件
    • 确认升级流程
    • 备份集群配置项
    • 安装目标RPM包
    • 执行升级检查脚本
    • 执行预升级脚本
    • 集群升级
    • 执行升级后脚本
    • 还原集群配置项
  • 升级后检查

注意事项

  1. OceanBase过渡版本不可以直接升级,需要参考oceanbase_upgrade_dep.yml文件中的升级版本序列。

  2. 升级过程中可能会涉及下列参数的变化,升级前需要对这些参数进行备份:

  • server_permanent_offline_time
  • enable_rebalance
  • enable_rereplication
  1. OceanBase数据库自以下版本开始对AVX指令集的强制依赖策略已调整:对于V4.3.5版本,从V4.3.5 BP4版本开始不再强制要求AVX指令集支持。

  2. OceanBase集群升级时,有如下限制:

  • 禁止DDL:升级过程中的部分阶段需要禁止DDL,升级完成后会自动打开。
  • 禁止MAJOR FREEZE:部分版本之间的升级会禁止合并,升级完成后会自动打开。
  • 禁止迁移复制和负载均衡:部分版本之间的升级会禁止迁移复制和负载均衡。
  • 禁止物理备份恢复:集群升级过程中不会发起物理基线备份(日志归档不断)、物理恢复。
  • 禁止新建租户。
  1. 如果OceanBase集群关联了仲裁服务,那么在进行OceanBase集群版本升级时,需要确保先升级仲裁服务版本,然后再升级OceanBase集群版本。
--查询是否关联了仲裁服务
SELECT * FROM oceanbase.DBA_OB_ARBITRATION_SERVICE;

升级仲裁服务

略(不涉及)。

升级OB集群

⚠️升级OB集群前,确保已在所有的OBServer节点中安装Python 2环境,并且安装适配Python 2的mysql.connector模块。

#检查Python版本
python -V#检查是否安装了mysql.connector模块
python -c "import mysql.connector; print('已安装')"#安装mysql.connector模块
yum install python2-pip
pip install mysql-connector-python
python -c "import mysql.connector; print('已安装')"#安装指定版本的mysql.connector模块
pip uninstall mysql-connector-python
pip install mysql-connector-python==8.0.15
python -c "import mysql.connector; print('已安装')"

分析升级拓扑文件

解压目标版本的OceanBase RPM包后,可以获取oceanbase_upgrade_dep.yml文件,该文件记录了OceanBase集群的版本升级拓扑图。

解压OceanBase RPM包至当前目录:

sudo rpm2cpio oceanbase-standalone-4.3.5.4-104000062025090915.rpm | cpio -div

解压RPM包完成后,会在存放RPM包的目录下生成home和use两个目录。升级相关脚本和oceanbase_upgrade_dep.yml文件存放home/admin/oceanbase/etc目录下。

oceanbase_upgrade_dep.yml文件中OceanBase集群各个版本升级依赖关系大致如下:

- version: 4.0.0.0can_be_upgraded_to:- 4.1.0.0- version: 4.1.0.0-100000982023031415can_be_upgraded_to:- 4.1.0.0deprecated: True- version: 4.1.0.0can_be_upgraded_to:- 4.1.0.1- version: 4.1.0.1can_be_upgraded_to:- 4.2.0.0require_from_binary:value: Truewhen_come_from: [4.0.0.0, 4.1.0.0-100000982023031415]- version: 4.3.0.0can_be_upgraded_to:- 4.3.0.1- version: 4.3.0.1can_be_upgraded_to:- 4.3.1.0

oceanbase_upgrade_dep.yml文件中相关属性含义:

  • version:当前版本。
  • can_be_upgraded_to:当前OceanBase数据库版本可以升级到的目标版本。
  • deprecated:当前版本是否可以作为升级的目标版本。若为true,表示不能作为升级的目标版本
  • require_from_binary:升级序列包含当前版本时是否需要先升级到当前版本,即当前版本是否是升级序列中的barrier版本。
    • value:当值为true时,和when_come_from属性联合使用。
    • when_come_from:是一个列表,当when_come_from未定义时,表示任何版本升级到目标版本时,都要先升级到当前barrier版本;当when_come_from已定义,表示列表中的版本号升级到目标版本时,需要先升级到当前barrier版本。

例如:示例中的4.0.0.04.1.0.0-100000982023031415版本的OceanBase集群在升级到V4.2.0.0版本时,都要先升级到V4.1.0.1(barrier)版本。

确认升级流程

通过分析示例文件oceanbase_upgrade_dep.yml,可以得到以下升级序列:

  • V4.0.0.0 > V4.1.0.0 > V4.1.0.1(barrier) > V4.2.0.0
  • V4.1.0.0-100000982023031415 > V4.1.0.0 > V4.1.0.1(barrier) > V4.2.0.0
  • V4.1.0.0 > V4.1.0.1 > V4.2.0.0
  • V4.3.0.0 > V4.3.0.1 > V4.3.1.0

以下将以三副本的OceanBase集群为例介绍升级流程。

  • 升级路径中有barrier版本。如果当前OceanBase集群版本是V4.0.0.0版本,升级流程如下:

    • 需要先将Zone1从V4.0.0.0版本升级到V4.1.0.1(barrier)版本,再将Zone2从V4.0.0.0版本升级到V4.1.0.1(barrier)版本,然后将Zone3从V4.0.0.0版本升级到V4.1.0.1(barrier)版本;此时,整个集群已经从V4.0.0.0版本升级到了V4.1.0.1(barrier)版本。
    • 需再次按照Zone顺序依次将Zone1、Zone2、Zone3从V4.1.0.1(barrier)版本升级到V4.2.0.0,等到所有Zone均升级到V4.2.0.0,集群升级就完成了。
  • 升级路径中没有barrier版本。如果当前OceanBase集群版本是V4.3.0.0版本,升级流程如下:

    • 您只需要先将Zone1从V4.3.0.0版本升级到V4.3.1.0版本,再将Zone2从V4.3.0.0版本升级到V4.3.1.0版本,然后将Zone3从V4.3.0.0版本升级到V4.3.1.0版本,等到所有Zone均升级到V4.3.1.0,集群升级就完成了。

备份集群配置项

升级流程开始前需要备份下列配置项旧值,用于执行升级流程后还原:

  • server_permanent_offline_time
  • enable_rebalance
  • enable_rereplication

在SYS租户中执行以下SQL语句:

select svr_ip,zone,scope,tenant_id,name,data_type,value,default_value,section,edit_level 
from gv$ob_parameters where name in
(
'server_permanent_offline_time',
'enable_rebalance',
'enable_rereplication'
);

安装目标RPM包

在所有OBServer节点,使用以下命令安装OceanBase RPM包。

rpm -Uvh oceanbase-4.2.0.0-100010022023081911.el7.x86_64.rpm

升级相关脚本和oceanbase_upgrade_dep.yml文件存放/home/admin/oceanbase/etc目录下。目录/home/admin/oceanbase/etc为OceanBase数据库的默认安装目录。

执行升级检查脚本

在任意一个OBServer节点中指定sys租户直连OBServer节点的登录信息,执行upgrade_checker.py脚本进行升级前置检查。

cd /home/admin/oceanbase/etc
python upgrade_checker.py -h 127.0.0.1 -P 2881 -u root@sys -p******

脚本执行成功表示可以继续升级。

执行预升级脚本

在任意一个OBServer节点中指定sys租户直连OBServer节点的登录信息,执行upgrade_pre.py脚本进行升级前置检查。

cd /home/admin/oceanbase/etc
python upgrade_pre.py -h 127.0.0.1 -P 2881 -u root@sys -p******

脚本执行成功表示可以继续升级。

📖 upgrade_pre.py脚本会执行以下命令及动作:

  • alter system begin upgrade
  • alter system begin rolling upgrade
  • special pre action:关闭及调整配置项。
  • health check: 集群级别健康检查。

集群升级

按Zone升级,每个Zone都要按照下面的步骤执行一遍,以zone1为例。


  1. 进行集群级别的健康检查。
cd /home/admin/oceanbase/etc
python upgrade_health_checker.py -h 127.0.0.1 -P 2881 -u root@sys -p******

  1. 停止Zone。

⚠️ 单机单副本OceanBase数据库升级无需停止Zone。

使用root用户登录到集群的sys租户,使用以下命令停止Zone。

--停止zone1
ALTER SYSTEM STOP ZONE 'zone1';--查看Zone状态是否为INACTIVE 
SELECT ZONE,STATUS FROM oceanbase.DBA_OB_ZONES;

  1. Zone内机器停进程,替换新版本binary重启

以admin用户停止observer进程:

su - admin
kill -9 `pidof observer`

重新启动observer进程:

cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer

再次启动observer进程时不需要指定启动参数,因为之前的启动参数已经写到参数文件里了。


  1. 执行Zone级别健康检查。
cd /home/admin/oceanbase/etc
python upgrade_health_checker.py -h 127.0.0.1 -P 2881 -u root@sys -p****** -z 'zone1'

  1. 启动Zone。

使用root用户登录到集群的sys租户,使用以下命令启动Zone。

--启动zone1
ALTER SYSTEM START ZONE 'zone1';--查看Zone状态是否为ACTIVE 
SELECT ZONE,STATUS FROM oceanbase.DBA_OB_ZONES;

  1. 重复步骤1~5,直至所有Zone升级完成。

执行升级后脚本

在任意一个OBServer节点中指定sys租户直连OBServer节点的登录信息,执行upgrade_post.py脚本完成主要的升级操作及相关检查。

cd /home/admin/oceanbase/etc
python upgrade_post.py -h 127.0.0.1 -P 2881 -u root@sys -p******

📖 upgrade_post.py 脚本会完成以下升级动作:

  • 集群级别健康检查。
  • alter system end rolling upgrade
  • 按租户执行begin upgrade
  • 按租户执行系统变量修正。
  • 按租户执行系统表修正。
  • 按租户执行虚拟表/视图修正。
  • 按租户执行版本相关升级动作。
  • 按租户执行内部表自检操作。
  • 按租户结束end upgrade
  • alter system end upgrade:结束集群升级状态。
  • upgrade post check:重新打开升级过程中禁用的部分配置项,并执行检查。

⚠️ 在执行升级脚本upgrade_post.py时,如果出现错误,其原因很可能是RS切主过。可以通过以下步骤进行排查与修复:

  • 可以执行SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE job_type = 'upgrade_all' ORDER BY job_id DESC LIMIT 1;验证升级任务状态。
  • JOB_STATUS显示为inprogress,且MODIFY_TIME为最近时间(与当前时间间隔较短),则可以手动执行一下ALTER SYSTEM RUN UPGRADE JOB 'UPGRADE_ALL';命令解决这个问题。
  • 重新执行升级脚本。

还原集群配置项

基于升级前备份的配置项旧值,使用root用户登录到集群的sys租户,使用以下命令还原相关配置项。

ALTER SYSTEM SET server_permanent_offline_time = '3600s';
ALTER SYSTEM SET enable_rebalance = 'True';
ALTER SYSTEM SET enable_rereplication = 'True';

升级后检查

使用root用户连接sys租户,使用视图查看集群升级相关事件信息。

SELECT * FROM oceanbase.DBA_OB_CLUSTER_EVENT_HISTORY WHERE MODULE='UPGRADE'\G

能看到具体的升级事件(BEGIN_UPGRADE、BEGIN_ROLLING_UPGRADE、END_ROLLING_UPGRADE)和版本变化(cluster_version、build_version)。

:如果在升级前OceanBase集群配置了cgroup,那么在OceanBase集群升级后,需要重新配置cgroup。

References
【1】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016127

http://www.dtcms.com/a/499551.html

相关文章:

  • 深入理解与手写发布订阅模式
  • 关于企业网站建设的必要性关键洞察力
  • ubuntu系统安装记录
  • Flutter---音效模式选择器
  • 信号量 semaphore 机制可实现基于条件变量 condition variable 的管程 monitor 机制
  • 市工商局网站建设情况网页截图快捷键ctrl加什么
  • C++数据类型
  • FFmpeg 核心 API 系列:音频重采样 SwrContext 完全指南(新API版本)
  • 网站建设数据收集方法南昌网站推广¥做下拉去118cr
  • visio画网站开发类图深圳东道建设集团网站
  • 董付国老师Python小屋编程题答案161-170
  • 国外营销企业网站什么叫高端网站定制
  • Flutter---生命周期
  • 百度网址大全网站互联网家装
  • 专业的东莞网站排名WordPress多站点开启多语言
  • 微信端网站开发流程做网站什么配置够用
  • c# 泛型的详细介绍
  • OceanBase的SQL和执行计划监控视图
  • 网站原创内容优化wordpress 网站内跳转
  • 龙口市规划建设局网站南京app开发公司排名
  • 解决 Hugging Face 国内下载慢的问题:用 ModelScope 替代加速模型获取
  • 从基础到深入:自然语言处理核心技术全梳理(有 ML/DL 基础)
  • 合肥建设公司网站wordpress 个人电脑
  • 做网站需要哪些方面的支出新媒体运营需要学什么
  • 云手机群控是什么意思
  • 【ecfw】ecfw构建基础
  • 常州二建建设有限公司官方网站聊城做wap网站哪儿好
  • php做网站需要html国外设计公司名字
  • CUDA nvjpeg库编码jpeg图像
  • AI 工作流实战 - 调用豆包api实现批量生图