PureFlash存储系统介绍与上手指南

PureFlash是一个开源的分布式存储系统,项目起始于2016年。本文介绍将介绍PureFlash系统的主要特点,以及基于容器的快速上手体验。

PureFlash的开源项目位置:https://github.com/cocalele/PureFlash 

一、PureFlash整体介绍

PureFlash是一个开源的ServeSAN实现,也就是通过大量的通用服务器,加上PureFlash的软件系统,构造出一套能满足企业各种业务需求的分布式SAN存储。

PureFlash是为全闪存时代而设计的存储系统。当前SSD盘的应用越来越广泛,大有全面取代HDD的趋势。SSD与HDD的显著区别就是性能差异,这也是用户体验最直接的差异,而且随着NVMe接口的普及性能差异越来大,这种近百倍的量变差异足以带来架构设计上的质变。举个例子,原来HDD的性能很低,远远低于CPU、网络的性能能力,因此系统设计的准则是追求HDD的性能最大化,为达到这个目标可以以消耗CPU等资源为代价。而到了NVMe时代,性能关系已经完全颠倒了,盘不再是瓶颈,反而CPU、网络成为系统的瓶颈。那种消耗CPU以优化IO的方法只能适得其反。

因此我们需要一套全新的存储系统架构,以充分发挥SSD的能力,提高系统的效率。PureFlash的设计思想以简化IO stack, 数据通路控制通路分离,快速路径优先为基本原则,确保高性能与高可靠性,提供云计算时代块存储核心能力。

二、功能特性

1. 单副本与多副本任意选择,允许每个volume使用不同的副本数,提供不同的可靠性等级

2. 精简置备,即thin provision。能够实现云计算时代需要的存储虚拟化,存储超卖等关键特性。而且可以提供超过单节点容量能力的超大容量Volume

3. 瞬时快照能力,PureFlash采用inplace 快照技术,能够瞬时完成快照且不占用额外的存储空间

4. Scale out能力,可以随时通过增加节点的方式扩展系统的总体容量,即便是运行期间也可以进行扩容。

5. 强一致性,使用强一致性,确保企业数据正确性、确保核心业务正确运行

6. 允许共享访问,同一个Volume允许从多个Client同时访问,可以用于支撑Oracle RAC类共享盘业务

7. 故障冗余,容忍各种单点故障,包括网络故障,网卡故障,SSD故障,节点整机故障

8. 可控数据恢复,当硬件故障恢复后,可以对数据进行恢复,并且可以控制恢复的时间与资源占用情况

9. 可控数据均衡,系统长时间使用后可能数据分布不均衡,可控均衡功能可以在节点间均衡数据分布。并且均衡的时间与资源占用率都可以控制,以减少对正常业务的冲击

10. 多网卡与多路径支持,每个节点可以有多个网卡,这些网卡都处于活动状态以提供更高的IO吞吐能力,并且在一个网卡故障时可以自动把IO迁移到其他网卡而不影响客户端访问。

11. 简化的io stack,PureFlash以提供块存储为目标,为将SSD性能毫无损失的发挥出来,避免使用任何多余的中间IO层级,因此既没有使用本地文件系统,也没有使用K-V系统进行本地数据管理。使用本地文件系统或者KV做本地数据管理在分布式存储系统中很常见,但同时也带来了性能损失,系统复杂度上升,bug概率增加。PureFlash则完全避免了这一点。

12. 扩容稳定性,PureFlash系统使用非hash设计,新节点加入集群后,不需要均衡就可以立即开始承载业务,保证既有业务稳定运行,避免均衡带来的冲击。

13. 最小资源消耗,适合超融合部署。PureFlash设计中没有使用SPDK这样的IO接口。SPDK虽然能带来一些IO性能收益,但是付出的代价是CPU资源的大量浪费,在没有IO时候也要处于忙等待状态中。这对超融合系统是致命的,存储任务一直占用CPU资源,而不能出让给计算任务使用,背离超融合的基本理念。PureFlash只消耗与IO能力成比例的CPU、内存、网络资源,并且可以通过参数配置最大资源消耗量,因而十分适合超融合系统。

三、安装运行

一个完整的PureFlash集群包括: zookeeper集群、MariaDB集群、jconductor集群、PureFlashStore集群。要想具备基本的高可用能力,需要至少3个物理节点,然后将这些服务融合部署在这3个节点上。如此多的功能模块,和如此多的节点,如果从0开始部署的话还是个比较繁重的任务。然而作为测试部署,这些模块都可以简化成单节点并且部署到单个容器里。我们从容器开始运行,读者可以快速对PureFlash有个体验。容器镜像位置:https://hub.docker.com/r/pureflash/pureflash

首先,让我们通过下面的命令拉取和启动容器:

# docker pull pureflash/pureflash:1.0

# docker run -it --rm pureflash/pureflash:1.0

容器启动的时候,会首先初始化一个约20G的数据文件代替SSD,整个初始化过程大概有1分钟左右。等看到命令提示符就说明初始化好了。

启动后就可以使用了,PureFlash提供了命令行工具,来查看管理集群,

# pfcli list_store

+----+---------------+--------+

| Id | Management IP | Status |

+----+---------------+--------+

|  1 |    127.0.0.1 |    OK |

+----+---------------+--------+

# pfcli list_disk

+----------+--------------------------------------+--------+

| Store ID |                uuid                | Status |

+----------+--------------------------------------+--------+

|        1 | 9ae5b25f-a1b7-4b8d-9fd0-54b578578333 |    OK |

+----------+--------------------------------------+--------+

作为测试,我们来创建一个单副本的volume(这个环境只有一个store节点,也只能创建单副本的Volume)。

# pfcli create_volume -v test_v1 -s 2G --rep 1

+------------+---------+------------+----------+--------+

|    Id    |  Name  |    Size    | RepCount | Status |

+------------+---------+------------+----------+--------+

| 1107296256 | test_v1 | 2147483648 |        1 |    OK |

+------------+---------+------------+----------+--------+

同时容器里面还打包了两个测试工具:pfdd和fio. 前者就是像dd工具一样,可以向volume里面写入或者读出数据。而fio是著名的性能测试工具,大家可以试一试在容器里的性能如何。

# pfdd --rw write --if /dev/zero -v test_v1 --bs 4k --count 10

# fio -name=test -ioengine=pfbd -volume=test_v1 -iodepth=2  -rw=randwrite -size=2G -bs=4k -direct=1

最后,列出PureFlash系统相关的git库:

PureFlash存储服务pfs:   https://github.com/cocalele/PureFlash.git  

PureFlash控制服务jconductor: https://github.com/cocalele/jconductor.git

增加了pfbd engine的fio: https://gitee.com/cocalele/fio.git

增加了pfbd支持的qemu: https://gitee.com/cocalele/qemu.git

欢迎各位朋友参与此项目,创造全闪时代的云存储基石!本人V_X 号:vivenas ,欢迎联系。

你可能感兴趣的:(PureFlash存储系统介绍与上手指南)