如何进行数据库缩容 | 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_percentagedatafile_size 参数需要调大时,可以在集群中进行动态调整,不需要重启集群,调小则不效。

相关推荐
GottdesKrieges2 天前
OceanBase主备库日志传输服务
linux·oceanbase
没有bug.的程序员3 天前
ShardingSphere 与分库分表:分布式数据库中间件实战指南
java·数据库·分布式·中间件·分布式数据库·shardingsphere·分库分表
莫薇4 天前
【oceanbase】Oracle模式查看pl慢sql
oceanbase
大数据在线7 天前
安踏集团 X OB Cloud:新零售创新如何有“底”和有“数”
oceanbase·云数据库·新零售·安踏集团·oceanbase cloud
福娃筱欢17 天前
使用 OBD 图形化部署单点OceanBase数据库
oceanbase
福娃筱欢17 天前
使用 OBD 交互式部署单点OceanBase数据库
oceanbase·obd
福娃筱欢17 天前
OB4.X集群状态running但是oceanbase-ce is not running
oceanbase
GottdesKrieges22 天前
OceanBase容量统计:租户、数据库、表大小
数据库·oceanbase
GottdesKrieges23 天前
OceanBase系统日志管理
数据库·oracle·oceanbase
GottdesKrieges1 个月前
obdumper和obloader迁移OceanBase业务库(二):报错与调优
数据库·oceanbase