在云原生和裸金属环境开展 NFS 存储性能比对测试
1.前言
云存储平台提供了海量的存储容量,可提供用户多种存储业务模式,但是,由于用户场景需求、文件块大小、并发情况差异较大,造成服务器压力不均衡、资源闲置,浪费处理能力,频繁报错等问题,却始终困扰着我们。本文通过 K8S 容器环境、裸金属环境下 nfs 存储之间 IOPS 读写测试数据比对,通过此测试方案,比较了两种不同环境下 NFS 存储性能差异。
2.测试目的
本次测试目标仅测试在其他条件完全相同情况下(网络、CPU、内存,硬盘型号和类型,客户端性能),比较 K8s 集群下容器化的 NFS 和运行在 linux OS 下的 NFS 的 I/O 读写性能差别,并在这两种测试环境下,测试处理 mysql 数据库时的读写删除性能,通过测试,比较 K8s 容器环境和裸金属(用虚拟机模拟)下 NFS 存储的性能差异。
通过测试,给出容器化和裸金属环境下软硬件资源的配置建议,帮助企业更好地了解 NAS 类型的存储系统(如 NFS)。通过升级或修改其配置,从而提高整体应用程序性能;更有效地故障排查瓶颈和其他问题。
3.存储测试原理和影响因素
存储测试原理
影响存储测试性能优劣的因素有很多,如果这些环节配置合理,可以发挥出存储的最佳性能,如果不当,那么任何一个环节都有可能成为瓶颈。通过下图来了解一下,在一个完整的测试过程中,可能会影响测试性能的各因素:
影响到存储性能测试的因素
磁盘(磁盘类型,SATA,SAS)
接口(业务口配置,聚合,网卡性能及兼容性)
中间设备(交换机,链路,巨帧)
网络设置(网卡,巨帧)
软件(相关软件设置,测试软件设置及选择)
客户端主机性能(initiator 与 CPU 占用率的关系)
4.测试准备
工具和软件
测试环境
为了消除硬件环境下部分影响因子,本次测试的两个测试环境搭建在同一局域网内(详见拓扑图),统一使用千兆网卡以消除网络相关因素对本次测试影响,同时测试环境使用的虚拟机使用同一服务器的内存、CPU、磁盘,以消除因 CPU、内存、磁盘型号不同带来的影响因子,通过资源完全相同的虚拟机客户端配置,消除客户端主机不同带来的影响。
l K8S NFS&mysql 配置:
l 容器存储(PV)相关配置
**Mysql 容器路径:**root@mysql-5.5-d67bfff99-zv7h7:/data#
l 存储卷配置:
5.测试执行
FIO 测试:裸金属存储测试环境、K8s 容器存储测试环境、二种测试环境下执行以下命令实施 FIO 存储测试。
mysql 测试:分别在裸金属存储测试环境、K8s 容器存储测试环境容器平台两种测试环境下,通过数据卷存储数据使用 sysbench 从集群内对 mysql 执行 OLTP 基准测试时将使用以下命令。
FIO 测试
本节展示了实际的 FIO 测试结果为参考基准提供了相对测试结果,用于比较二种环境的性能优劣。
1.1 FIO 只读测试
在二种环境下执行 FIO 只读测试后,收集的只读测试结果如下表。
资源开销对比
裸金属存储测试环境在 IOPS 和带宽分别为 113079 和 452319,其资源开销约为 3%,而 K8s 容器存储测试环境资源 IOPS 和带宽分别为 83364 和 333457,资源开销高达 10% 以上。
延迟和响应时间
裸金属存储测试环境在延迟和响应时间方面同样只有 3% 不到的资源开销;而 K8s 容器存储测试环境容器平台的资源开销高达 10% 以上。
小结
总之,K8s 容器存储测试环境的资源开销是裸金属存储测试环境的 3 倍,延迟也比后者长 36% 以上。
裸金属存储测试环境的读取性能高于 K8s 容器存储测试环境,峰值读取 IOPS 在 11 万以上,而 K8s 容器存储测试环境的峰值 IOPS 只有 8 万出头,仅相当于裸金属存储测试环境的 72%。
1.2 FIO 写入测试
二种环境下执行 FIO 写入测试后,收集的写入测试结果如下表。
资源开销对比
裸金属存储测试环境在 IOPS 和带宽分别为 113062 和 452250,其资源开销约为 3%,而 K8s 容器存储测试环境资源 IOPS 和带宽分别为 83351 和 333406,资源开销高达 10% 以上。
延迟和响应时间
裸金属存储测试环境在延迟和响应时间方面同样只有 4% 不到的资源开销,而 K8s 容器存储测试环境和 K8s 容器存储测试环境容器平台的资源开销高达 10% 以上。
CPU 利用率
裸金属存储测试环境的 CPU 利用率没有明显变化,而 K8s 容器存储测试环境资源利用率不足 80%。
小结
总之,K8s 容器存储测试环境的资源开销是裸金属存储测试环境的 3 倍,延迟也比后者长 36% 以上,而 CPU 利用率只有后者的一半不到。
裸金属存储测试环境的写入性能高于 K8s 容器存储测试环境,峰值写入 IOPS 在 11 万以上,而 K8s 容器存储测试环境的峰值 IOPS 只有 8 万出头,约为裸金属存储测试环境的 72%。
1.3 FIO 测试结论
K8s 容器存储测试环境的资源开销是裸金属存储测试环境的 3 倍,延迟也比后者高。
裸金属存储测试环境的读写 IOPS 均在 11 万以上,而 K8s 容器存储测试环境的读写峰值 IOPS 只有 8 万出头。
mysql 测试
使用 sysbench 从集群内对 mysql 执行 OLTP 基准测试后得出的测试结果,并以裸金属存储测试环境为基准提供了相对测试结果,与 K8s 容器存储测试环境环境进行了比较。
1.4 测试结果
我们用 sysbench 这款基准测试工具模拟 mysql 数据库存储引擎 InnoDB 的磁盘 I/O 模式,在裸金属和 K8s 容器这两种测试环境下,对 mysql 数据库执行了只读、只写、综合读写和删除测试,得出了以下测试结果。
1.5 测试分析
从上表看出,与裸金属存储测试环境相比,K8s 容器存储测试环境性能损耗较大,具体表现为:
K8s 容器存储测试环境的只读性能只有裸金属存储测试环境的 15%,即裸金属存储测试环境是 K8s 容器存储测试环境容器平台的 6 倍以上。
K8s 容器存储测试环境只写性能为裸金属存储测试环境的 83%。
K8s 容器存储测试环境的综合读写性能为裸金属存储测试环境的 52% 左右。
K8s 容器存储测试环境相比裸金属存储测试环境的删除性能稍微下降 7% 至 9%,差异不大。
同样查询次数,K8s 容器存储测试环境耗用的时间为裸金属存储测试环境的 6 到 11 倍。
同样查询次数,K8s 容器存储测试环境删除耗用的时间为裸金属存储测试环境的 5 倍以上,综合读写方面差异不大。
6.测试总结
经上述测试,我们发现在 FIO 存储测试中,K8s 容器存储的资源开销是原有裸金属存储环境的 3 倍,延迟和响应时间比裸金属存储高 36% 以上;同样在 mysql 测试期间,裸金属存储测试环境的只读性能是 K8s 容器存储测试环境容器平台的 5 倍,综合读写性能是 K8s 容器存储的一倍。
所以我们建议
原有裸金属 nfs 存储业务转换使用 K8s 容器存储,应增加 K8s 容器存储节点虚拟芯片的核数为之前裸金属存储所有物理 CPU 核数的三倍,这样基本可以保证现有业务的稳定性。
在测试中,我们发现网络的状态会对 NFS 性能产生较大的影响,建议客户如需要使用 NFS 服务器对 mysql 数据库文件做备份的话,相关数据库服务器和 NFS 服务器划分到一个独立的 VLAN 里,同时 NFS 服务器尽量不要运行其他应用。
另外,在 NFS 配置 UPD 传输模式时候,性能会稍差,且容易丢包,,建议使用使用 TCP 命令在 NFS 服务器挂载 mysql 数据库文件夹,提升网络冗余,防止丢包导致相关 mysql 数据库文件内容丢失。
7.缩略词和术语表
本节列出了文中出现的所有缩略词和术语,便于理解和查阅。
版权声明: 本文为 InfoQ 作者【QE_LAB】的原创文章。
原文链接:【http://xie.infoq.cn/article/fc368b72dd0ed46dd15604df0】。文章转载请联系作者。
评论