1、Curve 是什么?
Curve 是云原生计算基金会(CNCF) Sandbox 项目,由网易主导开源的高性能、易运维、云原生的分布式存储系统,由块存储 CurveBS 和文件系统 CurveFS 两部分组成。
2、Curve 的愿景是什么?
3、Curve 成熟的应用场景有哪些?
对接 OpenStack 平台为云主机提供高性能块存储服务;
对接 Kubernetes 为其提供 RWO、RWX 等类型的持久化存储卷;
对接 PolarFS 作为云原生数据库的高性能存储底座,完美支持云原生数据库的存算分离架构;
Curve 作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储;
支持在物理机上挂载使用块设备或 FUSE 件系统
4、Curve 与 Ceph 的区别是什么?
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20221109_5926f416-6003-11ed-b45b-fa163eb4f6be.png)
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20221109_5938b282-6003-11ed-b45b-fa163eb4f6be.png)
运维场景 | Ceph | Curve |
集群环境 | 支持x86、Arm | 支持x86、Arm |
集群部署 | 支持一键部署 | 支持一键部署 |
集群扩容 | 物理池方式扩容, 卷可以跨物理池 | 物理池方式扩容, 卷可以跨物理池 |
加盘 | 秒级IO影响 | 对IO无影响 |
服务端升级 | 重启管控面IO无影响, 重启OSD IO秒级影响 | 对IO无影响 |
服务端升级 | 不支持热升级, 需要业务停服 | 热升级,秒级抖动 |
集群监控 | Metric 类型较少 | 丰富的 Metric |
从一致性协议来说:Curve 使用 Raft 协议实现一致性,Ceph 是 Paxos 协议; 从空间分配方式来说:Curve 是通过中心化的元数据服务来调度分配,Ceph 是通过 CRUSH 算法 hash 方式分配; 从存储形态上来说:Curve 目前支持块存储(CurveBS)、文件存储(CurveFS),Ceph 在这两个形态之外还支持对象存储; 从架构上来说: Curve 文件存储:
支持多种存储后端,支持公有云、私有云部署;
支持多级缓存;
支持原子性 rename;
支持多挂载;
元数据和数据节点弹性可扩展; Curve 块存储服务端:
中心化节点架构,利用中线节点感知集群节点和负载、容量、异常,进行资源的实时调度与恢复;
Quorum 机制的一致性协议。异常情况容错更优异,在异常情况下恢复较快,保证可靠性的同时,提高服务可用性; 文件池。集群初始化时,创建指定大小的文件,降低IO过程中文件元数据的更新开销,降低IO延迟; IO路径一次持久化。对于用户IO, raft 中大多数节点写完 wal, apply 写入缓存即可返回; raft轻量级快照。读写操作是幂等的,raft 快照只需要保存文件名,对IO无影响; 快照上传 S3。快照存储到支持 S3 接口的对象存储,不限制数量; Curve 块存储客户端 条带化设计,大IO使用条带化技术,在客户端进行分片,提高IO的并发度,让更多的节点参与IO处理; ApplyIndex 读,客户端带着 applyIndex 读,无需走一致性协议,使得读不会被写阻塞,极大的提高了读性能; 支持多挂载,一个文件可以挂载到多个客户端,提供块级别的一写多读; 支持热升级,client 端使用 client-server 架构,版本升级只需要更新 server,无需业务停服,对IO秒级影响; 其他大的差异包括:Curve 块存储支持基于 PolarFS 的云原生数据库存储底座(如PolarDB for postgresql等);Curve 块存储快照会转存到对象存储系统;Curve 文件存储支持将数据保存到兼容 S3 协议的对象存储系统(可以在公有云场景下部署),后续还会支持在 Curve 块存储和 S3 之间进行数据生命周期管理; 具体到详细的功能,可以参考 Curve roadmap[1],另外还有一些功能在开发计划中;
5、Curve 与 其他开源存储的区别是什么?
与 CubeFS 最大的区别:Curve 支持块存储,不支持对象存储,CubeFS 反之;另外 Curve 文件存储可以在公有云场景下对接 S3 存储引擎部署使用。
与 JuiceFS 最大的区别:Curve 支持块存储,Curve 文件存储支持 Curve 块存储后端,也支持 S3 存储后端,后续还会支持在 Curve 块存储和 S3 之间进行数据生命周期管理。另外, Curve 拥有原生基于 raft 的元数据服务,Juicefs 开源版本需要使用第三方 kv 引擎做元数据服务。
6、Curve 的云原生存储能力是如何体现的?
云原生部署:支持 curveadm+docker 部署方式;支持 helm 部署方式;支持 chart 部署方式;后续有计划支持 rook 部署方式;
云原生使用:支持 CSI 配合 K8S 作为持久化卷使用(RWO、RWX等);
云原生运维:支持 curveadm+docker 运维,计划支持 rook 运维;
7、Curve 部署的最低配置是?
只需要拥有一台机器,可以部署体验 Curve;当然,这仅限于体验 Curve 系统的特性,如果你需要进行性能测试或部署线上环境,请参考以下 Curve 生产环境的推介配置。
8、Curve 生产环境推荐配置是?
对于 Curve 块存储, 我们将从以下几个部分给出推荐配置:
数据盘磁盘: 尽可能保证每个 chunkserver 服务单独拥有一块 SSD; 关闭数据盘缓存; 磁盘调度策略,SSD 盘 noop,HDD 盘 deadline; 数据盘 raid 卡配置: 数据盘全部为 JBOD 模式; RAID 卡关闭 consistent check; RAID卡缓存策略:WriteThrough; 操作系统设置: 系统允许的最大 fd 数量建议设为 10000000; 单个进程允许的最大 fd 数量,不要低于 2500000; 调整 mmap 数量,建议调整为 5642720;
9、最快速体验 Curve 的方式?
curveadm playground --kind curvefs --mountpoint path/to/mount
10、如何部署 Curve?
11、Curve 运维排障工具有哪些?
Curve 自带的配套运维工具:Curve 块存储的 curve_ops_tool 以及 Curve 文件存储新版的 https://github.com/opencurve/curve/tree/master/tools-v2;
Prometheus:Curve 提供一整套完整的 metric 体系,由 Prometheus 采集,最终由 Grafana 面板展示;
CurveAdm: CurveAdm 目前正在尝试提供高级的 troubleshooting 工具,详见 CurveAdm 常见运维操作[5];
12、Curve 是否支持物理机安装包方式的手工部署?
13、Curve 是否支持超融合部署?
14、Curve 目前支持哪些操作系统发行版?
15、Curve 是否可以在 ARM64 平台运行?
支持;可参考https://github.com/opencurve/curve/tree/arm64。
16、Curve 是否支持同城双活?异地容灾?两地三中心?
17、Curve 如何扩容?扩容是否会影响业务 IO?
18、Curve 如何升级?升级是否会影响业务 IO?
19、Curve 的日志存放在哪里?
可通过 curveadm status -v 命令查看各服务的日志和数据目录。
20、如何测试 Curve 文件存储性能?
curve@test1:~$ ./fio --name=big-file-random-write --directory=/curvefs --rw=randwrite --refill_buffers --size=10G --bs=4k -runtime=30
big-file-random-write: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.29-36-g607a
Starting 1 process
big-file-random-write: Laying out IO file (1 file 10240MiB)
Jobs: 1 (f=1): [f(1)][100.0%][eta 00m:00s]
big-file-random-write: (groupid=0, jobs=1): err= 0: pid=471537: Mon Aug 8 15:42:06 2022
write: IOPS=4994, BW=19.5MiB/s (20.5MB/s)(585MiB/30001msec); 0 zone resets
clat (usec): min=57, max=363693, avg=198.41, stdev=1117.11
lat (usec): min=57, max=363693, avg=198.47, stdev=1117.11
clat percentiles (usec):
| 1.00th=[ 76], 5.00th=[ 89], 10.00th=[ 96], 20.00th=[ 108],
| 30.00th=[ 116], 40.00th=[ 124], 50.00th=[ 135], 60.00th=[ 147],
| 70.00th=[ 178], 80.00th=[ 241], 90.00th=[ 347], 95.00th=[ 429],
| 99.00th=[ 570], 99.50th=[ 652], 99.90th=[ 2638], 99.95th=[16188],
| 99.99th=[27395]
bw ( KiB/s): min= 8960, max=35688, per=100.00%, avg=19996.75, stdev=3711.76, samples=59
iops : min= 2240, max= 8922, avg=4999.19, stdev=927.94, samples=59
lat (usec) : 100=13.82%, 250=67.48%, 500=16.50%, 750=1.84%, 1000=0.23%
lat (msec) : 2=0.03%, 4=0.01%, 10=0.01%, 20=0.08%, 50=0.01%
lat (msec) : 100=0.01%, 500=0.01%
cpu : usr=1.73%, sys=7.14%, ctx=299685, majf=1, minf=107
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,149836,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=19.5MiB/s (20.5MB/s), 19.5MiB/s-19.5MiB/s (20.5MB/s-20.5MB/s), io=585MiB (614MB), run=30001-30001msec
21、如何参与 Curve 开源社区?
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20221109_597b2f18-6003-11ed-b45b-fa163eb4f6be.png)
22、我改了 Curve 代码,如何发布自己的版本?
修改代码、编译、打镜像、推送镜像。
$ cd <workspace>
$ git clone https://github.com/opencurve/curve.git
$ cd curve
modify your code
cd curvefs
make dep
make build [release=1]
make image tag=TAG
docker push TAG
参考[1] Curve roadmap:
https://github.com/opencurve/curve/wiki/Roadmap
参考[2] 软硬件环境需求i:
https://github.com/opencurve/curveadm/wiki/install-curveadm#%E8%BD%AF%E7%A1%AC%E4%BB%B6%E7%8E%AF%E5%A2%83%E9%9C%80%E6%B1%82
参考[3] CurveAdm wiki:
https://github.com/opencurve/curveadm/wiki
参考[4] Curve SAP:
https://ask.opencurve.io/t/topic/49
参考[5] CurveAdm 常见运维操作:
https://github.com/opencurve/curveadm/wiki/maintain-curve
参考[6] 扩缩容:
https://github.com/opencurve/curveadm/wiki/scale-curve
参考[7] 升级服务:
https://github.com/opencurve/curveadm/wiki/upgrade-curve