数据节点
概述
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 启动过程中,系统会对所有已配置的卷进行全面检查,以确定是否存在故障的卷。初始化过程如下:
- 从配置中解析所有卷的位置
- 尝试创建并访问每个卷
- 执行目录存在性和权限检查
- 将故障的卷移入单独的故障卷映射中
如果某个卷在初始化期间发生故障:
- 该卷会被立即标记为故障
- 它会从活动卷映射移动到故障卷映射
- 如果剩余的卷数量足够(取决于容忍度设置),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.count | 3 | 判定故障所需的 I/O 测试次数。设置为 0 可禁用 I/O 检查。 |
hdds.datanode.disk.check.io.failures.tolerated | 1 | 在将卷标记为故障之前允许的 I/O 测试失败次数 |
hdds.datanode.disk.check.io.file.size | 100B | 用于 I/O 健康检查的临时文件大小 |
hdds.datanode.disk.check.min.gap | 10m | 同一卷两次连续检查之间的最小时间间隔 |
hdds.datanode.disk.check.timeout | 10m | 完成一次磁盘检查所允许的最长时间 |
故障卷处理
当某个卷发生故障时,系统会:
- 立即将其从活动卷映射中移除,并加入故障卷映射
- 将其排除在容器分配之外(卷选择策略只考虑健康的卷)
- 在指标中进行跟踪(健康计数减一,故障计数加一)
如果故障卷数量超过容忍上限,Datanode 将触发致命故障处理,并可能停止提供服务。
更换故障磁盘
注意
重要限制:不支持热插拔
Ozone Datanode 目前不支持磁盘热插拔。要更新磁盘列表(添加或移除卷),必须重启 Datanode 进程。
更换故障磁盘的步骤
识别故障卷
- 查看 Datanode 日志中的卷故障消息
- 监控 Datanode Web UI 或指标以了解卷的状态
- 故障卷在卷状态中会显示为 "FAILED"
关闭 Datanode
# 停止 Datanode 服务 ozone --daemon stop datanode更新配置
- 编辑 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>- 编辑 Datanode 配置文件(
重启 Datanode
# 启动 Datanode 服务 ozone --daemon start datanode验证卷状态
- 检查 Datanode 日志,确认卷已正确初始化
- 在 Web UI 中验证新卷显示为健康状态
- 监控指标,确保故障卷已不再出现
物理磁盘更换
物理更换磁盘时:
- 验证容器已完成复制(由 Ozone 自动处理)
- 正常关闭 Datanode
- 物理更换磁盘
- 对新磁盘进行格式化并挂载到目标路径
- 更新
hdds.datanode.dir配置 - 重启 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-2 个故障)
- 定期通过 Web UI 和指标监控卷健康状态
- 为磁盘更换规划维护窗口(不支持热插拔)
- 在移除故障磁盘之前验证容器已完成复制
- 根据环境需要调整定期磁盘检查间隔
- 分别为数据卷、元数据卷和数据库卷配置容错
评论
登录后参与评论
KnowForge