如何进行数据库缩容 | OceanBase应用实践

作者:关炳文,爱可生 DBA 团队成员,负责数据库相关技术支持。

本文详细介绍了OceanBase V3.2版的集群中,面对数据文件缩容的场景的一套缩容方案,作为大家的参考。

缩容场景

某银行运行的一套采用1-1-1架构的OceanBase集群中,其中一个节点的OBServer程序在崩溃时,默认情况下会在数据盘/data/1中生成core文件。core文件的大小通常等同于程序运行时占用的内存大小,大约为400GB。然而,由于数据盘约90%的空间已预先分配给数据文件(block_file),导致剩余的可用空间不足以存储这样庞大的文件,从而使得/data/1目录被写满,并因此产生了两个问题:

  1. core 文件没写完整,不完整的 core 文件使得对故障原因的分析工作难以进展。
  2. 数据盘被写满,直接导致该节点无法对外业务提供服务。

恢复 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 参数需要调大时,可以在集群中进行动态调整,不需要重启集群,调小则不效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件架构师 PV

PV操作与生产者消费者问题是操作系统中进程管理和同步机制的重要概念。以下是对PV操作以及生产者消费者问题的详细解释: 一、PV操作 PV操作由P操作原语和V操作原语组成,这两个原语是不可中断的过程,它们对信号量进行操作。 P操作&#xff…

首发 | 数据通解决方案:打造数据工程能力,驱动数据价值转化

数据已经成为企业竞争的核心资源。企业要想从海量数据资源中挖掘数据价值并促进价值转换,需要有全新的工程化方法对数据要素资源进行全生命周期管理。 数据工程是一套完整的实现从数据资源到企业价值的系统工程,旨在通过系统性技术与方法,将…

2024.10.16 软考学习笔记

刷题网站: 软考中级软件设计师在线试题、软考解析及答案-51CTO题库-软考在线做题备考工具

vector简单模拟

1.二维vector 下图可以看到vector<int>指向的是几个int型的&#xff0c;而vector<vector<int>>则指向的是几个vector<int>型的内容&#xff0c;而它们又指向几个int型的内容&#xff0c;三维就重复就可以理解。 例题&#xff1a; 可以得到的规律中间(…

Java—继承性与多态性

目录 一、this关键字 1. 理解this 2. this练习 二、继承性 2.1 继承性的理解 2.1.1 多层继承 2.2 继承性的使用练习 2.2.1 练习1 2.2.2 练习2 2.3 方法的重写 2.4 super关键字 2.4.1 子类对象实例化 三、多态性 3.1 多态性的理解 3.2 向下转型与多态练习 四、Ob…

ArmSoM-Sige7 成为首款支持 openSUSE 的 RK3588 设备

随着嵌入式系统和开源软件的不断发展&#xff0c;越来越多的开发者和爱好者对高性能的开发板及其操作系统支持寄予厚望。在这一背景下&#xff0c;ArmSoM-Sige7 凭借其强大的硬件性能和广泛的软件兼容性&#xff0c;成为了市场的关注焦点。令人兴奋的是&#xff0c;ArmSoM-Sige…

linux 配置ssh免密登录

一、 cd /root/.ssh/ #不存在就创建mkdir /root/.ssh ssh-keygen #连续按4个回车 ll二、将公钥发送到目标服务器下 #公钥上传到目标服务器 ssh-copy-id root192.168.31.142 #回车完也是要输入密码的 #测试一下免密登录&#xff1a; ssh root192.168.31.142 成功

spring如何解决bean循环依赖的问题

1、概述 spring中&#xff0c;存在A依赖B&#xff0c;同时B又依赖A的情况&#xff0c;这种情况下&#xff0c;spring如何进行bean初始化呢&#xff1f; Service public class A {Autowiredprivate B b; }Service public class B {Autowiredprivate A a; } 本文来解释这个问题…

Mindustry像素工厂服务器开服教程

1、购买后登录服务器&#xff08;百度莱卡云游戏面板&#xff09; 进入控制面板后会出现正在安装的界面&#xff0c;大约5分钟左右就能安装完成 2、等待服务器运行起来 等待正常运行时间的表变成灰色之后就可以连接游戏了 3、连接游戏 先复制服务器的地址&#xff0c;单击地址…

【fisco学习记录2】多群组搭建

