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 之间的专线流量。
HDFS可用区域:多机房/AZ的 DataNode 直接跨机房组成一个集群,向相同的 NameNode (一般部署在主要机房/AZ)汇报,DN间存在跨机房专线流量的限制。
跨机房流量来源:
读取:AZ1客户端想要读取AZ2的数据
写入:副本所在的目标DN节点不在同一AZ,客户端与目标dn不在同一AZ
副本转移:balance/decommission/修块/升降副本数,将数据跨AZ转移
计算shuffle:计算节点不在同一AZ时,shuffle等操作会产生跨机房流量
azPolicy文件示例:
[
{
"path": "/home/multiAZ-test/",
"defaultFS": "hdfs://default",
"mainAZ": "/sh/shbt",
"nativeWrite": false,
"azPolicy": "/sh/shbt,/sh/shbt,/sh/shyc"
}
]
3. 跨机房流量缓解方案
读取
配置多AZ策略,使得数据分布在多个AZ
用不同AZ的客户端读取过程中(直连/router),按照拓扑结构将节点由近到远排序,优先选择就近(本AZ)的数据节点
写入
调度任务产生的临时数据,不参与后续的计算:
引入nativeWrite概念,当nativeWrite为true的时候,对应的目录只写本AZ
业务写入/任务生成的数据:
未配置多AZ策略的目录,会优先写到客户端同一AZ的数据节点上
同一区域,不同AZ:配置多AZ策略的目录,若有本AZ的副本,优先写;其他副本陆续跨AZ写入 (shbt客户端先写两副本在本机房,再跨一次AZ专线写一副本到shyc机房)
不同区域:优先将所有副本写至与客户端同一AZ的数据节点中,后续通过azmover限流进行副本的移动 (shbt客户端先写三副本在本机房,后续通过azmover挪动一副本至lycc机房)
副本转移
balance/decommission是优先在同一AZ/机房的数据节点之间进行数据块的移动
升副本
先在已有副本的可用区,进行同机房内的复制
azmover运行后,按照设定好azpolicy挪动数据块的位置(注意azpolicy的数量和副本数不同的情况),流量可控
降副本
优先降副本数较多的可用区的副本,在副本数足够的情况下,优先保证每个AZ都至少存在1副本
azmover运行后,按照设定好azpolicy挪动数据块的位置(注意azpolicy的数量和副本数不同的情况),流量可控
计算shuffle
利用 Yarn 的 label 功能和 Yarn Federation 将资源队列进行了划分,可以将资源队列使用的计算节点与机房强绑定,在同一个资源队列里,其计算任务只能调度到同一机房的节点运行,不会存在跨机房的情况,避免了 shuffle 数据跨机房。
4. 容灾方案
客户端:计算节点 & 业务使用hdfs客户端
元信息:NN & JN & zk:NN采用2+2(1主3备),JN和zk采用2+2+1(分布在3个机房,挂掉任意一个机房都可以满足过半数的要求)
数据:所有DN(分布在两个机房)
灾害类型 | 没有多AZ的情况 | 多AZ解决方案 |
---|---|---|
机房断电 | 服务不可用 | 服务平滑切到另一个机房,读写正常运行 |
机房断网(AZ1数据孤岛) | 与外界断联 | 孤岛机房下线,NN/JN切到AZ2并正常运行,业务可以切换至AZ2的客户端,正常访问 |
5. 需新增监控项
根据AZ区分容量使用率,根据实际情况及时调整azpolicy分布策略
跨地区读取,但实际未配置多AZ策略的目录,需要监控到,联系业务进行调整
专线网络流量监控:总流量&多方向监控
6. 未来优化项
目标节点负载均衡:AzMover计算所有节点容量,target选择容量较为富裕的节点。
新增客户端查询指定路径的azpolicy命令
精简跨AZ操作,减少跨区专线流量:当前使用move操作,没有从外部增加副本操作(copy block)。后序开发datanode copy block接口。尽可能减少跨AZ的操作,比如(AZ1 AZ1 AZ2)到(AZ1 AZ2 AZ2)。当前操作是AZ1 move AZ2,跨AZ操作一次,最优的方式是 AZ2 copy, remove AZ1。
多fed执行:启动一个AzMover可以完成所有federation的move操作。
多方向限速:例如北京到洛阳、洛阳到北京单独限速。现在整个集群共享一个限速队列。
在多Region的基础上,拓展多Available Zone的层级,进一步减少跨专线流量。
editlog/fsimage等元信息的同步,跨机房/跨区域的延时是否能满足。
END
360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。
目前,智汇云提供数据库、中间件、存储、大数据、人工智能、计算、网络、视联物联与通信等多种产品服务以及一站式解决方案,助力客户降本增效,累计服务业务1000+。
智汇云致力于为各行各业的业务及应用提供强有力的产品、技术服务,帮助企业和业务实现更大的商业价值。
官网:https://zyun.360.cn 或搜索“360智汇云”
客服电话:4000052360
欢迎使用我们的产品!😊
关注公众号,干货满满的前沿技术文章等你来。想看哪方面内容,也欢迎留言和我们交流!