如何进行数据库缩容 | OceanBase应用实践
作者:关炳文,爱可生 DBA 团队成员,负责数据库相关技术支持。
本文详细介绍了OceanBase V3.2版的集群中,面对数据文件缩容的场景的一套缩容方案,作为大家的参考。
缩容场景
某银行运行的一套采用1-1-1架构的OceanBase集群中,其中一个节点的OBServer程序在崩溃时,默认情况下会在数据盘/data/1中生成core文件。core文件的大小通常等同于程序运行时占用的内存大小,大约为400GB。然而,由于数据盘约90%的空间已预先分配给数据文件(block_file),导致剩余的可用空间不足以存储这样庞大的文件,从而使得/data/1目录被写满,并因此产生了两个问题:
- core 文件没写完整,不完整的 core 文件使得对故障原因的分析工作难以进展。
- 数据盘被写满,直接导致该节点无法对外业务提供服务。
恢复 OBServer 服务之后,经过与项目组讨论,决定 采取给该集群的数据文件进行缩容至数据盘总大小的 80% ,避免日后故障复现时发生同样情况。
本文内的图片以及代码中展示的服务器信息(IP 地址、集群名、租户名),为个人搭建的模拟环境所用,仅用于辅助说明具体步骤。
缩容操作
版本信息
- OBServer 版本:3.2.3
- OCP 版本:3.3.3
相关参数
datafile_size
用于设置数据文件的大小。如果想要缩减 datafile_size,可以将这个节点从集群中删除,重建这个节点,集群当前值为 0。
datafile_disk_percentage
表示占用 data_dir 所在磁盘总空间的百分比,集群当前值为 90。
1 调整参数
集群->参数管理,调整 datafile_disk_percentage 的值为 80,即 block_file 占盘比例为 80%。

2 缩减租户副本
集群->租户管理,选择租户(包括 sys 租户)在副本详情中选中 zone 删除副本(例:zone3),等待任务结束。

3 下线 OBServer
集群->总览,OBServer 列表中删除 zone3 的 OBServer,相当于在该节点卸载 OBServer 服务,等待任务结束。

4 上线 OBServer
此时该节点的 OceanBase 安装包被卸载了,相关目录空间也被清空了。如果要重新使用该 OBServer 上线,需要安装 OceanBase 的 RPM 包,并初始化相关目录等操作。
由于 OCP 目前(3.3.3 版本)还做不到启动 OBServer 进程时另外指定参数,因此这一步使用黑屏命令行操作。
4.1 安装 RPM 包
使用 root 用户。
rpm -ivh oceanbase-3.2.3.3-107050022023040817.el7.x86_64.rpm
4.2 初始化目录
使用 admin 用户。
export cluster_name=sit mkdir -p /data/1/$cluster_name/{etc3,sort_dir,sstable}
mkdir -p /data/log1/$cluster_name/{clog,etc2,ilog,slog,oob_clog}
mkdir -p /home/admin/oceanbase/store/$cluster_name chown -R admin:admin /data/1/$cluster_name && chown -R admin:admin /home/admin/oceanbase && chown -R admin:admin /data/log1/$cluster_name for t in {etc3,sort_dir,sstable};do ln -sf /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
for t in {clog,etc2,ilog,slog,oob_clog}; do ln -sf /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
4.3 指定参数启动 OBServer 进程
使用 admin 用户。
cd /home/admin/oceanbase
ulimit -s 10240 ##堆栈的最大值
ulimit -c unlimited ##当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),这种文件就被称为核心文件(core file)
启动 OBServer 进程。
cd /home/admin/oceanbase/bin/observer -i eth0 -p 2881 -P 2882 -n sit -z zone3 -d /home/admin/oceanbase/store/sit -r '10.186.65.8:2882:2881;10.186.65.123:2882:2881;10.186.65.56:2882:2881' -l info -o 'obconfig_url=http://10.186.65.11:8080/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=ocpmaster&ObRegion=sit,config_additional_dir=/data/1/sit/etc3;/data/log1/sit/etc2,cluster_id=16777777,datafile_disk_percentage=80,cpu_count=16,system_memory=5G'
参数参考值:
-i指定网卡名,可通过ifconfig命令查看。-p指定服务端口号,一般指定为 2881。-P指定 RPC 端口号,一般指定为 2882。-n指定集群名称,与原来保持一致。-z指定启动的 OBServer 进程所属的 Zone,与原来保持一致。-d指定集群主目录,除集群名字,其他不要变动。-r指定 RS 列表,可通过查看当前集群 rootservice_list 参数。-l指定日志级别,默认为 INFO,即只有 INFO 及以上级别的日志数据才会打印到observer.log 、election.log 和 rootservice.log 日志文件中。-o指定集群启动参数,需要根据实际情况设置。
4.4 登录集群 sys 租户,添加 OBServer
alter system add server '10.186.65.56:2882' zone 'zone3';

