导语:
本研究在中国开源云联盟和Ceph中国社区指导下,由灵雀云基于英特尔傲腾非易失性内存设备和Rook以及OpenCAS缓存加速方案测试并发布。
前言
可能你遇到过下面的场景:
1.你们公司刚刚购买了英特尔傲腾存储硬件,你设计了一个加速业务的使用场景,觉得用起来还不错,但是需要有个全方位的性能评估报告。
2.你负责维护一个大型的存储集群,引入了新的缓存架构对系统存储的瓶颈进行优化,你首先要要设立一个基准并搭建一套快速易用的评估工具,并且可以反映出当前主流的工作负载。
3.你是一名运维工程师,为了提升效率,研发团队引入了Kubernetes集群取代原有的闭源部署方案,很多业务都开始向云原生转换,运维系统也需要将一些基准测试工具容器化。原有的存储系统如何跟容器化的业务和基准测试工具无缝集成?
希望本篇白皮书介绍的基于容器平台的存储性能的评估方法有助于您解决类似的问题。
项目简介
以容器为代表的云原生技术作为一类新型基础设施,是支撑着企业数字化建设的重要支撑技术。云原生逐渐在人工智能、大数据、边缘计算、5G等新兴领域崭露头角,成为驱动数字基础设施的强大引擎。
Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统,具备大规模、高性能、无单点失败的特点。Ceph是一个软件定义的系统,可以运行在任何符合其要求的硬件之上。通常,维护Ceph集群有一定的复杂性,Rook就是为此而生。Rook是一个可以提供Ceph集群管理能力的Operator。Rook使用CRD控制器来对Ceph之类的资源进行部署和管理,可以简化大量针对Ceph存储的操作和维护工作。
本测试基于灵雀云ACP3.0全栈云原生开放平台。ACP3.0是以Kubernetes为核心的云原生技术打造的新一代全栈混合云平台,包括5条产品线、16大子产品,涵盖了云原生基础设施、云原生应用架构、云原生DevOps、云原生数据服务和云原生数智五大平台。全平台采用容器原生架构,以Kubernetes为底座和控制平面,支持一键部署、自动运维,持续升级,并具备开放、灵活、可扩展等特性。
ACP3.0可通过Kubernetes的存储类对接不同类型的存储资源,全面支持Ceph、NFS等存储系统。平台还提供超融合的集群内存储方案——内置存储。内置存储是一种高度可扩展的分布式存储解决方案,支持中小规模存储需求的块存储、文件存储能力。内置存储采用开源的Rook存储方案,并进行深度定制,实现了一个可自动管理的、自动扩容的、自动修复的分布式存储服务。
典型场景
基准测试
在存储业界广泛使用的微基准测试程序比如FIO、VdBench等,这些微基准测试工具配置灵活,模式简单,可以在某个配置下快速验证单个性能,比如4K大小的随机读写等,但是它们不能反映出复杂生产环境下的真实负载。模拟复杂的基准测试填补了这一缺憾,它定义了特定的工作负载模型,通过操作数据库的方式模拟出各种基准场景,并且这些模拟的行为是可以重现的。
总的来说,微基准测试和模拟复杂基准测试系统可以互为补充,它们使用的条件和情况也有所不同。模拟复杂基准测试适合在下面几个场景下使用:
·综合评估存储系统。评估系统的性能天花板,瓶颈以及查找可能存在的缺陷。这个场景相对复杂,本篇白皮书暂不讨论。
·引入新解决方案或重要功能。比如更换新的硬件,存储系统的重大版本升级,引入新的解决方案架构或者将原来的系统切换到新的系统中。本篇白皮书会重点讨论其中的两个场景。
·客户要求。客户有在线的业务场景,我们需要模拟这些场景来进行相关的优化。
我们为此引入了下面一组面向生产环境的复杂基准测试集CockroachDB和HammerDB,并将它们容器化部署在Kubernetes集群中。此外我们引入CosBench对象存储基准,对象存储在云平台上需求日益旺盛,根据IDC的数据显示,企业级数据中的80%是非结构化数据,而75%将会存放到对象存储上。
以Kubernetes为代表的容器环境越来越广泛的部署在生产环境中,本白皮书提供了容器环境下的典型场景,基于新硬件(英特尔傲腾非易失性内存硬件)和新的解决方案(OpenCAS缓存框架)对分布式存储系统Rook-Ceph及上层业务的加速。
下表简要介绍了我们选取的几个典型基准测试。
场景框架
容器化的环境下,通过Rook部署Ceph集群,Ceph集群的存储服务OSD有三种部署方案:
·SSD直接作为存储引擎BlueStore的单独分区
·SSD作为BlueStore的主数据分区,而BlueStore的元数据(RocksDB和WAL)部署在英特尔傲腾非易失性内存设备上
·SSD和傲腾非易失性内存设备通过OpenCAS缓存软件组合成新的CAS设备作为BlueStore的主数据分区,BlueStore的元数据(RocksDB和WAL)部署在傲腾非易失性内存设备上。
傲腾非易失性内存可以手工创建为块设备直接使用,但是需要管理维护的成本。在Kubernetes环境下可以通过存储容器接口(CSI)自动管理,PMem-CSI(针对傲腾非易失性内存的CSI驱动)提供面向容器的存储卷类型,此存储卷可以作为CephBlueStore的元数据分区。同样,Ceph通过Ceph-CSI(Ceph的容器存储接口)提供RBD块设备给上层容器应用。我们选取的基准测试程序以Kubernetes应用服务的方式部署,通过Ceph提供的RBD块服务及Ceph的对象网关来评估新傲腾硬件和新缓存框架的性能提升。
OpenCAS是英特尔开发的缓存加速方案,通过加载内核的方式,将高速介质盘作为缓存,和慢速盘“融合”为一块盘使用,从而提高系统整体的磁盘读写性能。
性能评估环境
软硬件环境
针对上面的典型场景,我们搭建一套兼容性的环境,包含硬件和软件配置。在服务器端,以RookCeph为核心的存储集群提供块存储和对象存储服务;在客户端部署基准测试程序,基于块存储和对象存储之上运行工作负载。这套软硬件环境在灵雀云实验室完成搭建和测试。
Rook-Ceph存储集群
首先部署三个节点的Kubernetes集群,Rook-Ceph基于Kubernetes集群之上通过RookOperator将Ceph的各个模块以Pod的形式部署在各个节点上,在这里我们部署1个客户端和3个Ceph的服务节点,其中某一个Ceph服务节点和客户端共享一个物理节点,这样体现了部署的灵活性。
Rook也支持Ceph部署在两个网络上,公共网络和集群网络(使用主机网络)的配置可以通过configMapoverride的方式,也可以通过定义Ceph集群的yaml网络配置(功能不太成熟稳定),我们采用第一种方式。
客户端上以StatefulSetPod的形式部署三种基准测试程序。对于块存储,通过在yaml里定义PersistentVolumeClaim向Ceph集群以Ceph-CSI的方式申请;对于对象存储,以S3API的方式向Ceph对象网关获取对象。
需要注意的是Rook集群的OSD的配置有两种方式:
·直接定义每个节点上的设备路径。这种方式简单,适合轻量部署的场合,但扩展性不太好,而且不支持远端的公有云存储。
·通过PVC(PersistentVolumeClaim)的方式,需要定义PVC模板,然后填充每个OSD类型所需的StorageClass即可。这种方式扩展性好,支持本地和远端的各种存储。
我们定义了BlueStore的三个分区的PVC模板,分别对应data,block.db和block.wal分区,每个分区对应一种类型的StorageClass,如果通过PVC能申请到相应大小的块设备,就创建成功,组建一个新的OSD组件服务。本样例中,我们通过local-storage内置类型创建了多个PV(PersistentVolume),然后PVC选取符合大小的PV就可以绑定成功。
对于客户端块设备的获取,标准方式是通过存储容器接口(CSI)的方式,Rook的部署目前支持Ceph-CSI,正常的加载过程需要确保两个条件:
·CSI服务,包括插件和驱动正常运行,默认Rook会启动CSI服务
·创建对应的StorageClass:rook-ceph-block,其中provisioner配置项是:rook-ceph.rbd.csi.ceph.