数据节点下线
数据节点退役是从 Ozone 集群中移除现有数据节点的过程,同时确保新的数据不会写入被退役的数据节点。当你发起数据节点的退役流程时,Ozone 会自动确保该数据节点上的所有存储容器在退役完成之前,已在另一个数据节点上创建了额外的副本。因此,数据节点在退役后仍会继续运行,可以用于读取操作,但在被手动停止之前不能用于写入操作。
当我们发起退役流程时,首先会检查该节点的当前状态,理想情况下应为 IN_SERVICE,然后将其状态更改为 DECOMMISSIONING 并开始退役流程。该流程会经历一系列工作流,具体如下:
- 首先触发一个事件来关闭该节点上的所有管道,这也会同时关闭相应的容器。
- 接着获取该节点上的容器,并检查是否需要创建新的副本。如果需要,则调度新的副本创建。
- 调度完副本复制后,该节点将保持待处理状态,直到复制完成。
- 在此阶段,该节点将完成退役流程,其状态将被更改为
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 命令可以在不重启的情况下手动"忘记"某个节点。
:::
评论
登录后参与评论
KnowForge