dbaplus社群 02月13日
这个EB级大数据平台故障自愈实践,必须吹爆它!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文讲述B站借助BMR智能运维平台中的故障自愈系统,应对大数据环境中的超大规模集群、复杂服务管理和异构环境等挑战,包括背景、架构设计、技术实现、案例分析及总结展望。

🎈BMR管理大数据的规模和复杂度大,故障发现与处理困难

🌟故障自愈系统通过智能化和自动化技术提升处理能力

📄技术实现涵盖数据采集、元仓、决策定义、故障分析与处理

💡案例分析展示磁盘故障自愈流程及效果

🎉总结展望提到系统的应用成果及未来发展计划

大数据 2025-02-13 07:16 广东

面对超大规模的集群、复杂的服务管理和异构环境,该咋办?


一、背景



上图是B站一站式大数据集群管理BMR的架构图,BMR管理了大数据所有的机器和核心服务,随着B站业务的快速发展,大数据的规模和复杂度也突飞猛进。具体表现如下:





面对超大规模的集群、复杂的服务管理和异构环境,尤其是在任务运行时需要跨越多台乃至成百上千台机器的情况下,故障的及时发现与处理变得困难,这对系统的稳定性和效率构成了挑战。本文将具体讲述如何借助BMR智能运维平台中的故障自愈系统来迎接这一挑战。


二、架构设计


故障自愈系统通过智能化和自动化技术,显著提升了故障处理的及时性、智能化和可分析性,从而将被动响应转变为主动预防。具体来说:






如图所示,整个故障自愈主要包括数据采集、故障分析、故障处理、决策定义。我们通过近实时的数据采集,采用智能的故障分析和故障处理最终实现故障的高效处理和快速的自愈恢复。







三、技术实现


1、数据采集


1)数据源


故障自愈系统为了确保故障分析的准确性,我们采集了丰富的数据,下面是我们采集的核心数据:









2)元仓


元仓服务把不同来源的数据收集一起,然后对这些数据进行聚合,数据聚合的时候对数据打上业务、主机的标签,每条数据都关联上对应的主机和业务,聚合后的数据让大数据服务复杂的管理变得更简单。聚合后数据通过写入kafka最终同步到StarRocks。元仓数据就是我们实现故障自愈的底座。



2、决策定义


我们针对不同类型的服务和故障,制定了差异化的处理策略,构建了一个全面的知识库。这一过程首先涉及定义和维护故障元数据,其中包括故障类别、子类别、故障等级、故障描述、影响范围及故障判断条件等关键信息。接下来是定义业务元数据,因为不同的故障对不同业务的影响各异,所需的应对措施也不尽相同。最终,结合故障元数据和业务元数据的信息,我们能够准确评估故障对业务的具体影响,并给出相应的处理操作。以下是几种典型的决策制定示例:



3、故障分析


1)故障识别


我们定期从StarRocks元仓库中读取最近时间窗口内的数据,利用StarRocks强大的分析能力,整合来自不同源头的数据与故障元数据,进行数据的聚合与过滤处理,从而提取出故障信息。在此基础上,我们会进一步补充故障详情。例如,对于磁盘故障,初始信息可能仅包含故障磁盘的位置和所在节点名称。通过结合主机运行时信息、主机CMDB和业务信息等多维度数据,我们可以完善磁盘的盘符、磁盘类型等详细信息。同时,借助业务元数据,我们还能补充故障对相关服务的具体影响详情。



2)故障降噪


当相同故障在短时间内频繁出现,或是不同数据源重复报告同一故障时,自愈处理可能会并行执行或在短时间内多次触发。由于自愈过程通常涉及机器或服务的重启,频繁的自愈活动会对服务的稳定性造成负面影响。因此,在接收到故障分析后提交的故障信息时,系统需要先对重复故障和短时间内多次发生的故障进行降噪处理,然后再进行后续步骤。


在本系统中,我们采用故障服务名称、主机名称、故障点以及故障类型作为故障的唯一标识符,实施去重操作。此外,对于同一类型的故障,系统还会执行一段时间的静默处理,避免因短时间内多次触发自愈而导致的服务中断。


这种机制有助于减少不必要的自愈操作,确保服务的稳定运行,同时提高故障处理的效率和精准度。



4、故障处理


1)防呆策略


在故障分析阶段,通过对元仓数据的深入分析来获取故障和异常信息。然而,这些信息在处理过程中有可能对服务的稳定性造成影响。特别是当上游系统或依赖系统的Bug导致故障分析结果不准确时,可能会在短时间内生成大量的故障信息,进而传递至自愈系统。为了应对这类可能影响服务稳定性的场景,我们采取了一系列故障防呆措施,确保自愈操作的安全性和有序性。以下是我们故障自愈系统所采用的主要防呆策略:





通过实施上述防呆策略,我们能够有效减少误报和不必要的故障处理操作,保障自愈过程既高效又安全,最大限度地维持服务的连续性和可靠性。



2)流程生成


通过上述决策定义可以看出,不同类型的故障以及同一故障在不同服务中的处理方式各有差异。基于此,我们将故障信息与预设的故障决策相结合,自动生成一个故障处理流程。该流程由多个子任务串联组成,最终形成一个完整的自愈任务执行工作流。为了更加精细地管理这些任务,我们根据任务性质将其分为以下几类:








