Skip to content

OceanBase 小版本升级

升级前准备

1. 版本检查

查看当前版本

sql
-- 查看 OceanBase 版本
SELECT * FROM oceanbase.V$OB_VERSION;

-- 查看 OBProxy 版本
obproxy -v

确认目标版本

  • 从 OceanBase 官方网站获取最新的小版本
  • 查看版本发布说明,了解版本变更内容
  • 确认目标版本与当前版本的兼容性

2. 环境检查

集群状态检查

sql
-- 查看集群状态
SHOW CLUSTER STATUS;

-- 查看节点状态
SELECT svr_ip, status, zone FROM oceanbase.GV$OB_SERVERS;

-- 查看分区副本状态
SELECT * FROM oceanbase.GV$OB_PARTITION_REPLICA WHERE status != 'NORMAL';

系统资源检查

sql
-- 查看节点资源使用情况
SELECT svr_ip, cpu_total, cpu_assigned, mem_total/1024/1024/1024 AS mem_total_gb, mem_used/1024/1024/1024 AS mem_used_gb 
FROM oceanbase.GV$OB_SERVERS;

-- 查看磁盘使用情况
SELECT svr_ip, disk_total/1024/1024/1024 AS disk_total_gb, disk_used/1024/1024/1024 AS disk_used_gb 
FROM oceanbase.GV$OB_SERVERS;

3. 数据备份

全量备份

sql
-- 创建全量备份
BACKUP TENANT <tenant-name>;

-- 查看备份状态
SELECT * FROM oceanbase.GV$OB_BACKUP_TASKS WHERE status = 'RUNNING';

备份验证

sql
-- 查看备份集
SELECT * FROM oceanbase.GV$OB_BACKUP_SETS;

-- 验证备份完整性
SELECT * FROM oceanbase.GV$OB_BACKUP_VALIDATION;

4. 升级工具准备

下载升级包

bash
# 从官方网站下载升级包
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-<version>.rpm

# 验证升级包完整性
md5sum oceanbase-ce-<version>.rpm

准备 OBD 工具

bash
# 确保 OBD 版本兼容
obd --version

# 更新 OBD 到最新版本
yum update -y ob-deploy

升级流程

1. 使用 OBD 进行滚动升级

升级前准备

bash
# 查看集群当前状态
obd cluster display <cluster-name>

# 检查升级包兼容性
obd cluster check-upgrade <cluster-name> --target-version <target-version>

执行滚动升级

bash
# 执行滚动升级
obd cluster upgrade <cluster-name> --target-version <target-version> --rollback

# 查看升级进度
obd cluster display <cluster-name>

升级过程监控

bash
# 查看节点升级状态
obd cluster display <cluster-name> --detail

# 查看升级日志
obd cluster logs <cluster-name> observer

2. 手动滚动升级

升级步骤

  1. 暂停业务:如果需要,暂停相关业务
  2. 升级第一个节点
    • 停止节点上的 OceanBase 服务
    • 安装新版本包
    • 启动节点上的 OceanBase 服务
    • 验证节点状态
  3. 升级剩余节点:按照相同的步骤升级剩余节点
  4. 升级 OBProxy:升级 OBProxy 服务
  5. 恢复业务:恢复相关业务

具体操作

bash
# 1. 停止节点服务
obd server stop <server-ip>:<ssh-port> --force

# 2. 安装新版本包
yum localinstall -y oceanbase-ce-<version>.rpm

# 3. 启动节点服务
obd server start <server-ip>:<ssh-port>

# 4. 验证节点状态
obd cluster display <cluster-name> --detail

3. 升级 OBProxy

使用 OBD 升级 OBProxy

bash
# 升级 OBProxy
obd proxy upgrade <proxy-name> --target-version <target-version>

# 验证 OBProxy 版本
obproxy -v

手动升级 OBProxy

bash
# 1. 停止 OBProxy 服务
sudo systemctl stop obproxy

# 2. 安装新版本包
yum localinstall -y obproxy-<version>.rpm

# 3. 启动 OBProxy 服务
sudo systemctl start obproxy

