第九章 容错

  在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就更需要提供比单机环境复杂得多的错误管理方案。实际上,我们在产品设计、开发、运营的各个阶段,有相当大一部分精力,都是用来获取各种故障,和解决各种故障发生后的错误处理问题。对于这些错误处理,我们整体遵循这样一个思路来解决:首先由软件感知来发现和定位故障点,然后进行判断,如果属于软件可以解决的故障,那么通过软件自修复机制来完成,否则,这个错误就提交给集群管理员人工处理。按照这样的两条错误处理基线,我们把各种错误处理分别融入到它们的模块中,并与这些模块嵌合,实现整个集群的容错管理。下面我们将从硬件和软件两个角度,来阐述Laxcus会面对的一些主要故障以及处理这些故障的办法。

9.1 硬件容错

  在Laxcus集群错误管理中,我们把运行环境或者硬件本身问题所造成、且不能通过软件自行修复来解决的错误,统一称为硬件错误。硬件错误的处理工作由集群管理员来完成,软件在这里起发现和报警的作用。根据我们过往的一些经验,本节就介绍一些经常发生的硬件故障和软件感知它们的办法。

9.1.1 网络故障

  目前的网络故障由以下硬件部件造成:交换机、路由器、集线器、网线、接线头、网卡。在这些故障中,其中一部分是可以人工方式修复的,比如接线头松动、网卡接触不良等。另一部分属于硬件损坏,需要关闭设备更换。软件发现这些故障的办法也很简单,主要是通过网络握手来侦测发现,比如在软件里集成ICMP这样的功能,在运行时去追踪节点,发现可疑现象后,通过在本网段和外网段之间对比排查,可以很快判断和定位故障点。这类故障检查工作一般由管理节点来执行,其它类型的节点如果在运行过程中发现问题或者故障,也会主动提交给管理节点,供管理节点做进一步检查核对。

9.1.2 计算机故障

  计算机故障是由计算机内部部件失效引发的错误,这部件包括了主板、芯片、内存、网卡、硬盘、电源。根据我们过往的使用经验,大部分计算机故障是由主板和硬盘导致,其中主板又占了相当大部分。计算机故障通过内、外两种手段来检查发现。在内部,由节点自检机制来探测部件,在外部,由管理节点来追踪节点。无论谁先检测得到,软件感知之后,都会马上提交给管理员处理。

9.1.3 硬盘故障

  硬盘故障有三种情况:硬盘完全损坏(通常是引导区损坏导致)、扇区损坏、磁盘空间已满。第一种情况通常在计算机启动时发生,对于这种故障,最好的解决办法是管理员在开机时跟踪一下计算机的运行情况。第二种故障通常是节点读写数据过程中产生,这种情况软件通过故障实时感知能够马上发现,会立即报告给管理员。第三种情况由写入数据太多溢出导致,不是硬盘本身问题,这种情况也会被节点马上捕捉到,然后去通知管理员。

9.2 节点容错

  本节点所说的“节点”,包含了软件的”进程“和硬件的”计算机“两个概念。这和之前所提略有不同,请诸位注意一下。在早期版本中,节点故障更多是软件故障造成的,比如节点的运行管理机制处理不善,模块间的API接口协同、衔接的错误。这些问题都与详细设计和编程有很大关系,随着版本演进,现在越来越多的情况是硬件问题导致。在Laxcus集群里,由于Front节点归用户使用,而且功能简单,实质只是一个用于输入输出的显示终端,所以本节忽略它,将主要介绍集群管理员管理下的节点容错。

9.2.1 管理节点容错

  前面已经提到过,无论是主域集群还是子域集群,都只能有一个Master管理节点来负责所属集群的管理工作,它在自己集群里的地位是独一无二的,是保证整个集群正常运行的关键。同时,为保证集群不会因为Master节点故障造成集群的管理混乱,通常还有一至数个Monitor管理节点做为备份存在着,它们将监视Master节点运行。

  在我们的测试环境,有1个Master节点和2个Monitor节点。为检查管理节点容错能力,我们进行了这样的试验。我们使用Linux  kill命令杀掉一个Master节点进程,在第5秒钟的时候,其中一个Monitor节点感知到Master节点发生了故障,并且立即启动故障协商机制,询问另一个Monitor节点,它对Master节点的判断,双方很快共同确认了Master节点发生了故障。然后,它们按照自己的网络地址排序,选择数字最大的那个Monitor节点,成为新的Master节点。新Master节点立即将自己从Monitor状态转入Master状态,并且通知原来所有下属节点(包括另一个Monitor节点),让它们重新注册到新Master节点下面,同时将故障的Master节点和切换过程通知给Watch节点。整个容错处理在20秒内完成。

