作者:田逸(formyz)
场景描述
五节点Proxmox VE集群,万兆网络,数据网络与存储网络独立,接口两两bond,交换机堆叠。
单机配置两颗AMD 宵龙CPU,核心数48,单台线程数192,单台内存1024G。
存储分三种:SATA接口SSD,做系统盘;NVME 固态盘,做虚拟机与数据库的Ceph Pool;大容量低速SATA机械盘,做要求不太高的对象Ceph Pool。
计划中,像日志、图片等需要共享的数据,在Proxmox VE集群上创建虚拟机,从SATA Ceph Pool划分空间,以NFS服务共享给其他的主机。
性能问题描述
基础环境部署好以后交付给相关开发人员,有人从腾讯云拉取了一个400M左右的tgz压缩包,将其解包到挂接的NFS目录,速度非常慢,得几十分钟,尝试多次也是如此。将其换到本地目录(NVME Ceph Pool存储),耗时数秒。虽然我用dd测试NFS挂接目录、用scp远程拷贝大文件到nfs挂接目录,速度都还可以接受,建议用户本地目录tar,再cp到挂接来的共享目录。但用户认为,既然tar一个400M的包都那么费时,别的也可能不靠谱,不肯接受。
排查处理过程
首先登录到挂接NFS共享目录的系统,执行如下指令,复现一下tar解包的耗时。
[root@mysql-p-122-120 ~]# time tar zxvf 29.tgz -C /mnt/nfs/ --no-same-owner |
从感官上都觉得很慢,因为屏幕滚动一顿一顿的,很久都没有结束,暂时ctrl-c结束进程,吧这个tar到本地目录,10几秒而已。
一干到底,继续执行tar到共享目录,看到底耗时多少,很久很久以后,终于正常结束了,耗时很恐怖!
怀疑是Centos系统的问题,换OpenSuse,慢!换TrusNAS,仍然慢啊!由于需要尽快把业务从公有云迁移到自有Proxmox VE集群,压力很大。于是临时找了一个安装了Debian系统的外部单服务器,再Debian系统里发布NFS,共享给Proxmox VE里的虚拟机,再进行测试,tar 同样的那个tgz包,耗时秒级。
由此可得出一个初步结论,物理机操作系统之上发布的NFS性能,比虚拟出来的NFS性能还是有很大的差异,虽然物理存储都是SATA 机械盘。这个临时措施解决了性能问题,但因为它存在单点,决策人坚决反对,既需要性能有需要可用性,这还真难啊!本来建议再增加两台服务器,做成双机形式的NFS服务,讨论方案,未能通过,看来还得回到Proxmox VE集群,解决了性能,才能交差。
辗转反侧,绞尽脑汁,夜不能寐。既然操作系统Debian上发布NFS不存在性能问题,那么虚拟出一层后发布的NFS性能存在那么大的差异,是不是是协议方面的问题呢?NFS客户端,我一直习惯用“-o nolock,vers=3”这样的方式来挂接NFS共享目录,如果换成NFS版本4,会不会好一些呢?
立即在Proxmox VE集群建一个虚拟机,安装好操作系统(NVME Ceph Pool),并单独分配了SATA Ceph Pool作为存储空间作为系统的“sdb”存储设备。分区后在这个/dev/sdb1上创建文件系统,选择Btrfs格式,挂接到系统。确认挂接的分区读写正常后,文本编辑器修改“/etc/export”文件,内容如下:
/data/nfs_dir 10.122.200.0/22(fsid=0,async,rw,all_squash,annotallow=1000,annotallow=1000) |
其中,/data是分区“/dev/sdb1”的挂节点,目录是手动创建的。与以前的NFS服务配置相比,多了一个选项“fsid=0”,这是NFS4 版本所需要的。
再创建一个用户data,用户id、组id正好是1000,与NFS配置文件里的设定相一致。再用指令“chown -R data:data /data/nfs_dir”赋予正确的权限(系统管理员不许用chmod 777这个坏毛病哟)。启动服务NFS及rpcbind,并确认其正确性。
继续回到Proxmox VE集群上欲挂接NFS共享的系统,执行如下指令进行挂接。注意:NFS4的挂接与NFS v3有少许差别,挂节点不一样哟!
mount.nfs4 10.122.200.138:/ /mnt/nfs/ -o rw |
如果挂接地址加上NFS export出来的路径,会报错的。
确保NFS 以版本4的方式挂接,执行如下指令确认。
一切准备妥当,再来执行那个tgz包往NFS共享目录写入,看看什么结果是否有所改善。
[root@mysql-c-200-113 ~]# time tar zxvf 29.tgz -C /mnt/nfs --no-same-owner 29/photo/origin/2023/3/9/1db014ac121fe614d614e2af858cc60a.jpg 29/photo/origin/2023/3/15/ 29/photo/origin/2023/3/15/23965ad2037c0b02f007e8a442153e96.jpg ……………省略若干…………… 29/photo/origin/2023/3/15/0d6cf1265b3cc1365f861d0f357155a1.jpg real 0m11.595s user 0m3.014s sys 0m2.227s |
与NFS v3 相比,天壤之别。重复数次测试,保持稳定,问题得以解决。
最终结论
在高性能的Proxmox VE超融合集群上,即便是用低速SATA机械盘虚拟一层后发布出来的NFS服务,在保证最高可用性的前提下,性能上同样可以满足需求。