HDFS多AZ容灾技术揭秘:构建高可用分布式存储系统

1. 背景

当HDFS节点因为不可抗力因素(比如机房火灾、断电)或者设备故障(软、硬件破坏)导致应用在短时间内无法恢复时,HDFS容灾服务支持业务的跨可用区(Availability Zone)的容灾能力,对整体的应用做容灾备份来应对单地区的故障,满足业务的RTO(Recovery Point Objective)、RPO(Recovery Time Objective)核心指标。

HDFS 多机房的问题归根结底就是专线流量的问题,因为数据的读写流量是远远大于机房之间的专线带宽的,稍有不慎就会导致专线打满,影响其他跨专线业务。

从设计上,我们需要尽最大可能避免用户读写 HDFS 跨专线,以保证专线带宽的使用在一个合理的范围内。

2. 整体架构

地域/区域(Region): 主要是物理上的地域比如市、县。一个 Region 会有多个机房。跨 Region 的专线成本和延时都会比较高。

可用区(Avaliable Zone,简称 AZ): 指由多个 Zone 组成的可用区。AZ 和 AZ 之间通过专线连接,AZ 之间的距离一般不会太远(<100公里)。通常我们说的跨机房流量,指的就是 AZ 之间的专线流量。

06506042721becc1b49168950adabc2f.png

HDFS可用区域:多机房/AZ的 DataNode 直接跨机房组成一个集群,向相同的 NameNode (一般部署在主要机房/AZ)汇报,DN间存在跨机房专线流量的限制。

b553d4765c5a617793b8ecd5b6338ec9.png

跨机房流量来源:

  1. 读取:AZ1客户端想要读取AZ2的数据

  2. 写入:副本所在的目标DN节点不在同一AZ,客户端与目标dn不在同一AZ

  3. 副本转移:balance/decommission/修块/升降副本数,将数据跨AZ转移

  4. 计算shuffle:计算节点不在同一AZ时,shuffle等操作会产生跨机房流量

azPolicy文件示例:

 
 
[
  {
    "path": "/home/multiAZ-test/",
    "defaultFS": "hdfs://default",
    "mainAZ": "/sh/shbt",
    "nativeWrite": false,
    "azPolicy": "/sh/shbt,/sh/shbt,/sh/shyc"
  }
]

3. 跨机房流量缓解方案

读取

  1. 配置多AZ策略,使得数据分布在多个AZ

  2. 用不同AZ的客户端读取过程中(直连/router),按照拓扑结构将节点由近到远排序,优先选择就近(本AZ)的数据节点

写入

  1. 调度任务产生的临时数据,不参与后续的计算:

    1. 引入nativeWrite概念,当nativeWrite为true的时候,对应的目录只写本AZ

  2. 业务写入/任务生成的数据:

    1. 未配置多AZ策略的目录,会优先写到客户端同一AZ的数据节点上

    2. 同一区域,不同AZ:配置多AZ策略的目录,若有本AZ的副本,优先写;其他副本陆续跨AZ写入 (shbt客户端先写两副本在本机房,再跨一次AZ专线写一副本到shyc机房)

    3. 不同区域:优先将所有副本写至与客户端同一AZ的数据节点中,后续通过azmover限流进行副本的移动 (shbt客户端先写三副本在本机房,后续通过azmover挪动一副本至lycc机房)

副本转移

  1. balance/decommission是优先在同一AZ/机房的数据节点之间进行数据块的移动

  2. 升副本

    1. 先在已有副本的可用区,进行同机房内的复制

    2. azmover运行后,按照设定好azpolicy挪动数据块的位置(注意azpolicy的数量和副本数不同的情况),流量可控

  3. 降副本

    1. 优先降副本数较多的可用区的副本,在副本数足够的情况下,优先保证每个AZ都至少存在1副本

    2. azmover运行后,按照设定好azpolicy挪动数据块的位置(注意azpolicy的数量和副本数不同的情况),流量可控

计算shuffle

利用 Yarn 的 label 功能和 Yarn Federation 将资源队列进行了划分,可以将资源队列使用的计算节点与机房强绑定,在同一个资源队列里,其计算任务只能调度到同一机房的节点运行,不会存在跨机房的情况,避免了 shuffle 数据跨机房。

4. 容灾方案

24ced48b3866009df2c8790927eed1f3.png

  1. 客户端:计算节点 & 业务使用hdfs客户端

  2. 元信息:NN & JN & zk:NN采用2+2(1主3备),JN和zk采用2+2+1(分布在3个机房,挂掉任意一个机房都可以满足过半数的要求)

  3. 数据:所有DN(分布在两个机房)

灾害类型

没有多AZ的情况

多AZ解决方案

机房断电

服务不可用

服务平滑切到另一个机房,读写正常运行

机房断网(AZ1数据孤岛)

与外界断联

孤岛机房下线,NN/JN切到AZ2并正常运行,业务可以切换至AZ2的客户端,正常访问

5. 需新增监控项

  1. 根据AZ区分容量使用率,根据实际情况及时调整azpolicy分布策略

  2. 跨地区读取,但实际未配置多AZ策略的目录,需要监控到,联系业务进行调整

  3. 专线网络流量监控:总流量&多方向监控

6. 未来优化项

  1. 目标节点负载均衡:AzMover计算所有节点容量,target选择容量较为富裕的节点。

  2. 新增客户端查询指定路径的azpolicy命令

  3. 精简跨AZ操作,减少跨区专线流量:当前使用move操作,没有从外部增加副本操作(copy block)。后序开发datanode copy block接口。尽可能减少跨AZ的操作,比如(AZ1 AZ1 AZ2)到(AZ1 AZ2 AZ2)。当前操作是AZ1 move AZ2,跨AZ操作一次,最优的方式是 AZ2 copy, remove AZ1。

  4. 多fed执行:启动一个AzMover可以完成所有federation的move操作。

  5. 多方向限速:例如北京到洛阳、洛阳到北京单独限速。现在整个集群共享一个限速队列。

  6. 在多Region的基础上,拓展多Available Zone的层级,进一步减少跨专线流量。

  7. editlog/fsimage等元信息的同步,跨机房/跨区域的延时是否能满足。

END

360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。

目前,智汇云提供数据库、中间件、存储、大数据、人工智能、计算、网络、视联物联与通信等多种产品服务以及一站式解决方案,助力客户降本增效,累计服务业务1000+。

智汇云致力于为各行各业的业务及应用提供强有力的产品、技术服务,帮助企业和业务实现更大的商业价值。

官网:https://zyun.360.cn 或搜索“360智汇云”

客服电话:4000052360

欢迎使用我们的产品!😊

关注公众号,干货满满的前沿技术文章等你来。想看哪方面内容,也欢迎留言和我们交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值