性能

多 Raft

师成师成· 更新于 2026-09-28· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Datanode 中的 Multi-Raft

Multi-Raft 支持允许一个 Datanode 同时参与多个 Ratis 复制组(流水线),从而提升写入吞吐量,并确保更好地利用磁盘和网络资源。当 Datanode 拥有多个磁盘,或者网络带宽非常高时,这一特性尤其有用。

背景

早期的 Ozone 版本中,每个 Datanode 仅支持一条 Raft 流水线。这限制了它处理复制数据并发写入的能力,并导致资源得不到充分利用。Multi-Raft 的引入极大地提升了资源利用率。

前提条件

  • Ozone 0.5.0 或更高版本

  • 复制类型:Ratis

  • 每个 Datanode 上配置多个元数据目录(通过 hdds.container.ratis.datanode.storage.dir)

    • 足够的 CPU、内存和网络带宽

工作原理

SCM 现在可以创建相互重叠的流水线:每个 Datanode 可以加入多个 Raft 组,直到达到可配置的上限。这提高了并发能力,并避免了节点和磁盘的闲置。Raft 日志分别存储在不同的元数据目录中,以减少磁盘争用。Ratis 负责处理每个节点上的并发日志。

配置

  • hdds.container.ratis.datanode.storage.dir(无默认值)

    • 元数据目录路径的列表。
  • ozone.scm.datanode.pipeline.limit(默认值:2)

    • 每个 Datanode 可以参与的最大流水线数量。取值为 0 表示每个 Datanode 的流水线上限将由该 Datanode 报告的元数据磁盘数量决定;请参见下一个属性。
  • ozone.scm.pipeline.per.metadata.disk(默认值:2)

    • Datanode 的最大流水线数量由该 Datanode 上的磁盘数量决定。该属性仅在上一个属性设置为 0 时生效。该属性的值必须大于 0。

有关 SCM 如何应用集群级别和 Datanode 级别的限制(包括 ozone.scm.ratis.pipeline.limit),请参阅计算 Ratis 流水线上限。

使用方法

  1. 配置 Datanode 的元数据目录:

    <property>
      <name>hdds.container.ratis.datanode.storage.dir</name>
      <value>/disk1/ratis,/disk2/ratis,/disk3/ratis,/disk4/ratis</value>
    </property>
  2. 在 ozone-site.xml 中设置流水线上限:

    <property>
      <name>ozone.scm.datanode.pipeline.limit</name>
      <value>0</value>
    </property>
    <property>
      <name>ozone.scm.pipeline.per.metadata.disk</name>
      <value>2</value>
    </property>
  3. 重启 SCM 和 Datanode。

  4. 使用以下命令进行验证:

    ozone admin pipeline list
    ozone admin datanode list

运维提示

  • 使用 ozone admin CLI 和 Recon UI 进行监控。

  • 确保管道数量符合预期。为获得最佳的 I/O 隔离效果,请将 hdds.container.ratis.datanode.storage.dir 配置为多个不同物理磁盘上的路径,Ratis 管道将相应地进行分布。

    • 由于内存/CPU 开销,请谨慎设置过高的管道数量。

高级 Ratis 配置

任何 Ratis 配置属性都可以通过添加相应的前缀来设置。下表列出了各 Ozone 组件所使用的前缀。

Ozone 组件配置前缀示例:设置 raft.server.write.byte-limit
Ozone Manager (OM)ozone.om.ha.使用 ozone.om.ha.raft.server.write.byte-limit
Storage Container Manager (SCM)ozone.scm.ha.使用 ozone.scm.ha.raft.server.write.byte-limit
Datanodehdds.ratis.使用 hdds.ratis.raft.server.write.byte-limit
Ozone Clienthdds.ratis.使用 hdds.ratis.raft.server.write.byte-limit

另请参阅 Apache Ratis 配置文档。

限制

  • 全局配置:无法为单个节点设置限制
  • 修改存储目录后需要重启
  • 对纠删码(EC)管道无效

参考资料

评论

登录后参与评论

正在加载评论…