APP下载

Thin LUN磁盘空间回收问题

2019-08-28四川赖文书

网络安全和信息化 2019年8期
关键词:磁盘脚本使用率

■ 四川 赖文书

编者按:笔者单位在启动业务上云后,对原有提系统及设备进行了更新部署,其中采用的H3C ONEStor存储系统出现磁盘空间报警问题,笔者联合厂商工程师专家进行了排查。

图1 OSD磁盘使用率

笔者单位在IDC机房的服务器实施了虚拟化与云计算。整个云平台由6台惠普ProLiant DL580 Gen9高配服务器,单台配置为512G内存、4棵12核心CPU、2块600G的 SAS盘、3块 2T的SATA盘、2块 480G的 固 态盘,安装部署了新华三公司的云计算管理平台和分布式存储系统,由CAS(Cloud Automation System)和ONEStor构成。

ONEStor存储系统基于Ceph,可运行在多台通用的x86服务器。ONEStor通过把多台不同服务器的本地硬盘组织成一个统一的存储资源池,对上层应用提供存储服务。

分布式存储磁盘空间报警

每台服务器2块600GB的SAS盘安装CVK和ONEStor软 件,3块2TB的SATA盘提供分布式存储服务,组成存储资源池WAIC_POOL1可用空间32.7TB,划分为两个3TB和一个4.8TB的块设备,两块共7.8TB以iscsi挂载到宿主机作为共享存储,格式化为ocfs2集群文件系统用于存放虚拟机的磁盘文件,3TB挂载到1台虚机提供NFS服务用于存放应用系统的非结构化数据。

经过一年多的运行,期间的虚拟机不断调整,涉及到块设备上虚拟机磁盘文件新建和删除,ONEStor磁盘空间不断增长使用率达到了71%,管理页面出现了报警提示存储扩容。

与厂商工程师沟通中知道,ONEStor配置了当单磁盘使用率占到70%时,开始报警以提醒及时扩容;在使用率达到95%时无法读写操作必须扩容才能继续使用。运维中发现单盘使用率在64%至79%如图1,经厂商确认ONEStor数据在不同磁盘分布15%浮动属正常情况。

图2 ceph寻址示意图

我们使用的ONEStor R0317P05的Ceph版 本0.94.5,是2015年4月发布的hammer长期稳定版本。Ceph把客户端数据FILE保存为存储池内的对象(FILE->OBJECT映射),通过CRUSH(Controlled Replication Under Scalable Hashing)算法计算数据存储位置来确定如何存储和检索, 即计算出哪个归置组PG(Placement Group)应该持有指定的对象 (Object->PG映 射 ),然后进一步计算出哪个 OSD(Object Storage Device)守护进程持有该归置组(PG->OSD映射),具体的寻址示意图如图2所示。

Ceph提供的块设备RBD(RADOS Block Device)是精简 置 备(Thin Provision)、大小可调且将数据条带化存储到集群内的多个OSD,并 利 用 RADOS(Reliable Autonomic Distributed Object Store)的多种能力,如快照、复制和一致性。块设备使用内核模块或librbd库与OSD交互。当在块设备的文件系统中删除一个文件,并不会在块设备上的对应磁盘块置0,而仅在磁盘的元数据结构中将这些磁盘块标记为未使用。

因此,虽然文件系统知道这些磁盘块是未使用或者说可用的,但是底层的存储系统并不知道文件系统所做的操作,会认为这些磁盘块仍在使用。也就是说,它所占用objects会随着用户写入数据的增加而增加。当用户删除数据以后,这些obejct不再使用但并没有被释放,因为从Ceph的角度讲,它并不知道文件系统中发生的事情。这也正是我们经历多次磁盘文件清理,ONEStor磁盘使用率仍然是只增不降的原因。

针对我们ONEStor报警的情况,无法进行存储的优化改造,我们目前也没有扩容的预算,可考虑对于删除空间进行释放(文件系统),将存储侧的LUN占用空间收缩降低,以保障系统和业务运行的稳定性。

采用的方法是用fstrim命令对使用的存储进行空间释放,向存储侧发送SCSI指令。由于该操作对存储有一定的IO性能影响,应考虑实际业务繁忙情况谨慎操作。对于空间的释放,一般采用fstrim直接对于mount point进行操作即可达到空间释放的目的,某些情况下,由于之前划分的LUN空间大,需要释放的空间大的原因,分段进行fstrim对于集群文件系统带来更好的优势,能降低持有集群锁的时间,从而提高系统管理效率和降低业务的影响。默认的fstrm指令,如果没有指定参数,则不分段进行;其实fstrim是支持分段操作的,并可以指定相关的参数。

