鹏云DBS调研及对比测试




一、目的

  1.  调研体验鹏云块存储系统(开源版本) https://github.com/zettastor/dbs 并且进行相关性能测试和异常测试
  2. 对比Curve块存储,包括特性支持以及大小io的性能

二、鹏云存储系统(开源版本)流程体验

部署

按照鹏云提供的文档进行了操作系统的重装CentOS 7 (没有提供别的OS的支持,可能有售卖的产品形态有关)
问题:
  1. 无法完成多节点元数据库(高可靠)的安装部署,后续使用single模式元数据来运行
  2. 部署脚本存在错误,已有人提了issue,是同一个问题
  3. ssh要求使用用户名/账户来登录,不安全,并且解析的脚本存在问题,密码无法带空格,没有看到可以指定ssh port的地方
  4. 部署脚本无法正确的清理部署失败的环境,需要手动介入,无文档,全靠猜加运气
使用挂载
  1. web控制台使用体验不错,可以顺利完成添加节点(需要机器已有服务进程),添加硬盘,创建存储域/存储池/存储卷
  2. 只能使用控制台来进行操作,无法脱离控制台在terminel直接交互,效率很低,比方说挂载10个卷到机器上需要手点三十多次,一次挂载可能需要点三四次
  3. 可以使用提供的2种挂载方式挂载,包括iscsi和pyd内核ko,但是实际走的都还是需要走一个driver进程,内核的ko那个其实意义不大
  4. 挂载后在fio测试中遭遇过fio hang住,集群崩溃的情况,无法复现,原因未知
  5. 提供了基本的权限控制,qos等功能
一些运维和操作尝试
  1. 官网没有提供运维文档,基本的重启服务等操作都不知道如何完成
  2. 试图在页面缩容(从存储池删除一个盘),好像什么也没有发生,底下无io,不知道该如何触发数据的迁移
  3. 使用megacli删除硬盘,再添加回来会导致集群异常,不知道如何修复
关键feature提供情况(对比curve)
功能
鹏云开源
CurveBS
多os适配
不支持,需要修改,可能与产品售卖形态有关
支持
web页面访问和控制
无,在开发,监控可用普罗米修斯接入
命令行访问和控制
存储域、存储池、存储节点、存储盘的管理(增/减)
可以在保证三副本的情况下缩容,已有pool无法扩容盘和节点
支持的数据副本策略
两副本,三副本,三副本(可靠)
三副本
卷的创建删除
支持,可选择存储域和存储池位置(即物理节点和硬盘范围)
支持,不可选择存储池位置,条带卷需要额外设置参数
卷的扩缩容
支持扩容
支持
卷的快照及克隆
不支持
支持
卷的挂载协议支持
iscsi和私有pyd协议,支持多挂载,支持CHAP认证和用户认证
iscsi和私有curve协议,支持多挂载
卷的访问控制
CHAP认证;控制用户和节点
不支持
卷的QoS
可设置总iops和总带宽;
可以限定时间段进行设置
可以单独设置读写iops和读写带宽
web端操作日志审计
支持
web端用户管理
支持,并且支持细分权限的设置
整体感受
  1. 系统部署和清理体验糟糕
  2. web控制台基本功能体验良好
  3. 运维缺乏文档,开源版体验糟糕

三、性能对比测试

测试环境说明
3台服务器,配置如下:
  • DELL PowerEdge R730xd 处理器:Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz *2 (24c48t)
  • RAID控制器:DELL PERC H730 Mini
  • 内存:256G
  • 网卡:20G
  • 硬盘:INTEL S3510 1.6T SATA SSD (SSDSC2BB016T6) *10
  • 测试硬盘使用相同的单盘RAID0,WRITE THROUGH,ADRA模式,关闭磁盘缓存
操作系统信息如下:
# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) # uname -a Linux server041 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
测试方案说明
创建5个105G的卷,先完整写入100G,然后以下几组测试:
  • 4k单卷:不同iodepth(1,4,16,64,128,256)的随机读写
  • 4k多卷:固定iodepth为128时的2,3,4,5卷的随机读写
  • 512k单卷:不同iodepth(1,4,16,64,128,256)的顺序读写
  • 512k多卷:固定iodepth为128时的2,3,4,5卷的顺序读写
鹏云dbs使用fio libaio+iscsi挂载,curvebs使用fio的cbd引擎
每组测试的每个case运行10分钟,进行下一个测试,测试连续运行,一轮大约8小时
curve为4MB*8的条带卷
提示1:读性能的数据受到测试数据量和缓存的影响,相比正常值会偏高,仅供参考
提示2:单盘RAID0,WRITE THROUGH,ADRA模式磁盘整体性能不是最佳设定,这里
由于测试时间关系和前后保持一致,沿用这个设置,具体情况可以参考文章 #todo
测试中主要关注以下指标:
  • 4k随机读写的iops最小/最大/平均值以及时延的平均值/99th值/90th值
  • 512k顺序读写的带宽最小/最大/平均值
测试结果
4k单卷写
0
curve性能略优于dbs
software
iodepth
iops_min
iops_max
iops_avg
clat_avg_us
clat90th
clat99th
dbs
1
933
1809
1400
596
717
873
curve
1
515
1188
1115
887
930
1237
dbs
4
5823
9419
7898
429
469
693
curve
4
4890
5866
5591
709
717
963
dbs
16
16430
26731
21126
607
701
1418
curve
16
19390
21796
20763
764
766
1090
dbs
64
26217
50000
35714
1394
1827
3425
curve
64
19114
46822
45283
1403
1418
4752
dbs
128
14158
58067
34047
3010
10945
20841
curve
128
34914
48262
47416
2689
2704
7832
dbs
256
16906
60712
42719
5970
7000
30000
curve
256
36462
48314
47678
5358
5342
10683
dbs直接管理裸盘,单深度的io延迟比较低,但是压力增大后呈现出了延迟波动大的状况,可能与一个节点一个datanode管理所有的硬盘,以及java代码的gc(观察日志,有时候gc会到几百毫秒甚至秒级)有一定关联。
并且在测试中发现,dbs的segment的分配不均匀,会出现有的硬盘io为0的情况,不知道如何改善,多卷也存在这样的情况。看控制台能看到有的盘分配较少,有的较多,在集群大规模下可能情况会有一定的改善。
4k多卷写
0
4k多卷性能curve优于dbs,dbs在高压力下呈现出很奇怪的状态,性能会下降,多卷写测试是在单卷后紧跟着运行的,可能是单卷测试运行对java程序累积的压力,包括gc、缓存等,以及前面说的有的硬盘io为0的情况。
512k单卷写
0
512k多卷写
0
4k单卷读
0
4k多卷读
0
512k单卷读
0
512k多卷读
0
因为测试数据量比较有限,读测试跑的久一点之后基本就是读缓存了,大io顺序读下差不多,小io大iops下鹏云的性能较差,可能原因有直接管理裸盘和自身缓存大小/策略,鹏云datanode进程内存一般固定在47g左右。

四、异常测试

主要测试了常见的坏盘和节点异常场景
  • 坏盘:使用megacli直接删除vd来模拟的
    • 鹏云:抖动1s
    • curve:抖动1s
  • 机器hang住:使用给进程发SIGSTOP来模拟
    • 鹏云:抖动1s
    • curve:抖动1s