# 4. 验证 OBProxy 状态
sudo systemctl status obproxy

升级后验证

1. 集群状态验证

基本状态检查

sql
-- 查看集群状态
SHOW CLUSTER STATUS;

-- 查看节点状态
SELECT svr_ip, status, zone, build_version FROM oceanbase.GV$OB_SERVERS;

-- 查看 OBProxy 状态
obproxy -s status

分区副本状态检查

sql
-- 查看分区副本状态
SELECT * FROM oceanbase.GV$OB_PARTITION_REPLICA WHERE status != 'NORMAL';

-- 查看分区平衡状态
SELECT * FROM oceanbase.GV$OB_PARTITION_BALANCE_STATUS;

2. 业务验证

基本功能验证

sql
-- 执行基本 SQL 操作
SELECT 1;

-- 创建测试表并插入数据
CREATE TABLE test_upgrade (id INT PRIMARY KEY, name VARCHAR(100));
INSERT INTO test_upgrade VALUES (1, 'test');
SELECT * FROM test_upgrade;
DROP TABLE test_upgrade;

业务功能验证

  • 验证核心业务功能是否正常
  • 验证业务性能是否符合要求
  • 验证业务数据是否完整

3. 性能验证

性能测试

bash
# 使用 sysbench 进行性能测试
sysbench oltp_read_write --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=<db> --tables=10 --table-size=1000000 prepare
sysbench oltp_read_write --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=<db> --tables=10 --table-size=1000000 --threads=64 --time=300 run

性能监控

  • 监控 CPU、内存、磁盘和网络使用率
  • 监控 QPS、TPS 和响应时间
  • 监控慢查询数量

升级失败处理

1. 升级失败原因分析

查看升级日志

bash
# 查看 OceanBase 日志
tail -f /home/admin/oceanbase/log/observer.log

# 查看 OBD 升级日志
obd cluster logs <cluster-name> observer

常见失败原因

  • 版本兼容性问题
  • 资源不足
  • 网络连接问题
  • 配置错误
  • 数据不一致

2. 回滚操作

使用 OBD 回滚

bash
# 执行回滚操作
obd cluster rollback <cluster-name>

# 查看回滚进度
obd cluster display <cluster-name>

手动回滚

  1. 停止当前节点服务
  2. 卸载新版本包
  3. 安装旧版本包
  4. 启动节点服务
  5. 验证回滚结果

3. 问题修复

修复升级失败问题

  • 根据日志分析结果,修复升级失败的问题
  • 调整升级策略,重新执行升级
  • 寻求 OceanBase 技术支持

常见问题(FAQ)

Q1: 小版本升级是否需要停机?

A1: 小版本升级通常可以实现滚动升级,不需要整体停机。滚动升级时,每次只升级一个节点,其他节点继续提供服务,从而实现零停机或近零停机升级。

Q2: 小版本升级需要备份数据吗?

A2: 是的,小版本升级前必须备份数据。虽然小版本升级风险较低,但仍然存在升级失败的可能,备份数据可以确保在升级失败时能够恢复数据。

Q3: 如何选择合适的升级时间?

A3: 选择合适的升级时间需要考虑以下因素:

  • 业务低峰期:选择业务负载较低的时间进行升级
  • 维护窗口:确保有足够的时间完成升级和验证
  • 团队可用性:确保升级期间有足够的运维人员在场
  • 回滚时间:确保有足够的时间在升级失败时进行回滚

Q4: 升级后如何验证集群状态?

A4: 升级后验证集群状态的方法:

  • 查看集群整体状态是否正常
  • 查看所有节点状态是否正常
  • 查看分区副本状态是否正常
  • 执行基本的 SQL 操作验证功能
  • 验证业务功能是否正常

Q5: 升级失败时如何快速回滚?

A5: 升级失败时快速回滚的方法:

  • 使用 OBD 提供的回滚功能,快速回滚到升级前的版本
  • 如果使用手动升级,卸载新版本包,安装旧版本包,重启服务
  • 回滚后验证集群状态和业务功能
  • 分析升级失败原因,修复问题后重新尝试升级