方案

按照公司信息系统变更流程,需要对ONEStor分布式存储空间释放的方案进行评估,于是要求厂商给出实施方案。由于此操作属于Ceph分布式存储和具有精简置备特性存储的常规操作,没有任何风险只能提供操作手册。

我们也在华为官方查询到存储也有类似操作手册,详见网址https://support.huawei.com/enterprise/zh/knowledge/EKB1000091882,该文还提供了其他处理方法,但由于软件部门的领导不了解这些情况,十分担心该操作影响应用系统的稳定运行,对此项配置要求严格按操作手册执行,防止出现误操作。

对于ONEStor磁盘空间释放的操作,新华三CAS提供了对于Linux系统自带fstrim命令行进行了封装的脚本,采用参数对于fstrim的操作进行配置如自动分段和偏移等;并结合CAS的使用可指定具体的存储池,指定blocklimit、存储的厂商等,从而适应于集群文件系统下的释放和优化处理,规避由于空间释放对于集群和业务的影响。

1.存储空间释放脚本的使用范围

存储侧需要Thin(精简置备)模式分配的LUN(Logical Unit Number),如果Full模式分配,则无法进行空间释放和回收;同时需要存储侧支持释放的特性。ONEStor R0118版本以前(不含R0118)默认配置下存储卷默认是full模式,不支持fstrim释放。CAS需要版本在E0306之后的版本上执行,不推荐在此版本之前的版本上执行。

2.手工执行步骤和说明

考虑到fstrim对于io有一定的性能影响,在可释放空间少和执行频率少的情况下,可考虑手工执行脚本,如下是手工操作和配置的处理方法和步骤;

(1)在CVM管理界面上确认释放空间的存储池找到存储池 WAIC-POOL1。

(2) 在“云 资 源→Cluster集群→存储管理”部分,找到使用存储池的主机列表。

(3)通过SSH连到一台CVK上,执行命令:

o2cb_ctl -Iot node

#name:cluster:number:ip_address:ip_port:status

WAIC-CVK05:WAIC-POOL1:1:192.50.2.5:7100:confi gured

WAIC-CVK01:WAIC-POOL1:2:192.50.2.1:7100:confi gured

WAIC-CVK03:WAIC-POOL1:3:192.50.2.3:7100:confi gured

WAIC-CVK04:WAIC-POOL1:4:192.50.2.4:7100:confi gured

WAIC-CVK02:WAIC-POOL1:5:192.50.2.2:7100:confi gured

WAIC-CVK06:WAIC-POOL1:6:192.50.2.6:7100:confi gured

找到存储池WAIC-POOL1是活动、且number数字最小的那台主机。WAIC-POOL1在 number :1、2、3、4、5、6、7、8的主机上是激活状态,对应的主机名称是:WAIC-CVK05、WAIC-CVK01、WAIC-CVK03、WAIC-CVK04、WAIC-CVK02、WAIC-CVK06;则找到的主机WAIC-CVK05。

(4)将脚本压缩包文件pool_fstrim.tar.gz传 到WAIC-CVK05主机上。

如果后面脚本中指定参数-c,表示在集群中任何一台激活的存储池的主机上都可以执行,这样就省去了步骤3和4,直接选择一台存储池是活动的主机上执行脚本即可。

(5)对系统原有/opt/bin目录进行备份:

图3 观察日志输出

cd /opt; cp -r bin bin.bak.A

(6)解压脚本压缩包文件并将脚本复制到/opt/bin目录:

tar zxvf pool_fstrim.tar.gz

cp ocfs2_pool_fstrim.pyc /opt/bin

(7)使用脚本ocfs2_pool_fstrim.pyc释放Thin块存储空间。

对于onestor存储进行操作:采用脚本对于存储池进行释放,下面命令中参数-o表示从20G开始,参数-l表示每次20G扫描,参数-b表示处理磁盘块限制为32768:

python /opt/bin/ocfs2_pool_fstrim.pyc -s onestor -p WAIC-POOL1 -l 20480 -o 20480 -b 32768;echo $?

