乐趣区

关于oceanbase:OceanBase-数据文件缩容实践

本文章介绍了 OceanBase 集群对于数据文件的缩容场景,并提供一种缩容计划予以参考。

作者:关炳文,爱可生 DBA 团队成员,负责数据库相干技术支持,一步两阶梯,兼具怠惰与慵懒。

爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。

本文约 1200 字,预计浏览须要 4 分钟。

缩容场景

此前某银行一套 1-1-1 架构的 OceanBase 集群其中一个节点,OBServer 程序解体时默认生成 core 文件在数据盘 /data/1。个别状况下,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 指定集群启动参数,须要依据理论状况设置。

    • obconfig_url:用于设置 OBConfig 服务的 URL 地址,与原来保持一致。
    • config_additional_dir:用于设置本地存储配置文件的多个目录,为了冗余存储多份配置文件。
    • cluster_id:指定集群 ID,与原来保持一致。
    • datafile_disk_percentage:设置为缩容后所占数据的盘百分比。
    • cpu_count:指定 CPU 个数,与原来保持一致。
    • system_memory:指定 OceanBase 外部保留内存,与原来保持一致。

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 参数须要调大时,能够在集群中进行动静调整,不须要重启集群,调小则不效。

退出移动版