通过这种分类方法,我们能够更加高效地管理故障自愈过程中的各项任务,确保故障得到及时有效的处理,同时最大程度地减少对服务稳定性的影响。


3)故障自愈


生成自愈任务执行的工作流后,该工作流会被保存至数据库中。调度中心依据数据库中的记录对工作流任务进行调度和执行。工作流中的子任务遵循串行执行原则,即前一个子任务完成后,下一个子任务才会启动。鉴于异常处理的不确定性和调用各类API时可能出现的网络波动,每种类型的子任务均可配置独立的超时时间和失败重试策略,确保系统能根据设定的策略自动尝试重试。一旦某个子任务最终失败,系统将自动通知相关人员介入,允许其选择重新尝试该任务或手动进行其他干预措施。经过人工干预后,可以选择终止整个自愈流程,或者跳过当前失败的步骤继续执行后续任务。


此外,无论是在自愈流程开始、结束还是遇到异常时,系统均会发送卡片通知,确保相关人员能够及时了解自愈进程的状态,从而迅速作出响应。


通过这样的机制设计,我们不仅能够确保自愈流程的自动化与智能化,还能够在必要时提供灵活的人工干预选项,保障故障处理的高效性和可靠性。



5、案例分析


故障自愈产品能力中,由于大数据业务磁盘总数基数大,故障数也最多,我们先从磁盘的故障自愈开始做。我们对三类磁盘异常进行了故障自愈。第一类磁盘有明显硬件故障,这类最容易处理,直接该磁盘上的对应业务,报修换盘,磁盘换盘后上线继续使用。第二类结合业务需求,利用机器学习对磁盘指标数据进行分析和预测,对性能离群且影响到业务的磁盘也做了自愈。第三类是磁盘寿命不足的场景,在大数据shuffle过程中,频繁的读写操作会加速磁盘寿命消耗,需要及时更换shuffle盘。之前避免磁盘寿命耗尽影响到服务,我们根据磁盘寿命剩余多少来判断磁盘是否需要换盘,有时候被换掉的盘实际上还能继续使用一段时间。有了自愈系统之后,我们可以根据磁盘寿命和性能数据综合判断,即使寿命统计数据显示磁盘寿命耗尽,但不影响使用的情况下,我们也可以继续使用,不断提高了换盘的效率,同时也延长磁盘的使用寿命。另外,自愈系统慢慢开始覆盖IO Hang住、服务进程异常、端口异常、访问异常、服务日志异常等越来越多的场景。下图是一个磁盘故障自愈的案例。


在我们的故障自愈产品能力中,考虑到大数据业务中磁盘总数庞大,故障频发的特点,我们首先从磁盘故障自愈入手。目前,我们已对三类磁盘异常实现了自愈处理:





随着自愈系统的不断完善,我们已经逐渐将其应用于更多场景,包括但不限于IO Hang住、服务进程异常、端口异常、访问异常以及服务日志异常等。下图是一个磁盘故障自愈的案例。




如图所示,展示了磁盘故障自愈的完整流程。故障分析后获得的故障详情信息及受影响的服务信息,被系统用来自动生成故障自愈处理工作流。根据部署故障节点部署了DataNode和NodeManager服务,除了基本的磁盘故障维修流程外,我们还在故障处理流程中集成了这两个组件的节点故障隔离与恢复步骤。最开始的单副本检查子任务用于确保在集群中没有其他单副本的情况下再进行后续的故障磁盘下线操作。通过锁机制,保证在同一时间点内,HDFS集群中只有一个故障磁盘处于下线状态,从而最大限度地减少数据副本丢失的风险。DataNode卸载磁盘 和 NodeManager卸载磁盘这两个子任务负责从DataNode和NodeManager的服务配置中移除故障磁盘的挂载点,确保故障磁盘不再被使用。在经过系统组报修,确认磁盘修复并可重新投入使用后,执行 DataNode挂盘 和 NodeManager挂盘 子任务,将之前更改的服务配置恢复,使磁盘重新加入到服务中正常使用。每个子任务均运行成功后,整体流程运行顺利结束,自愈流程正式结束。


四、总结和展望


故障自愈系统极大地简化了复杂的大数据环境中的故障管理过程,不仅能迅速识别和响应各种故障,缩短故障处理时间,还显著增强了服务的稳定性和可靠性。目前故障自愈已应用到NodeManager、DataNode、Flink、ClickHouse、Kafka、Spark等关键大数据组件,涵盖了磁盘故障、磁盘性能下降、SSD/NVME磁盘寿命到期、IO Hang住、端口异常、服务异常日志记录、服务网络连接数异常等多种故障场景。据统计,每日通过该系统自动处理的故障案例超过20起,相当于节省了至少一名专职人员的工作量。


接下来,我们将进一步拓展故障自愈系统的应用范围,涵盖更多服务组件和故障类型。此外,我们计划引入机器学习技术,实现故障的预测分析,以便提前识别潜在风险,确保集群和服务的长期稳定运行。这不仅将进一步提高系统的自动化水平,还将为用户提供更加可靠、高效的服务体验。


作者丨hurui、明刚

来源丨公众号:哔哩哔哩技术(ID:bilibili-TC)

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

大数据 故障自愈 BMR 技术实现 案例分析
相关文章