数据均衡

数据节点间数据均衡

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

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

概述

Container Balancer 是 Apache Ozone 中的一个工具,用于在集群内的各个节点之间均衡数据容器。它的首要目标是依据 Datanode 的磁盘空间使用情况,确保数据分布均匀。这有助于避免某些 Datanode 磁盘被写满,而另一些却未被充分利用的情况。

该均衡器通过移动 CLOSED 状态的容器副本来工作,因此不会干扰正在进行的 I/O 操作。它既支持普通容器,也支持纠删码(Erasure Coded,EC)容器。为保证集群的稳定性,在存储容器管理器(Storage Container Manager,SCM)发生故障切换后,Container Balancer 的启动会延迟一段时间。

命令行用法

Container Balancer 通过 ozone admin containerbalancer 命令进行管理。

启动

使用默认设置启动 Container Balancer:

ozone admin containerbalancer start

你也可以使用特定选项来启动均衡器:

ozone admin containerbalancer start [options]

选项:

选项说明
-t, --threshold数据节点利用率偏离集群平均利用率超过该百分比时,将对其进行再平衡。默认为 10%。
-i, --iterations平衡器最多连续运行的迭代次数。默认为 10。设为 -1 表示无限次迭代。
-d, --maxDatanodesPercentageToInvolvePerIteration单次迭代中可参与平衡的健康在服务数据节点的最大百分比。默认为 20%。
-s, --maxSizeToMovePerIterationInGB单次迭代中可移动的数据最大容量(GB)。默认为 500GB。
-e, --maxSizeEnteringTargetInGB单次迭代中可进入目标数据节点的最大容量(GB)。默认为 26GB。
-l, --maxSizeLeavingSourceInGB单次迭代中可从源数据节点移出的最大容量(GB)。默认为 26GB。
--balancing-iteration-interval-minutes容器平衡器两次迭代之间的间隔时间(分钟)。默认为 70 分钟。
--move-timeout-minutes允许单个容器从源端移动到目标端的时间(分钟)。默认为 65 分钟。
--move-replication-timeout-minutes作为容器移动的一部分,允许单个容器从源端复制到目标端的时间(分钟)。默认为 50 分钟。
--move-network-topology-enable选择目标节点时是否考虑网络拓扑。默认为 false。
--include-datanodes以逗号分隔的数据节点主机名或 IP 地址列表,这些节点将被纳入平衡。
--exclude-datanodes以逗号分隔的数据节点主机名或 IP 地址列表,这些节点将被排除在平衡之外。

状态

查看容器平衡器的状态:

ozone admin containerbalancer status

要获取更详细的状态信息,包括各次迭代的历史记录:

ozone admin containerbalancer status -v --history

停止

要停止 Container Balancer:

ozone admin containerbalancer stop

配置

Container Balancer 也可以通过 ozone-site.xml 文件进行配置。

属性说明默认值
hdds.container.balancer.utilization.threshold如果每个 Datanode 的使用率与集群使用率的差异都不超过该阈值,则认为集群是平衡的。10%
hdds.container.balancer.datanodes.involved.max.percentage.per.iteration单次迭代中可以参与均衡的健康、在服务状态的 Datanode 的最大百分比。20%
hdds.container.balancer.size.moved.max.per.iterationContainer Balancer 在单次迭代中移动的数据最大总量。500GB
hdds.container.balancer.size.entering.target.max每次迭代中可以进入目标 Datanode 的最大数据量。26GB
hdds.container.balancer.size.leaving.source.max每次迭代中可以离开源 Datanode 的最大数据量。26GB
hdds.container.balancer.iterationsContainer Balancer 将运行的迭代次数。10
hdds.container.balancer.exclude.containers要排除在均衡之外的容器 ID 列表,以逗号分隔。""
hdds.container.balancer.move.timeout单个容器从源移动到目标所允许的时间。65m
hdds.container.balancer.move.replication.timeout作为容器移动的一部分,单个容器从源复制到目标所允许的时间。50m
hdds.container.balancer.balancing.iteration.intervalContainer Balancer 每次迭代之间的时间间隔。70m
hdds.container.balancer.include.datanodesDatanode 主机名或 IP 地址列表,以逗号分隔。仅对列表中指定的 Datanode 进行均衡。""
hdds.container.balancer.exclude.datanodesDatanode 主机名或 IP 地址列表,以逗号分隔。列表中指定的 Datanode 将被排除在均衡之外。""
hdds.container.balancer.move.networkTopology.enable为源选择目标时是否考虑网络拓扑。false
hdds.container.balancer.trigger.du.before.move.enable是否在开始均衡迭代之前立即向所有健康且在服务状态的数据节点发送命令以运行 du。false

评论

登录后参与评论

正在加载评论…