多 Raft
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 流水线上限。
使用方法
配置 Datanode 的元数据目录:
<property> <name>hdds.container.ratis.datanode.storage.dir</name> <value>/disk1/ratis,/disk2/ratis,/disk3/ratis,/disk4/ratis</value> </property>在
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>重启 SCM 和 Datanode。
使用以下命令进行验证:
ozone admin pipeline list ozone admin datanode list
运维提示
使用
ozone adminCLI 和 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 |
| Datanode | hdds.ratis. | 使用 hdds.ratis.raft.server.write.byte-limit |
| Ozone Client | hdds.ratis. | 使用 hdds.ratis.raft.server.write.byte-limit |
另请参阅 Apache Ratis 配置文档。
限制
- 全局配置:无法为单个节点设置限制
- 修改存储目录后需要重启
- 对纠删码(EC)管道无效
参考资料
评论
登录后参与评论
KnowForge