该脚本同时支持对3par存储的thin LUN进行空间回收,类型为 3PARdata,-s参数需要指定3PARdata:

python /opt/bin/ocfs2_pool_fstrim.pyc -s 3PARdata -p WAIC-POOL1 -l 20480 -o 20480 -b 32768;echo $?

脚本增加参数-c,以便在任何一台激活的存储池的主机上都可以执行该操作:

python /opt/bin/ocfs2_pool_fstrim.pyc -s onestor -p APool -l 20480-o 20480 -b 32768 -c;echo $?

默认长度10G,10T的执行1000次可以满足需求;如果现场磁盘比较大,执行长度可放大到20G,或50G。

3.手工执行异常判断和应急处理

脚 本ocfs2_pool_fstrim.pyc在实验室和其他地方执行,都没有发现异常的情况;为了预防执行过程中的异常情况,厂商提供了手工执行的异常判断和应急处理方法。

在脚本运行过程中,需另外开启两个SSH后台窗口,第一个SSH后台执行 命 令:tailf /var/log/syslog |grep maximum,实时监控syslog日志信息,正常释放过程中,每次分段都会打印释放动作的日志,如图3属于正常现象,一直在刷类似日志kernel.: [10907115.xxxxxx] (fstrim,381xxxx.xx) :ocfs2_get_maximum_unrnap_count :7360 content of block_lirnits.conf is: 32768,就不存在阻塞;如果不刷此类日志需要及时关注,此时可能已经阻塞需要立刻暂停,暂停操作在执行脚本的SSH窗口Ctrl+C暂停命令执行。

第二个SSH终端执行命令:tailf /var/log/syslog| grep _ocfs2_cluster_lock.isra,正常情况该窗口不会有任何输出。若有输出则表示集群文件系统ocfs2的磁盘集群被锁,则立即Ctrl+C停止命令行的执行,并且缩小每次分段执行的长度,直到不再出现为止。

4.配置定时执行

图4 ONEStor最终使用率

若在Ceph块设备上有比较频繁的创建和删除文件,造成分布存储系统磁盘使用率持续增高,可配置ocfs2_pool_fstrim.pyc脚本的定时自动运行,以及时释放已删除文件所占用的磁盘空间。第一步在每个CVK上执行“ocfs2_fstrim_crontab.sh on”命令;第二步在每台cvk上配置crtontab定时执行任务。配置每周五22点开始执行具体命令如下,默认对所有ONEStor存储池,每次执行长度默认区间是10G:

0 22 * * 5 root python /opt/bin/ocfs2_pool_fstrim.pyc -s onestor -b 131072

对于配置了脚本定时执行,需要定期在使用共享存储的节点号最小的那台cvk服务器上检查相关日志,以了解自动任务的执行情况,搜索查找结点好最小的方法,详细参照手工执行步骤的第3步。

实施

根据操作手册的要求为避免资源释放操作对业务性能的影响,计划将此项工作放在周六晚上进行,通知相关软硬件运维同事和厂商工程师。由于实施的工程师对笔者单位云平台结构不熟悉,实施前远程对该套服务器进行相关数据采集,并且将要运行的脚本在厂商的测试环境验证,以保障磁盘空间释放的有效推进。

周六晚上7点通过Teamvear远程准时进行,由于前期的精心准备和领导的高度重视,实际操作就按步就班,对操作命令进行复制粘贴,密切观察日志输出一切正常,ONEStor管理页面中的运行状态如期调整中,经过近2小时的工作顺利完成任务。最终分布式存储的利率为61.87%如图4,释放了总容量10%接近3.2TB磁盘空间,按照三副本计算又可以提供1TB的块存储了。

总结

为了更好的运维公司私有云平台,我们需要更深入的学习KVM虚拟化及OpenStack云计算、Ceph分布式存储等开源软件,才能非常清楚厂商工程师所做的操作,也才能对于常见问题自己动手处理,同时不断提高自我的技术水平。

猜你喜欢

磁盘脚本使用率
内蒙古自治区病床使用率预测及其影响因素分析
它的好 它的坏 详解动态磁盘
解决Windows磁盘签名冲突
2018年中国网络直播用户规模为3.97亿
自动推送与网站匹配的脚本
Windows系统下动态磁盘卷的分析与研究
基于服务学习方法提高青少年安全带使用率
克隆硬盘很简单
举一反三新编
愚公移山