中国人德国人美国人日本人四个人坐飞机,飞机有四个发动机,结果,飞机出了故障,坏了一个发动机,需要紧急减轻重量,有一个人要跳下去,否则飞机就会坠毁。
于是他们决定石头剪刀布,输了跳下去。 美国人输了,美国人走到舱门口说:“美利坚合众国万岁!”,就跳下去了。
没多久,又坏了一个发动机。德国人输了。德国人走到舱门口说:“德意志万岁!”,就跳下去了。
又没多久,又坏了一个发动机。中国人输了。中国人大吼一声:“中国人民万岁!”然后,就把那日本人从舱门口踹了下去。
这是一个笑话。但是呢,笑完之后,发动机如果做了备份,飞机如果有一个发动机损坏了,仍然还可以飞行。这个就是冗余设计。
一、什么是冗余设计
又称余度设计技术,是在系统或设备完成任务起关键作用的地方,增加一套以上完成相同功能的功能通道、工作元件或部件,以保证当该部分出现故障时,系统或设备仍能正常工作,以减少系统或者设备的故障概率,提高系统可靠性。
航空领域的飞机,因为单次飞机事故造成的死亡率高,死亡人数多,所以冗余系统在飞机上也有很好的应用,如果一个飞机需要两个发动机可以正常启用的话,那这个飞机可能需要至少四个发动机,除去安全系数的考虑外,这里面就有冗余系统的理念,以保证一两个发动机的故障,不会引起飞机失事,而造成重大的事故。这里可以看出冗余系统的一个很重要的缺点:就是发动机的故障并不是独立的,可能其中一个发动机着火的话,会引起其他发动机的故障,所以这个可靠性会比理论计算的少很多。
生活中,也有比较常见的冗余系统,如运货的重卡,在卡车载重的后轮胎上,任意一个轴承上的一边至少有两个轮胎,其实仅需要一个轮胎,重卡就可以正常运行,另外一个轮胎就是冗余系统了。
冗余系统不一定非要是软件类的系统或机械类的设备,也可以是人(广义上来说人也是系统的一部分),但用人来当冗余系统的话,可靠性会更低,因为人的判断更易受外界因素的干扰。
一般来说冗余系统目的在于:为了保险起见,采取两套同样独立配置的硬件、软件或设计等,防止在其中一套系统出现故障时,另一套系统能立即启动,代替工作,这就好比演员的替身。一套单独的系统也许运行的故障率很高,但采取冗余措施后,在不改变内部设计的情况下,这套系统的可靠性立即可以大幅度提高。假如单独系统的故障率为50%,而采取冗余系统后马上可以将故障率降低到25%。
冗余系统的优点在于:
一、以现有的系统为依托,不需要任何时间或科研投入,可以立即实现;
二、配置、安装、使用简单,无需额外的培训、设计等;
三、使用冗余系统,理论上来讲,系统的故障率可以接近为零。
冗余系统的缺点在于:
一、使用冗余系统就代表该系统臃肿,不简洁;
二:投入成本巨大,需要购买额外的系统,以及增加该系统后的后期维护成本等;
三:完全独立的系统并不存在,所以冗余系统最大的缺点在于,相互独立的配置之间会互相影响(尤其是依靠人的冗余系统),可靠性相对理论计算会大幅度下降。
冗余系统因为前期投入巨大,后期的维护成本高,所以只有在高风险(包括金融风险、行政风险、管理风险以及危及生命安全的风险)行业应用比较广泛,如:金融领域、核安全领域、航空领域、煤矿等领域。
银行中的数据非常重要,即使服务器小概率的故障,也会有很大影响,甚至会影响一个国家的金融体系的稳定。所以,每一个银行的数据至少同时存在两个以上的不同地点的服务器中(这就是一个简单的冗余系统),需要明白的是这个跟备份不一样,备份可以是先存储,再备份,而银行系统的冗余系统是同时更改,以保证在任意时间,任意一个服务器的故障,都不会引起数据失真。
二、冗余设计的分类
1、异地容灾:
异地容灾,顾名思义就是在不同的地域,构建一套或者多套相同的应用或者数据库,起到灾难后立刻接管的作用。
现代的企业已经变得越来越依赖数据处理中心进行业务处理,对于这些数据中心来说,业务完全依靠信息技术进行处理。对于信息处理中心来说,对数据的完整性和可用性提出了极高的要求。特别是大型金融、电信等企业,对业务系统的连续性提出了更高的要求,对于这些企事业单位来说,遇到突发的故障事件,没有完备的灾备系统,对于业务系统都是致命的。同样,对许多中小企业来说,必要的灾备系统也是必要的。
由于异地容灾的解决方案,是两套或者多套数据及设备部署在不同的地域,所以当一个地点发生火灾、地震的情况的时候,在异地的备份可以接管业务。由于平时两地的数据同步,也不会造成用户数据丢失。
2、双机备份
双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)。
在企业的发展情况与不同环境因素下,用户对系统的连续工作性和实时性也有着更高的要求,从实际操作面来看,企业用户在工作环节中,要把采集到的实时数据存储在两台计算机上,其中一台采集机故障时,另一台备用的立刻可以接替,并给出警告信号,当采集机恢复后,可自动接替备用机。因此既达到能保存重要数据,又能节省成本,那么双机备份软件就是企业用户的更好选择。
基于共享存储(磁盘阵列)的方式
共享存储方式主要通过磁盘阵列提供切换后,对数据完整性和连续性的保障。用户数据一般会放在磁盘阵列上,当主机宕机后,备机继续从磁盘阵列上取得原有数据。如下图所示
传统的单存储方式
这种方式因为使用一台存储设备,往往被业内人士称为磁盘单点故障。但一般来讲存储的安全性较高。所以如果忽略存储设备故障的情况下,这种方式也是业内采用最多的热备方式。
全冗余方式
全冗余方式就是双机双存储,基于单台存储的传统双机热备方式,确实存在存储单点故障的情况,为实现存储冗余,存储高可用也已经越来越多的被用户接受。我们从理解上可以看出,双机热备最早是为解决服务器的计划性停机与非计划性宕机的解决方案,但是我们无法实现存储的计划性停机与非计划性宕机带来的服务器停机,而存储作为双机热备中唯一存储数据的设备,它一旦发生故障往往会造成双机热备系统全面崩溃。
3、单板级主备倒换
高端设备由于所处网络位置非常重要,不允许出现单点故障,设备一般都配备两块主控板,分别称为主用主控板(Master)和备用主控板(Slave)。其中,主用主控板作为控制平面的核心,与外部和业务板进行业务通信,完成系统内各模块的正常功能;而备用主控板则只作为主用主控板的备份,与外部和业务板没有通信。当主用主控板发生故障时,系统自动进行主备切换,由备用主控板接替主用主控板的工作,保证业务的正常运行
主备主控板的热备份过程主要分为批量备份、实时备份和数据平滑三个阶段。
备用主控板启动后,由于此时主用主控板和备用主控板的差异比较大,主用主控板会将当前需要备份的数据批量同步到备用主控板,这个过程称之为批量备份,批量备份时间的长短取决于需要备份数据量的大小。
批量备份过程结束后,系统进入实时备份过程,在此过程中,当主用主控板备份数据发生变化时,备份数据将实时同步到备用板,这个过程通常很快。
主备倒换后,备用板升为新的主用板,会通知各个模块向业务板进行数据收集和同步,这个过程称之为数据平滑。平滑过程中,各模块主动与业务板进行通信,在硬件状态、链路层状态、配置数据三个方面进行确认和同步,以保证整个系统维护的数据和状态是一致的,从而确保主备切换之后,系统能够正常运行。平滑阶段结束,新的主用板才称之为完全意义上的主用主控板。
上面的机框,可以看出,电源板、主控板都做了备份两份的配置。
4、单板资源池
再如上图中,下面这些电路板一般都是业务或者是接口板,为了防止有单板损坏,按照业务性能满足之外,一般会多备份一块备用电路,如果有正在工作的某一块电路损坏,都可以切换到备用电路板,进行继续工作。
5、磁盘阵列
即然提到了RAID磁盘阵列,那么我们就先来了解一下什么是RAID?所谓的RAID,是Redundant Arrays of Independent Disks的简称,中文为廉价冗余磁盘阵列。由1987年由加州大学伯克利分校提出的,初衷是为了将较廉价的多个小磁盘进行组合来替代价格昂贵的大容量磁盘,希望单个磁盘损坏后不会影响到其它磁盘的继续使用,使数据更加的安全。RAID作为一种廉价的磁盘冗余阵列,能够提供一个独立的大型存储设备解决方案。在提高硬盘容量的同时,还能够充分提高硬盘的速度,使数据更加安全,更加易于磁盘的管理。
RAID的几种常见工作模式
1、RAID 0
RAID 0是最早出现的RAID模式,即Data Stripping数据分条技术。RAID 0是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。RAID 0没有提供冗余或错误修复能力,是实现成本是最低的。
RAID 0最简单的实现方式就是把N块同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以软件的方式串联在一起创建一个大的卷集。在使用中电脑数据依次写入到各块硬盘中,它的最大优点就是可以整倍的提高硬盘的容量。如使用了三块80GB的硬盘组建成RAID 0模式,那么磁盘容量就会是240GB。其速度方面,各单独一块硬盘的速度完全相同。最大的缺点在于任何一块硬盘出现故障,整个系统将会受到破坏,可靠性仅为单独一块硬盘的1/N。
为了解决这一问题,便出一了RAID 0的另一种模式。即在N块硬盘上选择合理的带区来创建带区集。其原理就是将原先顺序写入的数据被分散到所有的四块硬盘中同时进行读写。四块硬盘的并行操作使同一时间内磁盘读写的速度提升了4倍。
在创建带区集时,合理的选择带区的大小非常重要。如果带区过大,可能一块磁盘上的带区空间就可以满足大部分的I/O操作,使数据的读写仍然只局限在少数的一、两块硬盘上,不能充分的发挥出并行操作的优势。另一方面,如果带区过小,任何I/O指令都可能引发大量的读写操作,占用过多的控制器总线带宽。因此,在创建带区集时,我们应当根据实际应用的需要,慎重的选择带区的大小。
带区集虽然可以把数据均匀的分配到所有的磁盘上进行读写。但如果我们把所有的硬盘都连接到一个控制器上的话,可能会带来潜在的危害。这是因为当我们频繁进行读写操作时,很容易使控制器或总线的负荷 超载。为了避免出现上述问题,建议用户可以使用多个磁盘控制器。最好解决方法还是为每一块硬盘都配备一个专门的磁盘控制器。
虽然RAID 0可以提供更多的空间和更好的性能,但是整个系统是非常不可靠的,如果出现故障,无法进行任何补救。所以,RAID 0一般只是在那些对数据安全性要求不高的情况下才被人们使用。
2 RAID 1
RAID 1称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。虽然这样对数据来讲绝对安全,但是成本也会明显增加,磁盘利用率为50%,以四块80GB容量的硬盘来讲,可利用的磁盘空间仅为160GB。另外,出现硬盘故障的RAID系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩溃。更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降。因此,RAID 1多用在保存关键性的重要数据的场合。
RAID 1主要是通过二次读写实现磁盘镜像,所以磁盘控制器的负载也相当大,尤其是在需要频繁写入数据的环境中。为了避免出现性能瓶颈,使用多个磁盘控制器就显得很有必要。
3 RAID0+1
从RAID 0+1名称上我们便可以看出是RAID0与RAID1的结合体。在我们单独使用RAID 1也会出现类似单独使用RAID 0那样的问题,即在同一时间内只能向一块磁盘写入数据,不能充分利用所有的资源。为了解决这一问题,我们可以在磁盘镜像中建立带区集。因为这种配置方式综合了带区集和镜像的优势,所以被称为RAID 0+1。把RAID0和RAID1技术结合起来,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力,允许一个以下磁盘故障,而不影响数据可用性,并具有快速读/写能力。RAID0+1要在磁盘镜像中建立带区集至少4个硬盘。
由于我们此次只是介绍家用台式机如何组建RAID磁盘阵列功能,目前主流的主板也只是提供这三种组建模式,因此其它诸如服务等的高级RAID模式,这里我们将不再过多的介绍。
4、RAID 5
RAID 5控制还是比较常用的。RAID 5和RAID4 相似但避免了RAID4 的瓶颈,方法是不用校验磁盘而将校验数据以循环的方式放在每一个磁盘中,RAID 5控制比较复杂,尤其是利用硬件对磁盘阵列的控制,因为这种方式的应用比其他的RAID level 要掌握更多的事情,有更多的输出/入需求,既要速度快,又要处理数据,计算校验值,做错误校正等,所以价格较高。
RAID 5在不停机及容错的表现都很好,但如有磁盘故障,对性能的影响较大,大容量的快取内存有助于维持性能,但在OLTP 的应用上,因为每一笔数据或记录(record)都很小,对磁盘的存取频繁,故有一定程度的影响。
某一磁盘故障时,读取该磁盘的数据需把共用同一校验值分段的所有数据及校验值读出来,再把故障磁盘的数据计算出来;写入时,除了要重覆读取的程序外,还要再做校验值的计算,然后写入更新的数据及校验值;等换上新的磁盘,系统要计算整个磁盘阵列的数据以回复故障磁盘的数据,时间要很长,如系统的工作负载很重的话,有很多输出/入的需求在排队等候时,会把系统的性能拉下来。
但如使用硬件磁盘阵列的话,其性能就可以得到大幅度的改进,因为硬件磁盘阵列如Arena 系列本身有内置的CPU 与主机系统并行运作,所有存取磁盘的输出入工作都在磁盘阵列本身完成,不花费主机的时间,配合磁盘阵列的快取内存的使用,可以提高系统的整体性能,而优越的SCSI 控制更能增加数据的传输速率,即使在磁盘故障的情况下,主机系统的性能也不会有明显的降低。RAID 5要做的事情太多,所以价格较贵,不适于小系统,但如果是大系统使用大的磁盘阵列的话,RAID 5却是最便宜的方案。以上介绍RAID 5控制。
三、冗余设计应用举例
上图,这是一个典型的通信设备的冗余备份设计。
主控板、交换板、时钟板: 1+1热备或温备
一次电源模块: 1:1并联双工
风扇单元:负荷分担
功能板、接口板:N+1备份
我们都知道:一个和尚挑水喝、两个和尚抬水喝,三个和尚没水喝。如果资源多了,做不好协调和管理,会适得其反。
我们做了冗余设计,如果以下几点没有做好,不但不能提高系统的可靠性,还可能弄巧成拙。
影响1+1冗余系统可靠性的关键因素:
1、主、备用单元故障检测率
2、切换成功率(与倒换电路、逻辑等相关)
3、主、备用单元的失效率
4、故障修复率
5、数据备份模块负责通过一定的形式组织和管理需要备份的数据,在主备板之间建立备份通道,接收用户的备份通知,发送和接收备份数据,将主板中的数据备份到备板上。
6、倒换模块负责单板状态监控和主备单板倒换的触发。执行相应的操作:主板降为备板复位、备板升为主板,并且触发平滑过程。倒换模块同时对数据备份模块进行控制,并在倒换后启动原备板的平滑过程。
7、数据平滑模块负责倒换后备板对备份数据进行一致性检查以及数据重建的工作。
1、主备倒换
高端交换机由于所处网络位置非常重要,不允许出现单点故障,设备一般都配备两块主控板,分别称为主用主控板(Master)和备用主控板(Slave)。
其中,主用主控板作为控制平面的核心,与外部和业务板进行业务通信,完成系统内各模块的正常功能;而备用主控板则只作为主用主控板的备份,与外部和业务板没有通信。当主用主控板发生故障时,系统自动进行主备切换,由备用主控板接替主用主控板的工作,保证业务的正常运行
2、数据备份
3、主备工作状态机
主用主控板状态机在如下五个状态顺序迁移,分别为:等待备用板插入状态、等待批量备份请求状态、批量备份状态、实时备份状态以及数据平滑状态。
备用主控板状态则在就绪状态、批量接收数据状态、实时接收数据状态三个状态顺序迁移。
主用板启动正常工作后就进入等待备用板插入状态;主用主控板检测到备用板插入槽位上电启动后进入到等待批量备份数据状态,等待备用板的批量备份数据请求;当备用板上电启动完毕后,首先会向主控板发送数据批量备份请求,主控板就把需要备份的数据打包批量发送给备用板,包括配置信息和一些状态信息等;批量备份完成后,进入实时备份状态,当主控板需要备份的数据发生变化时,会通过消息发送给备用板,备用板完成相关同步工作;平滑过程只有在备用板变为主控板的阶段才会出现,是主控板的控制平面数据和业务板进行状态确认和同步的过程;平滑过程完成后备用板才真正成为主控板。
备用板上电启动完成后即进入就绪状态,即随时可以接替主控板工作的状态;然后向主控板发送批量数据备份请求,进行批量数据同步,此时不与业务板进行通信;批量同步完成后,进入实时备份状态,实时备份的发起者是主控板,备用板只有在接收到备份数据消息时才进行实时备份。
4、主备状态确定及倒换
4.1 主备状态确定
双主控环境下,主控板的状态是主用还是备用,是在启动过程中由硬件决定的。一般情况,设备会首先选择小槽位号的主控板作为主用主控板(双主控启动环境下,硬件会在大槽位号主控板设置一个延时,使它稍后启动)。
初始启动时,两块主控板都处于备用状态,各自进行软件的启动。小槽位号主控板在启动到一定阶段时将自己的单板状态位置为正常,并且同时检测另一块主控板的状态是否正常;而大槽位号的主控此时会有一个延时,再检查另一块主控板是否正常,并且将自己的单板状态位置为正常。这样,在小槽位号主控板的状态变为正常时,大槽位号主控板的状态还未正常,因此小槽位号主控板的状态为主用;大槽位号主控板在延时过后检查,发现另一块主控板的状态为正常,便将自己设置为备用状态。所以,在双主控环境下,即使在系统重启之前,是大槽位号主控板的状态为主用,重启后,仍然会是小槽位号主控板的状态为主用。
4.2 主备倒换触发
备用主控板到达实时接收数据状态后,如果检测到倒换通知,则切换为主用主控板。检测通知是中断触发的,主备倒换的硬件切换时间在毫秒级。硬件切换后,新主控板的主备状态机进入平滑状态,开始平滑过程处理。
主备切换的触发因素主要有以下几类:
命令行执行主备倒换命令,强行切换。
主用主控板硬复位或者被手工拔出,引起主备倒换。
主用主控板上发生软件异常重启,从而触发倒换。如:模块异常占用CPU时间过长,引发硬件看门狗重启系统;数据访问异常、指令访问异常等系统异常等引发重启。
对于以上不同的触发因素,备用主控板感应的时间都是一样的:都是在硬件中断触发的,状态切换时间在毫秒级。
主控板和备用板都会周期发送握手报文,主控板或备用板在设定的周期内没有收到对方的握手报文,就会认为主备通信异常,重新复位备用板。