图9.2.1 管理节点容错处理流程

9.2.2 Data节点容错

  Data节点保存着集群的全部数据,它的重要性仅次于管理节点,所以Data节点的容错管理也与其它节点大不相同。上面已经介绍过,每个节点宕机都会被管理节点及时捕捉到。在Data节点宕机后,管理节点会在报警的同时,对Data节点的数据做出如下处理:取出这个Data节点的数据块编号,按照数据块编号,找到同源备份,产生一个新的备份到其它节点上,如果是Data主节点,其它从节点备份会恢复到一个新的主节点上,并且这些从块也升级成主块。如果是Data从节点,这些备份会从主节点产生备份,分发到其它从节点上。由于Data主节点的数据量一般都比较大(最多时候有几个TB),又要保证不能太过于占用网络带宽,实际上这个恢复备份过程是缓慢的。在这段时间里,管理员有足够的时间来检查和恢复故障计算机。当重新启动计算机后,它会在网络上进行主块冲突检查,避免同质数据块出现。尤其是主节点故障,在恢复完成前,存在着数据不全的可能性,这个时间内发生的更新/删除操作,Call节点将拒绝它们执行,直到全部数据完成恢复。

图9.2.2 Data节点容错

9.2.3 集群内其它节点容错

  相较于以上两种,集群内的其它节点不保存数据,也不负责集群管理工作,它们只是为了满足分布处理流程而存在,运行过程中通常也不止一个节点,每类节点之间可以互相替代。这些单个节点的退出和加入,对于整个集群的运行来说,只产生微小的影响。所以在Laxcus容错设计里,对这些节点的容错管理要宽泛很多,它们的故障,通常都是以报警方式通知给Watch节点,由管理员来进行判断和处理。它们缺失的工作,也会由管理节点通知其它同类节点来取代。

9.3 数据容错

  在我们统计的多组Laxcus集群故障中,因为节点导致的故障概率并不高,大量发生的是数据错误。造成数据错误的主要原因是磁盘出现了坏区,这种故障通常在计算机读写磁盘数据被捕获。处理数据错误的办法是冗余复制,由出现错误块的Data节点使用自修复机制来实现。其过程是错误块所属Data节点通过网络去查找其它Data节点上同编号的数据块,然后把正确的数据块下载下来,取代已经出现错误的数据块。在数据块复制过程中,这个表下面的全部数据块将被锁定,直到完成更新后才被解锁。错误的数据块将被Data节点标记起来,并且停止使用它。最后Data节点将数据块编号和自己的网络地址发送给Watch节点上,提供管理员注意已经发生了数据错误。

9.4 分布任务组件容错

  现在的分布任务组件故障基本都来源于用户,是程序员在编程时处理不善导致。这样的错误在程序员编程过程中,以及集群测试环境里都难以发现,只有在正式的运营环境才有可能发生。负责监管分布任务组件错误的是沙箱,这是它在安全管理之外的另一个主要责任。为了防止故障扩散,沙箱将分布任务组件错误限制在它自己的空间里,不会波及节点和其它分布任务组件。故障发生后,沙箱会立即卸载这个分布任务组件,并且向源头发送一个错误码和它的错误堆栈,同时也把这些信息提交给管理员,由管理员去负责和用户交涉。

9.5 管理员责任

  虽然集群提供了故障感知能力,也实现了一些错误自恢复处理,但是仍然有各种后期管理工作,需要管理员来执行才能解决。要完成这些工作,管理员应该具备一定的专业知识和职业责任。

  对于很多因为软件问题产生的故障,现在已经基本可以通过追踪日志和断点分析得到;对于硬件故障,则更需要维护经验和专业知识,这些都需要一定时间的工作积累,付出很多时间和学习为代价。实际上,根据我们的运营和管理集群的经历,随着未来大数据市场需要的存储量和计算量的增加,网络和集群规模会越来越大。要做好集群管理工作,不是一件轻松的事,集群管理员要能够了解集群和各种节点的性能参数、执行处理范围、故障特点和原因,并且能够在发现问题后能够很快解决问题,在线上和线下与各种人进行沟通和联络。这些要求,做为集群管理员,需要有充分准备。

