数据节点

数据节点下线

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

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

数据节点退役是从 Ozone 集群中移除现有数据节点的过程,同时确保新的数据不会写入被退役的数据节点。当你发起数据节点的退役流程时,Ozone 会自动确保该数据节点上的所有存储容器在退役完成之前,已在另一个数据节点上创建了额外的副本。因此,数据节点在退役后仍会继续运行,可以用于读取操作,但在被手动停止之前不能用于写入操作。

当我们发起退役流程时,首先会检查该节点的当前状态,理想情况下应为 IN_SERVICE,然后将其状态更改为 DECOMMISSIONING 并开始退役流程。该流程会经历一系列工作流,具体如下:

  1. 首先触发一个事件来关闭该节点上的所有管道,这也会同时关闭相应的容器。
  2. 接着获取该节点上的容器,并检查是否需要创建新的副本。如果需要,则调度新的副本创建。
  3. 调度完副本复制后,该节点将保持待处理状态,直到复制完成。
  4. 在此阶段,该节点将完成退役流程,其状态将被更改为 DECOMMISSIONED。

要查看数据节点的当前状态,可以执行以下命令:

ozone admin datanode list

要退役一个 Datanode,你可以在 CLI 中执行以下命令:

ozone admin datanode decommission [-hV] [-id=<scmServiceId>]
       [--scm=<scm>] [<hosts>...]

你可以输入多个主机,以便同时退役多个 Datanode。

要查看正在退役的 Datanode 的状态,可以执行以下命令:

ozone admin datanode status decommission [-hV] [-id=<scmServiceId>] [--scm=<scm>] [--id=<uuid>] [--ip=<ipAddress>]

您可以传入某个 Datanode 的 IP 地址或 UUID,以仅查看与该 Datanode 相关的详细信息。

注意: 要重新启用(recommission)一个 Datanode,您可以在 CLI 中执行以下命令:

ozone admin datanode recommission [-hV] [-id=<scmServiceId>]
       [--scm=<scm>] [<hosts>...]

调优与监控退役过程

Datanode 退役过程涉及将其所有容器复制到集群中的其他 Datanode。该过程的速度可以通过若干配置属性进行调优,其进度也可以通过相应的指标进行监控。

配置属性

管理员可以在 ozone-site.xml 中调整以下属性,以控制退役期间的容器复制速度。这些属性按其主要配置所在组件进行分组。

SCM 侧属性

  • hdds.scm.replication.datanode.replication.limit

    • 用途:定义 SCM 将向单个 Datanode 发送的并发复制命令的基础限制。
    • 默认值:20。
    • 详情:处于退役状态的 Datanode 的实际限制为该值乘以 hdds.datanode.replication.outofservice.limit.factor。

Datanode 侧属性

  • hdds.datanode.replication.outofservice.limit.factor

    • 用途:用于提升处于 DECOMMISSIONING(退役中)或 MAINTENANCE(维护中)状态节点复制能力的乘数。这是调优退役速度的关键属性。
    • 默认值:2.0。
    • 详情:虽然这是 Datanode 属性,但也必须在 SCM 的配置中设置。SCM 使用它来发送更多复制命令,Datanode 使用它来增加内部资源(线程和队列)以应对增加的负载。
  • hdds.datanode.replication.queue.limit

    • 用途:设置 Datanode 上接收复制请求的队列基础容量。
    • 默认值:4096。
    • 详情:对于退役中的节点,该限制会按 hdds.datanode.replication.outofservice.limit.factor 进行缩放。
  • hdds.datanode.replication.streams.limit

    • 用途:设置 Datanode 上复制线程池的基础线程数。
    • 默认值:10。
    • 详情:对于退役中的节点,该限制同样会按 hdds.datanode.replication.outofservice.limit.factor 进行缩放。

通过调优这些属性,管理员可以在退役速度与集群性能影响之间取得平衡。

指标

可以使用以下指标来监控 Datanode 退役的进度。括号中的名称是对应的 Prometheus 指标名称,可能会因指标 sink 配置的不同而略有差异。

SCM 侧指标(ReplicationManagerMetrics)

这些指标可在 SCM 上获取,提供复制过程的集群级视图。在退役期间,应能看到这些指标的增加。括号中的名称是对应的 Prometheus 指标名称。

  • InflightReplication(replication_manager_metrics_inflight_replication):当前正在进行的容器副本复制请求数量。
  • replicationCmdsSentTotal(replication_manager_metrics_replication_cmds_sent_total):已向 Datanode 发出的复制命令总数。
  • replicasCreatedTotal(replication_manager_metrics_replicas_created_total):成功创建的容器副本总数。
  • replicateContainerCmdsDeferredTotal(replication_manager_metrics_replicate_container_cmds_deferred_total):因源 Datanode 过载而被延迟的复制命令数量。如果该值较高,可能说明源 Datanode(包括正在退役的节点)过于繁忙。

Datanode 侧指标(MeasuredReplicator 指标)

这些指标在每个 Datanode 上都可用。对于正在退役的节点,它们展示的是该节点作为副本源的活动情况;对于其他节点,展示的则是它们作为副本目标的活动情况。括号中是对应的 Prometheus 指标名称。

  • success(measured_replicator_success):成功执行的复制任务数量。
  • successTime(measured_replicator_success_time):成功复制任务所花费的总时间。
  • transferredBytes(measured_replicator_transferred_bytes):成功复制所传输的总字节数。
  • failure(measured_replicator_failure):失败的复制任务数量。
  • failureTime(measured_replicator_failure_time):失败的复制任务所花费的总时间。
  • failureBytes(measured_replicator_failure_bytes):未能成功传输的总字节数。
  • queueTime(measured_replicator_queue_time):任务在复制队列中花费的总时间。数值过高可能表明该 Datanode 过载。

通过监控这些指标,管理员可以清晰地了解退役进度,并找出潜在的瓶颈。

从列表中移除已退役的 Datanode

成功退役一个 Datanode 后,它仍会出现在 ozone admin datanode list 的输出中,状态为 DECOMMISSIONED。

预期行为

只要 Storage Container Manager(SCM)进程处于运行状态,DEAD 和 DECOMMISSIONED 的节点就会保留在 SCM 节点列表中,这属于预期行为。SCM 会将这些记录保存在内存中,以便展示集群的历史信息并协助故障排查。由于即使有数千个 Datanode,其元数据量也相对较小,因此不会产生明显的性能影响。

如何清空列表

Datanode 信息仅存储在 SCM 的内存中。要从 ozone admin datanode list 中彻底移除已退役或已失效的节点,必须重启 SCM。

重启后,SCM 会进入安全模式,并仅根据自行注册的 Datanode 从头重建其集群成员列表。处于离线状态或已退役的节点不会注册,因此将从列表中移除。

:::note
目前还没有 CLI 命令可以在不重启的情况下手动"忘记"某个节点。
:::

评论

登录后参与评论

正在加载评论…