分布式系统中Topology(Rack) Awareness的实现思路

本文探讨了在大规模分布式系统中,为何需要考虑Topology Awareness(机架感知),以优化网络数据通信,避免资源消耗。文章介绍了实现Topology Awareness的一般步骤,包括节点位置赋予、拓扑结构组织和距离计算,以及最近节点的选择策略。通过这种方式,可以提高数据本地性的通信效率,减少跨机房、机架的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言


在分布式系统中,尤其是存储系统中,我们经常会看到类似“系统返回一个最近的数据”这样的句子”。当我们谈到一个数据“远近”的问题时,你可以说这是在谈数据locality的问题,但从更宏观的角度来看这个问题,它其实谈的是Topology Awareness(拓扑架构感知)的事情。本文笔者来简单聊聊这个话题,其实我们平时更多的是用另一个词–Rack-Awareness(机架感知)来指代这个问题。

为何要考虑Topology Awareness


其实在小规模,小体量集群环境中,是确实可以不用考虑拓扑结构感知的问题的。这里的结构可理解为是它的网络结构(/data center/rack/node)。但是当集群规模变大,甚至有了不同的数据中心,机房时,这里面就要考虑网络数据通信的问题。也就是我们需要开始重视这里面的网络结构的问题,总不能每天把机房带宽打满吧。基本原则是优先访问本地(可以同节点,rack,datacener)数据,尽可能避免远程数据传输。所以Topology Awareness要解决的就是这样的一个问题,避免的是一个resource消耗的问题。

Topology Awareness的一般实现思路


结合HDFS内部的NetworkTopology实现以及最近Ozone的Topology Awareness设计实现,笔者来简单概括下其中的设计思想,还是有很多通用的地方可以借鉴借鉴的。

Step1: Node Location赋予


节点的拓扑结构位置赋予是Topology Awareness的一个初始前提。一般情况下,我们会将节点实际的网络位置情况作为它的实际位置值,比如如下:

/data-center/rack/node

或者说

### Hadoop 高可用性配置与最佳实践 #### 1. NameNode 的高可用性 为了提高 Hadoop 集群的可靠性,NameNode 的高可用性(HA)是一个重要方面。通过设置多个 NameNode 实现 HA,在 Active/Standby 模式下工作。当主节点失效时,备用节点可以接管其职责而不会丢失数据或中断服务。 #### 2. JournalNodes 和 Quorum-based Storage 在启用 NameNode HA 后,编辑日志会被写入一组称为 JournalNodes 的服务器上。这些 JournalNodes 使用基于法定人数(quorum)机制来确保大多数副本达成一致,从而防止脑裂(split-brain)情况发生[^1]。 #### 3. ZooKeeper Failover Controller (ZKFC) 每个 NameNode 上都会运行一个 ZKFC 进程,用于监控该 NameNode 的健康状况并向 Zookeeper 报告状态变化。如果检测到当前活跃(active)的 NameNode 出现故障,则会触发自动切换至 standby 节点成为新的 active node。 #### 4. DataNode 的冗余部署 除了关注 Namenode 的高可用外,DataNode 层面也需要考虑如何增强系统的鲁棒性和容错能力。通常做法是在不同机架(rack-awareness)甚至数据中心间分布存储块(replicas),以此降低单点失败风险并提升读取性能。 ```bash # 设置 rack awareness 参数 dfs.datanode.du.reserved=5G net.topology.script.file.name=/etc/hadoop/conf/topology.sh ``` #### 5. ResourceManager 的高可用性 对于 YARN 架构而言,ResourceManager(RM)同样支持 HA 功能。RM HA 方案依赖于两个 RM 组件之间的协调以及应用程序历史记录(Application History Service,AHS)的服务共享。这使得即使其中一个 RM 失效也能保证作业继续执行而不受影响。 ```xml <!-- yarn-site.xml --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>mycluster</value> </property> ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值