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

相关推荐
OceanBase数据库官方博客1 天前
半连接转内连接 | OceanBase SQL 查询改写
sql·oceanbase·分布式数据库
OceanBase数据库官方博客1 天前
解析在OceanBase创建分区的常见问题|OceanBase 用户问题精粹
oceanbase·分布式数据库·分区
OceanBase数据库官方博客1 天前
半连接转内连接规则的原理与代码解析 |OceanBase查询优化
sql·oceanbase·分布式数据库
IT培训中心-竺老师4 天前
OceanBase 数据库分布式与集中式 能力
数据库·分布式·oceanbase
靖顺4 天前
【OceanBase 诊断调优】—— OceanBase 数据库网络速率配置方案
网络·数据库·oceanbase
尚雷558012 天前
OceanBase 社区版 4.0 离线方式升级bp1至bp2 指南(含避坑总结)
oceanbase
五月高高12 天前
Linux部署oceanbase
linux·oceanbase
靖顺15 天前
【OceanBase 诊断调优】—— 统计信息自动收集超时导致的估行不准 SQL 选择错索引
数据库·sql·oceanbase
it界的哈士奇16 天前
Oceanbase离线集群部署
oceanbase