Laxcus大数据管理系统2.0(11)- 第九章 容错的更多相关文章

  1. Laxcus大数据管理系统2.0 (1) - 摘要和目录

    Laxcus大数据管理系统 (version 2.0) Laxcus大数据实验室 摘要 Laxcus是Laxcus大数据实验室全体系全功能设计研发的多用户多集群大数据管理系统,支持一到百万台级节点,提 ...

  2. Laxcus大数据管理系统2.0(3)- 第一章 基础概述 1.2 产品特点

    1.2 产品特点 Laxcus大数据管理系统运行在计算机集群上,特别强调软件对分布资源可随机增减的适应性.这种运行过程中数据动态波动和需要瞬时感知的特点,完全不同与传统的集中处理模式.这个特性衍生出一 ...

  3. Laxcus大数据管理系统2.0(5)- 第二章 数据组织

    第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...

  4. Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件

    第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依 ...

  5. Laxcus大数据管理系统2.0(10)- 第八章 安全

    第八章 安全 由于安全问题对大数据系统乃至当前社会的重要性,我们在Laxcus 2.0版本实现了全体系的安全管理策略.同时我们也考虑到系统的不同环节对安全管理的需求是不一样的,所以有选择地做了不同的安 ...

  6. Laxcus大数据管理系统2.0(8)- 第六章 网络通信

    第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的 ...

  7. Laxcus大数据管理系统2.0(6)- 第四章 数据计算

    第四章 数据计算 Laxcus所有数据计算工作都是通过网络实施.相较于集中计算,在网络间进行的数据计算更适合处理那些数据量大.复杂的.耗时长的计算任务.能够实施网络计算的前提是数据可以被分割,就是把一 ...

  8. Laxcus大数据管理系统2.0(14)- 后记

    后记 Laxcus最早源于一个失败的搜索引擎项目,项目最后虽然终止了,但是项目中的部分技术,包括FIXP协议.Diffuse/Converge算法.以及很多新的数据处理理念却得以保留下来,这些成为后来 ...

  9. Laxcus大数据管理系统2.0(13)- 总结

    总结 以上从多个角度阐述了Laxcus主要组成部分和应用情况.所有设计都是基于现实环境下的评估.对比.测试和考量.设计的基本思路很明确,就是将各项功能分解.细化.归类,形成一个个可以独立.小的模块,每 ...

随机推荐

  1. Hibernate3回顾-3-Session管理

    3.Session管理 仅为个人理解.请指正 3.1背景 由于Configuration的创建耗费系统的资源.所以有必要只将Configuration实例化一次,之后通过SessionFactory获 ...

  2. js 标签云效果

    下载:http://files.cnblogs.com/zjfree/js_tag_list.rar 效果如下: 源码如下: <html> <head> <meta ht ...

  3. 【Hadoop测试程序】编写MapReduce测试Hadoop环境

    我们使用之前搭建好的Hadoop环境,可参见: <[Hadoop环境搭建]Centos6.8搭建hadoop伪分布模式>http://www.cnblogs.com/ssslinppp/p ...

  4. Windows Server 2008 - How to Move the Quorum Disk Group

    I received this question from a friend the other day - asking how on a Windows Server 2008 cluster y ...

  5. 128. Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  6. titan

    简介 (1)titan:存储,查询图形结构的数据库.分布式集群环境下,可支持数以千亿级别的点和边,同时支持上千个并发的实时的复杂图形遍历,支持ACID事务. (2)架构:支持以下3方面的自由组合 节点 ...

  7. Navicat(连接)-1

    连接 要在 Navicat 开始使用你的服务器,你要首先用连接窗口创建一个或多个连接.如果你是一个服务器新手和不肯定如何工作,你可能想看看: MySQL 用户手册 Oracle 数据库文件 Postg ...

  8. OAF_EO系列2 - Validation数据校验验证机制(概念)

    2014-06-12 Created By BaoXinjian

  9. POJ 3368 Frequent values RMQ 训练指南 好题

    #include<cstdio> #include<cstring> ; const int inf=0x3f3f3f3f; inline int max(int x,int ...

  10. DrawTools(画图工具)原始版本

    上一篇文章一个优秀的C#开源绘图软件 DrawTools中详细的介绍了DrawTools的几种演化的较高版本的软件的特色与功能. 这篇文章,将介绍一下这款软件的成名版本, 下载地址DrawTool_O ...