磁盘更换

数据节点

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

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

概述

Ozone 数据节点(Datanode)可以同时管理多个数据卷(磁盘)。本文档介绍 Ozone 数据节点如何检测和处理卷故障,以及如何更换故障磁盘。

卷配置

数据卷

数据卷通过 hdds.datanode.dir 属性进行配置。每个目录代表数据节点将要管理的一个卷(磁盘)。

示例:

<property>
  <name>hdds.datanode.dir</name>
  <value>/data1,/data2,/data3</value>
</property>

该配置指示 Datanode 管理三个独立的卷:/data1、/data2 和 /data3。

元数据卷

元数据卷用于存储 Ratis 元数据(日志),通过 hdds.container.ratis.datanode.storage.dir 进行配置。若未显式配置,元数据将存储在默认的元数据目录中。

数据库卷

数据库卷用于存储每个卷对应的 RocksDB 实例,通过 hdds.datanode.container.db.dir 进行配置。这是可选项——若未指定,RocksDB 实例将与 HDDS 数据存储在同一磁盘上。

note

默认情况下,元数据卷和数据库卷与数据卷共享相同的物理磁盘。可以将它们配置到独立的磁盘(例如 SSD)上以获得更好的性能,但这不是必需的。


卷故障容忍度

Ozone Datanode 在停止服务之前可以容忍可配置数量的卷故障。以下配置属性用于控制这一行为:

数据卷故障容忍度

属性: hdds.datanode.failed.data.volumes.tolerated

默认值: -1(无限制)

说明: 在 Datanode 停止提供服务之前,允许故障的数据卷数量。设置为 -1 时表示可以容忍任意数量的故障,但 Datanode 要继续运行,必须至少保留一个正常的卷。

示例:

<property>
  <name>hdds.datanode.failed.data.volumes.tolerated</name>
  <value>2</value>
</property>

这允许在 Datanode 停止服务之前最多有 2 个数据卷发生故障。

元数据卷故障容忍度

属性: hdds.datanode.failed.metadata.volumes.tolerated

默认值: -1(无限制)

描述: 在 Datanode 停止提供服务之前,允许发生故障的元数据卷数量。与数据卷类似,-1 表示不限制故障数量,但必须至少保留一个正常的元数据卷。

数据库卷故障容忍度

属性: hdds.datanode.failed.db.volumes.tolerated

默认值: -1(无限制)

描述: 在 Datanode 停止提供服务之前,允许发生故障的数据库卷数量。当设置为 -1 时,不限制故障数量,但必须至少保留一个正常的数据库卷。


卷故障检测

启动检查

在 Datanode 启动过程中,系统会对所有已配置的卷进行全面检查,以确定是否存在故障的卷。初始化过程如下:

  1. 从配置中解析所有卷的位置
  2. 尝试创建并访问每个卷
  3. 执行目录存在性和权限检查
  4. 将故障的卷移入单独的故障卷映射中

如果某个卷在初始化期间发生故障:

  • 该卷会被立即标记为故障
  • 它会从活动卷映射移动到故障卷映射
  • 如果剩余的卷数量足够(取决于容忍度设置),Datanode 将继续启动
  • 如果所有卷都发生故障或超出容忍度限制,Datanode 将中止启动

定期磁盘检查

启动后,Datanode 会定期运行磁盘健康检查,以检测运行期间发生故障的卷。

属性: hdds.datanode.periodic.disk.check.interval.minutes

默认值: 60(分钟)

描述: 执行定期磁盘检查的时间间隔。这些检查会验证:

  • 目录是否存在且可访问
  • 目录权限
  • 磁盘 I/O 功能(读写测试)
  • 对于使用 RocksDB 的数据卷:数据库的可访问性

示例:

<property>
  <name>hdds.datanode.periodic.disk.check.interval.minutes</name>
  <value>30</value>
</property>

这将把磁盘检查设置为每 30 分钟运行一次,而非默认的 60 分钟。

磁盘检查配置

其他属性可控制磁盘健康检查的行为:

属性默认值描述
hdds.datanode.disk.check.io.test.count3判定故障所需的 I/O 测试次数。设置为 0 可禁用 I/O 检查。
hdds.datanode.disk.check.io.failures.tolerated1在将卷标记为故障之前允许的 I/O 测试失败次数
hdds.datanode.disk.check.io.file.size100B用于 I/O 健康检查的临时文件大小
hdds.datanode.disk.check.min.gap10m同一卷两次连续检查之间的最小时间间隔
hdds.datanode.disk.check.timeout10m完成一次磁盘检查所允许的最长时间

故障卷处理

当某个卷发生故障时,系统会:

  1. 立即将其从活动卷映射中移除,并加入故障卷映射
  2. 将其排除在容器分配之外(卷选择策略只考虑健康的卷)
  3. 在指标中进行跟踪(健康计数减一,故障计数加一)

如果故障卷数量超过容忍上限,Datanode 将触发致命故障处理,并可能停止提供服务。


更换故障磁盘

注意

重要限制:不支持热插拔

Ozone Datanode 目前不支持磁盘热插拔。要更新磁盘列表(添加或移除卷),必须重启 Datanode 进程。

更换故障磁盘的步骤

  1. 识别故障卷

    • 查看 Datanode 日志中的卷故障消息
    • 监控 Datanode Web UI 或指标以了解卷的状态
    • 故障卷在卷状态中会显示为 "FAILED"
  2. 关闭 Datanode

    # 停止 Datanode 服务
    ozone --daemon stop datanode
  3. 更新配置

    • 编辑 Datanode 配置文件(ozone-site.xml 或等效文件)
    • 从 hdds.datanode.dir 中移除故障的卷目录
    • 如果要替换为新磁盘,请添加新的卷目录

    示例 - 移除 /data3 并添加 /data4:

    <!-- 修改前 -->
    <property>
      <name>hdds.datanode.dir</name>
      <value>/data1,/data2,/data3</value>
    </property>
    
    <!-- 修改后 -->
    <property>
      <name>hdds.datanode.dir</name>
      <value>/data1,/data2,/data4</value>
    </property>
  4. 重启 Datanode

    # 启动 Datanode 服务
    ozone --daemon start datanode
  5. 验证卷状态

  • 检查 Datanode 日志,确认卷已正确初始化
    • 在 Web UI 中验证新卷显示为健康状态
    • 监控指标,确保故障卷已不再出现

物理磁盘更换

物理更换磁盘时:

  1. 验证容器已完成复制(由 Ozone 自动处理)
  2. 正常关闭 Datanode
  3. 物理更换磁盘
  4. 对新磁盘进行格式化并挂载到目标路径
  5. 更新 hdds.datanode.dir 配置
  6. 重启 Datanode

监控卷健康状态

可通过以下方式查看卷状态:

  • Datanode Web UI: http://<datanode-host>:<datanode-http-port> - 显示卷目录、类型、容量、使用情况以及状态(HEALTHY/FAILED)
  • JMX 指标: http://<datanode-host>:<datanode-http-port>/jmx?qry=Hadoop:service=HddsDatanode,name=VolumeInfoMetrics* - 提供每个卷的指标,包括状态

最佳实践

  1. 根据冗余需求配置容错设置(生产环境允许 1-2 个故障)
  2. 定期通过 Web UI 和指标监控卷健康状态
  3. 为磁盘更换规划维护窗口(不支持热插拔)
  4. 在移除故障磁盘之前验证容器已完成复制
  5. 根据环境需要调整定期磁盘检查间隔
  6. 分别为数据卷、元数据卷和数据库卷配置容错

评论

登录后参与评论

正在加载评论…