背景
客户670版本超融合集群存储资源不够用,从几台虚拟机组的Hadoop集群上删除了几十TB没用的数据,结果虚拟机里是删除了,df -h查看空间也释放了,结果超融合虚拟存储页面相关数值没有变化,于是一通电话给了我。
什么空间回收?第一次听说?听下来这不应该是基本功能嘛?工作忙,喊来400协助,最后给出结论,670版本不支持,那就升,直接升到当时最新691。升级完让客户按客服告诉的方法:勾选空间回收,mount加discard属性去挂载,客户说悟了,我就没管了;但后来又时不时抛出几个回收空间相关的问题出来,用户手册、在线客服翻来问去就那么几句话,于是喊了几次400,客户操作要窗口,400给了方案就关单溜了;新一年预算下来扩了一台主机,客户不着急,400催着关单,就这样开了几个工单拖了近一个季度也没彻底解决。
本以为就这样不了了之了,这两天客户又找到我,问题还是要解决,再这样来客户满意度不保,得自己上了,经过2天断断续续的测试,踩了一些坑,总算是把问题解决了,总结一下,希望大家能用得上,少走弯路。
处理过程 思路是曲径通幽的幻想,实操是理想主义的终结。 1、注意事项 注意1:linux已有磁盘禁止启用。 注意2:linux新建虚拟机,系统盘禁止启用。 注意3:挂载超过2T的磁盘时不能使用fdisk。(用户手册和在线客服都只找到fdisk的操作。) 注意4:新mount数据盘时需要添加discard属性 注意5:centos7不支持空间回收。(这里对400提出批评,多少次都没给出这张兼容性的表。) - 查看系统版本 cat /etc/os-release
2、操作记录 - 新建了一台centos8.2的虚拟机
- 安装优化工具
- 挂载3T磁盘,勾选空间回收。lsblk能够看到vdb后开始设置分区。 - 设置分区sudo parted /dev/vdb
- 设置分区表类型(parted) mklabel gpt # 对于GPT分区表
- 设置分区大小(parted) mkpart primary xfs 1MiB 3071GiB
- 如果设置错误使用rm 分区号来删除分区再重新设置分区 - 退出分区设置(parted) quit
- 正常分区以后如下图所示 - 格式化分区sudo mkfs.xfs /dev/vdb1 - 新建data1文件夹sudo mkdir /data1
- 挂载磁盘sudo mount -o discard /dev/vdb1 /data1 - 挂载后使用mount命令过滤vdb查看是否存在discard属性
- 防止重启不自动挂载编辑/etc/fstab文件 添加/dev/vdb1 /data1 xfs discard,defaults 0 0
- 使用python写了个脚本在/data1下造了500G数据,ssd+hdd的组合读写基本都在200MB/s(大数据下这个速度实在不够看),df -h看/dev/vdb1行的数据为500G+
- 删除前记录超融合的虚拟存储
- 记录虚拟机存储页面
- 删除造的500G数据后,df -h查看/dev/vdb1行,可见虚拟机内空间已经释放完成
- 等待几分钟后,虚拟机状态页存储正常回收
- 虚拟存储页存储正常回收
总结 1、客户无法完成的原因:兼容性列表在最后实操centos7失败后才出来、操作指导不够清晰 2、实践中发现fdisk的局限性,2T 3、虚拟化环境下,虚拟机删除空间,物理机上不是理所当然的同步空间释放,这里有学问: 虚拟机内删除文件,底层物理存储同步进行空间释放,需要在虚拟机内部下发discard指令,且要满足下面个条件: 1、虚拟机内部文件系统要支持discard特性; ==》windows ntfs文件系统默认可以支持; ==》linux ext3/ext4/xfs需要在挂载时,显式指定-o discard 2、磁盘驱动要支持discard特性 kvm环境下,virtio驱动已支该特性;windows环境需要重新编译virtio_blk驱动。
HCI支持情况 虚拟机里面进行删除操作,触发discard指令,到底层物理存储上真正释放对应的存储空间,涉及IO指令在不同层面的校验和转换,且关系虚拟磁盘数据安全,现有发布版本暂时不支持discard特性; 目前680版本已经可以解决此问题,但是需要先开启空间回收选项 ,虚拟机空间回收功能只对存储在虚拟存储上的虚拟机才生效,且集群主机台数需要大于2台。
|