OCP 集群总览页刷新出 OBServer 列表。
4.5 其它副本操作
重复上述步骤,逐一缩减租户副本,下线/上线其它 OBServer,并补齐租户副本。到此,OceanBase 对数据盘 /data/1 的 block_file 缩容已完成。
4.6 重启集群
最后,重启集群,验证集群是否正常运行。
总结
本次数据文件缩容操作相当于在集群每个节点重装 OBServer 服务,在生产环境具有一定风险,建议做好备份工作。因此在本文相同故障场景下,优先考虑本地是否存在其他磁盘空间(NFS 挂载盘传输存在网络限制,暂不考虑)可用于存放 core 文件并修改其生成路径。
另外,datafile_disk_percentage 与 datafile_size 参数需要调大时,可以在集群中进行动态调整,不需要重启集群,调小则不效。
相关文章:
如何进行数据库缩容 | OceanBase应用实践
作者:关炳文,爱可生 DBA 团队成员,负责数据库相关技术支持。 本文详细介绍了OceanBase V3.2版的集群中,面对数据文件缩容的场景的一套缩容方案,作为大家的参考。 缩容场景 某银行运行的一套采用1-1-1架构的OceanBase…...
机器学习和深度学习的差别
定义和基本原理 机器学习: 定义:机器学习是一种让计算机自动从数据中学习规律和模式的方法,无需明确编程。它通过构建数学模型,利用已知数据进行训练,然后对新的数据进行预测或决策。基本原理:机器学习算…...
RAG拉满-上下文embedding与大模型cache
无论怎么选择RAG的切分方案,仍然切分不准确。 最近,anthropics给出了补充上下文的embedding的方案,RAG有了新的进展和突破。 从最基础的向量查询,到上下文embedding,再到rerank的测试准确度都有了明显的改善…...
前端学习---(2)CSS基础
CSS 用来干什么? CSS 是用来指定文档如何展示给用户的一门语言——如网页的样式、布局、等等。 css语法: 选择器{ 属性名: 属性值; 属性名: 属性值; } h1 {color: red;font-size: 5em; }h1: 选择器 color: 属性 冒号之前是属性,冒号之后是值。 font-size…...
Pandas常用计算函数
目录 排序函数 nlargest函数 nsmallest函数 sort_values函数 df.sort_values Series.sort_values 聚合函数 corr函数-相关性 min函数-最小值 max函数-最大值 mean函数-平均值 sum函数-求和 count函数-统计非空数据 std函数-标准偏差 quantile函数-分位数 排序函…...
C++ | Leetcode C++题解之第473题火柴拼正方形
题目: 题解: class Solution { public:bool makesquare(vector<int>& matchsticks) {int totalLen accumulate(matchsticks.begin(), matchsticks.end(), 0);if (totalLen % 4 ! 0) {return false;}int len totalLen / 4, n matchsticks.s…...
深度解析RLS(Recursive Least Squares)算法
目录 一、引言二、RLS算法的基本思想三、RLS算法的数学推导四、RLS算法的特点五、RLS算法的应用场景六、RLS算法的局限性七、总结 一、引言 在自适应滤波领域,LMS(Least Mean Squares)算法因其计算简单、实现方便而广受欢迎。然而࿰…...
Centos 7.9NFS搭建
原创作者:运维工程师 谢晋 Centos 7.9NFS搭建 NFS服务端安装客户机访问共享配置 NFS服务端安装 SSH连接系统登录到服务端安装nfs服务 # yum -y install nfs-utils2. 安装完成后,查看需要共享的目录,这边共享的是/home目录,如…...
Python库numpy之三
Python库numpy之三 # NumPy数组创建函数二维数组创建函数numpy.eye应用例子numpy.diag应用例子numpy.vander应用例子 # NumPy数组创建函数 二维数组创建函数 numpy.eye 词法:numpy.eye(N, MNone, k0, dtype<class ‘float’>, order‘C’, *, deviceNone, …...
postgresql 安装
一、下载 PostgreSQL: File Browser 下载地址 PostgreSQL: File Browser 上传到服务器,并解压 二、安装依赖 yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel 创建postgresql 和目录 useradd …...
基于机器学习的天气数据分析与预测系统
天气预报是日常生活中非常重要的信息来源,能够帮助人们合理安排日程、预防自然灾害。随着数据科学和机器学习的快速发展,传统的天气预报方法逐渐向基于数据驱动的机器学习方法转变。本文将探讨如何构建一个基于机器学习的天气数据分析与预测系统…...
Java项目-基于Springboot的在线外卖系统项目(源码+说明).zip
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
ANSYS Workbench纤维混凝土3D
在ANSYS Workbench建立三维纤维混凝土模型可采用CAD随机几何3D插件建模后导入,模型包含球体粗骨料、圆柱体长纤维、水泥砂浆基体等不同组分。 在CAD随机几何3D插件内设置模型参数后运行,即可在AutoCAD内建立三维纤维混凝土模型,插件支持任意…...
【Vue】Vue3.0(十)toRefs()和toRef()的区别及使用示例
上篇文章:Vue】Vue(九)OptionsAPI与CompositionAPI的区别 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年10月15日11点13分 文章目录 toRefs()和toRe…...
中科星图(GVE)——使用随机森林方法进行土地分类
目录 简介 函数 gve.Classifier.smileRandomForest(numberOfTrees,variablesPerSplit,minLeafPopulation,bagFraction,maxNodes,seed) 代码 结果 简介 使用随机森林方法进行土地分类的步骤如下: 数据准备:收集所需的土地分类数据,并对数…...
【蓝队技能】【C2流量分析】MSFCSSliver
蓝队技能 MSF&CS&Sliver 蓝队技能总结前言一、MSF1.1 流量分析1.2 特征提取 二、CS1.1 流量分析1.2 特征提取 二、Sliver1. 特征分析 总结 前言 不同C2工具的流量特征都有细微差别,学会分析方法后就可以进行分析 一、MSF 1.1 流量分析 MSF流量特征过于明显…...
不推荐使用Scilab作为MATLAB的开源替代
安装了Scilab2024.1.0,随便试了几分钟就发现有严重影响使用的Bug(也可能是就是这样设计的,有一个所谓的“暂停模式”),复现步骤:主界面上点击“Scilab示例”按钮,打开“演示”窗口,点击左侧列表中的“多项式…...
C++智能指针及其应用
C11之后出现了 shared_ptr 和 unique_ptr,这两个类都是基于RAII技术进行设计的 RAII 利用对象生命周期来控制程序资源(如内存,文件句柄,网络连接,互斥量等资源)的技术,具体地说,就是…...
06 算法基础:算法的定义、表现形式(自然语言、伪代码、流程图)、五个特性(有穷性、确定性、可行性、输入、输出)、好算法的设计目标
目录 1 算法的定义 2 算法的三种表现形式 2.1 自然语言 2.2 伪代码 2.3 流程图 3 算法的五个特性 3.1 有穷性 3.2 确定性 3.3 可行性 3.4 输入 3.5 输出 4 好算法的设计目标 4.1 正确性 4.2 可读性 4.3 健壮性 4.4 通用性 4.5 高效率与低存储量 1 算法的定义 …...
【红外传感器】STM32C8T6标准库使用红外对管
好好学习,天天向上 前言一、了解红外二、标准库的代码1.infrared.c2.infrared.h3.main.c4 现象 总结 前言 红外线:频率介于微波与可见光之间的电磁波。 参考如下 【STM32】标准库与HAL库对照学习教程外设篇–红外避障传感器 光电红外传感器详解&#…...
告别ns3-gym!用ns3-ai在Ubuntu 22.04上实现百倍速AI网络仿真(附完整避坑指南)
告别ns3-gym!用ns3-ai在Ubuntu 22.04上实现百倍速AI网络仿真(附完整避坑指南) 如果你正在使用ns3-gym进行AI网络仿真研究,很可能已经遇到了通信效率低下的瓶颈。传统基于Socket的进程间通信(IPC)方式在大量…...
双非逆袭!25年兰大计算机专硕上岸率超84%,我的跨考保姆级攻略(含806专业课避坑指南)
双非逆袭!25年兰大计算机专硕上岸率超84%,我的跨考保姆级攻略(含806专业课避坑指南) 作为一名本科双非院校的跨考生,我在2025年成功上岸兰州大学计算机专硕。这一年,兰大计算机专硕的一志愿上岸率高达84.1%…...
Python新手必看:彻底搞懂 | ^的二进制运算原理(图解版)
Python新手必看:彻底搞懂& | ^的二进制运算原理(图解版) 在编程的世界里,二进制运算就像是一把打开计算机底层逻辑的钥匙。对于Python初学者来说,理解&、|、^这些位运算符的工作原理,不仅能帮助你写…...
CSS 动画高级技巧:创建流畅的用户体验
CSS 动画高级技巧:创建流畅的用户体验掌握 CSS 动画的高级技巧,创建流畅、引人入胜的用户体验。一、动画基础回顾 作为一名追求像素级还原的 UI 匠人,我对 CSS 动画有着深入的研究。CSS 动画是现代前端开发的重要组成部分,它可以为…...
代码之外周刊(第期):当技术让一切趋同,我们还剩什么?渭
1. 前言 本文详细介绍如何使用 kylin v10 iso 文件构建出 docker image,docker 版本为 20.10.7。 2. 构建 yum 离线源 2.1. 挂载 ISO 文件 mount Kylin-Server-V10-GFB-Release-030-ARM64.iso /media 2.2. 添加离线 repo 文件 在/etc/yum.repos.d/下创建kylin-local…...
别再对着黑乎乎的标签图发愁了!手把手教你给农业大棚遥感数据集上色(附Python代码)
农业大棚遥感数据可视化:用Python给黑白标签注入色彩生命 当你第一次打开农业大棚遥感数据集的标签文件时,那片漆黑是否让你感到困惑?作为一名刚接触遥感图像分割的开发者,我完全理解这种挫败感——你明明知道这些像素值代表着不同…...
忍者像素绘卷:天界画坊Anaconda虚拟环境配置与依赖管理
忍者像素绘卷:天界画坊Anaconda虚拟环境配置与依赖管理 1. 为什么需要独立环境 在开始忍者像素绘卷的开发或训练前,创建一个独立的Python环境是至关重要的。想象一下,如果你把各种颜料都混在一个调色盘里,下次使用时颜色就会变得…...
告别手动分析!用Frida-Trace一键追踪Android App的JNI函数调用(附实战APK)
高效追踪JNI函数:Frida-Trace在Android逆向工程中的实战应用 逆向工程师和安全研究员们常常需要面对一个现实问题:如何在有限的时间内快速理解一个未知Android应用的Native层行为?传统方法往往需要手动分析so文件、设置断点、逐行跟踪&#…...
主线程没卡但ANR了?揭秘Android SharedPreferences的ANR陷阱
主线程没卡但ANR了?揭秘Android SharedPreferences的ANR陷阱 在Android开发中,ANR(Application Not Responding)问题一直是开发者头疼的难题。特别是当应用主线程看似运行正常,却突然弹出ANR对话框时,这种&…...
OpenTSDB查询语言完全指南:从基础查询到高级聚合操作
OpenTSDB查询语言完全指南:从基础查询到高级聚合操作 【免费下载链接】opentsdb A scalable, distributed Time Series Database. 项目地址: https://gitcode.com/gh_mirrors/op/opentsdb OpenTSDB是一个可扩展的分布式时间序列数据库,专为处理大…...
