暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Curve 新手必知问答

k8s技术圈 2022-08-12
1022

为了帮助大家快速了解和上手 Curve,我们整理了一些用户经常会问到的典型 FAQ;主要从 Curve 是什么项目、能用在什么场景、跟竞品对比有什么优势、如何部署、怎么实现、如何测试、如何参与社区的角度阐述;另外,社区的小伙伴如果遇任何问题,欢迎通过 Curve 官方论坛 https://ask.opencurve.io/,一起更近距离交流 Curve。

1、Curve 是什么?

Curve 是云原生计算基金(CNCF) Sandbox 项目,由网易主导开源的高性能、易运维、云原生的分布式存储系统,由块存储 CurveBS 和文件系统 CurveFS 两部分组成。


2、Curve 的愿景是什么?

网易长期深入实践和调查云原生基础设施3大板块:计算、存储、网络,深感【稳定、高性能、公有云私有云均可使用的灵活弹性、简单易运维】,这样云原生场景下的开源存储系统很少,但存储又是必不可少的基础设施;Curve 的愿景:打造性能卓越、全场景适用、稳定易运维的开源云原生分布式存储系统。


3、Curve 成熟的应用场景有哪些?

Curve 目前成熟的应用场景主要如下:
  • 对接 OpenStack 平台为云主机提供高性能块存储服务;

  • 对接 Kubernetes 为其提供 RWO、RWX 等类型的持久化存储卷;

  • 对接 PolarFS 作为云原生数据库的高性能存储底座,完美支持云原生数据库的存算分离架构;

  • Curve 作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储;

  • 支持在物理机上挂载使用块设备或 FUSE 件系统


4、Curve 与 Ceph 的区别是什么?

性能实践角度,Curve 性能远优于 Ceph,此处列举 SATA SSD 和 NVME 块存储的随机读写场景:
SATA SSD 块存储的随机读写,单卷
NVME 块存储的随机读写,单卷
运维落地角度,区别如下:
运维场景
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;

针对 Curve 文件存储,我们推荐给元数据服务 MetaServer 分配 3 台服务器,每台服务器运行 4 个 MetaServer,每个 MetaServer 尽可能拥有一块单独的 SSD。

9、最快速体验 Curve 的方式?

可以使用 playground 命令一键体验,详细请见【一分钟快速上手 Curve】。
    curveadm playground --kind curvefs --mountpoint path/to/mount

    10、如何部署 Curve?

    为了提高 Curve 系统的易用性,我们开发了部署运维工具 CurveAdm,目前CurveAdm 具备完善的WiKi[2],你可以在 WiKi 中找到部署 CurveBS/CurveFS 的详细步骤。后续,我们还会在 Curve 论坛中推出 SOP (Standard Operation Procedure) [3]系列教程,来帮助大家更好地使用 Curve,敬请期待。



    11、Curve 运维排障工具有哪些?

    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 是否支持物理机安装包方式的手工部署?

    支持。目前通过 CurveAdm 部署的集群和客户端都是跑在 Docker 容器内,后续 CurveAdm 也将推出物理机安装插件,这个插件可以帮助我们将客户端部署在各类物理机上(服务端仍然会跑在容器内)。但如果目前你有这方面的需求,可以使用我们的 Ansible 部署方式,虽然该部署方式即将被废弃,但仍然是有效的。

    13、Curve 是否支持超融合部署?

    Curve 支持计算存储混合部署

    14、Curve 目前支持哪些操作系统发行版?

    Curve 发行的版本支持 Debian 9及以上版本,CentOs 8及以上版本。响应社区同学的反馈支持 Centos 7、Ubuntu 20版本,CurveAdm 本月即将上线新版支持。

    15、Curve 是否可以在 ARM64 平台运行?

    支持;可参考https://github.com/opencurve/curve/tree/arm64。


    16、Curve 是否支持同城双活?异地容灾?两地三中心?

    Curve 采用 Raft 强一致性协议,具备三副本,可以很好的实现数据的容灾,并且 Curve 的副本放置策略可由用户灵活配置,实现各类高可用的需求,为关键业务提供 7x24 不间断服务。

    17、Curve 如何扩容?扩容是否会影响业务 IO?

    可以通过 CurveAdm 一键扩容集群,该操作不影响业务 IO,详见扩缩容[6]。

    18、Curve 如何升级?升级是否会影响业务 IO?

    可以通过 CurveAdm 一键升级集群,该操作不影响业务 IO,详见升级服务[7]。

    19、Curve 的日志存放在哪里?

    可通过  curveadm status -v 命令查看各服务的日志和数据目录。


    20、如何测试 Curve 文件存储性能?

    将 Curve 文件存储 mount 到本地目录后,对这个目录使用 fio 进行大文件和小文件读写测试。如:
      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 开源社区?

      Curve 开源是由 Curve 生态中的开发者、用户、合作伙伴一起建立的分享、学习社区。回答提问、撰写技术文章、参与 Curve 相关演讲分享、贡献代码均是参与社区的表现。

      22、我改了 Curve 代码,如何发布自己的版本?

      修改代码、编译、打镜像、推送镜像。

      1、拉取 Curve 代码,并修改代码
        $ cd <workspace>
        $ git clone https://github.com/opencurve/curve.git
        $ cd curve
        modify your code
        2、修改的 Curve 块存储代码,在 curve 目录执行操作4~7;
        3、如果修改的是 Curve 文件存储代码,进入 curvefs 目录,执行操作4~7;
          cd curvefs
          4、编译依赖
            make dep
            5、代码编译,如果编译 release 版本,在后面加上release=1
              make build [release=1]
              6、打镜像,TAG
                make image tag=TAG
                7、推送镜像
                  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



                  文章转载自k8s技术圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论