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

9 篇文章 2 订阅
5 篇文章 1 订阅

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

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

一、PureFlash整体介绍

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

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

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

PureFlash的思想来自于全硬件加速闪存阵列S5, 因此虽然PureFlash本身是纯软件实现,但其存储协议对硬件加速是高度友好的。可以认为PureFlash的协议就是NVMe 协议加上云存储特性增强,包括快照、副本、shard、集群热升级等能力。

二、功能特性

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

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

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

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

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

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

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

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

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

10. 支持TCP, RDMA(RoCE, IB)网络, 以及在同要给环境中混合使用不同网络

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

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

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

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

15. 容器化部署, 提供容器化部署能力,
16. 支持云虚拟机访问、裸金属访问、容器访问,  qemu集成、内核驱动、CSI驱动都已经提供
 

三、安装运行

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

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

# docker pull pureflash/pureflash:latest
# docker run -it --rm pureflash/pureflash:latest

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

如果想指定使用物理盘,以及主机的网络,可以用下面的命令启动:

# docker run -ti --rm  --env PFS_DISKS=/dev/nvme1n1,/dev/nvme2n1 --ulimit core=-1 --privileged  -e TZ=Asia/Shanghai --network host  pureflash/pureflash:latest

启动后就可以使用了,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   
增加了pfbd支持的qemu: https://gitee.com/cocalele/qemu
将PureFlash volume导出成iSCSI target的tcmu: https://gitee.com/cocalele/tcmu-runner

欢迎各位朋友参与此项目,创造全闪时代的云存储基石!

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值