说明 文档参考&#xff1a; 多群组部署 — FISCO BCOS 2.0 v2.11.0 文档 (fisco-bcos-documentation.readthedocs.io) 多群组搭建之前&#xff0c;先暂停之前的单群组&#xff0c;并删除&#xff1a; cd fisco bash nodes/127.0.0.1/stop_all.sh rm -rf nodes/ 实现图&…

又一款国产自动化测试平台,开源了!

“时间就是金钱&#xff0c;效率就是生命”&#xff0c;在当下的社会里不仅我们的生活节奏变得越来越快&#xff0c;软件研发上线的节奏也是如此。在如此快节奏的软件开发环境中&#xff0c;高质量的软件测试变得尤为重要。 为了提高测试的效率和质量&#xff0c;建设一个强大…

小北的技术博客:探索华为昇腾CANN训练营与AI技术创新——Ascend C算子开发能力认证考试(初级)

前言 哈喽哈喽友友们,这里是zyll~(小北)智慧龙阁的创始人及核心技术开发者。在技术的广阔天地里,我专注于大数据与全栈开发,并致力于成为这一领域的新锐力量。通过智慧龙阁这个平台,我期望能与大家分享我的技术心得,共同探索技术的无限可能。 Ascend C编程:小北的技术…

【大数据技术基础 | 实验二】Linux基础:常用基本命令和文件操作

文章目录 一、实验目的二、实验要求三、实验环境四、常用基本命令1、验证cd和pwd命令2、验证ls命令3、验证mkdir命令4、验证cp、mv和rm命令 五、Linux文件操作1、验证touch命令2、验证cat命令3、验证more命令 六、实验心得 一、实验目的 学会linux常用命令(cd,ls,pwd,mkdir,rm…

元器件行业常用软件推荐-加速度JSUDO

元器件行业中&#xff0c;工程师们会使用多种软件来辅助设计、仿真、布局、布线和验证等工作。以下是一些推荐的软件&#xff0c;它们在电子设计自动化&#xff08;EDA&#xff09;和集成电路&#xff08;IC&#xff09;设计领域中被广泛使用&#xff1a; Altium Designer&…

创建包含可导入浏览器信任的SSL自签名证书

问题&#xff1a;现在的三大浏览器&#xff0c;chrome、edge、firefox 一般都默认启用https检查&#xff0c;这就要求我们自建的局域网内的网址和其他诸如nextcloud、photoprism、tiddlywiki等应用也必须要有证书。解决方法是使用openssl自己生成一个。由此则会再衍生出一个问题…

计算机视觉之YOLO算法基本原理和应用场景

YOLO算法基本原理 整体流程 YOLO 将目标检测问题转化为一个回归问题。它将输入图像划分成多个网格单元&#xff0c;每个网格单元负责预测中心点落在该网格内的目标。对于每个网格单元&#xff0c;YOLO 预测多个边界框以及这些边界框中包含目标的类别概率。边界框通常由中心点坐…

(vue)a-upload上传文件后将结果展示图片

&#xff08;vue&#xff09;a-upload上传文件后将结果展示图片 亲测有效 项目背景&#xff1a;油气项目上传数字岩心图片 接口返回 控制台打印的info: 代码 <a-uploadname"file"list-type"picture-card"class"avatar-uploader":show-u…

LabVIEW如何实现高精度定时器

在LabVIEW中实现高精度定时器通常需要考虑以下几个方面&#xff1a;定时器的精度要求、操作系统的调度机制、硬件资源&#xff08;如计时器、触发器&#xff09;等。以下是几种常见的实现方式&#xff1a; ​ 1. 使用 Wait(ms) 或 Wait Until Next ms Multiple VI 这两个函数…

Docker-compose 单节点管理、consul 注册中心、registrator、template

consul是一个基于分布式的服务发现和配置管理工具。它具有快速构建分布式架构&#xff0c;提供服务发现和服务注册功能。consul职能&#xff1a;1、自动发现、注册&#xff1b;2、自动配置&#xff1b;3、自动更新 服务发现&#xff1a;自动检查网络中的服务&#xff08;如数据…

101、QT摄像头录制视频问题

视频和音频录制类QMediaRecorder QMediaRecorder 通过摄像头和音频输入设备进行录像。 注意: 使用Qt多媒体模块的摄像头相关类无法在Windows平台上进行视频录制&#xff0c;只能进行静态图片抓取但是在Linux平台上可以实现静态图片抓取和视频录制。 Qt多媒体模块的功能实现是依…