一、先澄清几个概念
1、什么是容灾:容灾一般指的是建立两套(或以上)相同的系统,其中一个系统宕机,另一个系统能实时接管或几分钟之内接管。
2、容灾和备份的区别:备份,往往指的是数据备份,备份一般指在主、备系统都损毁的极端情况下,能够保留一份救命的备份数据。所以,备份数据往往放在异地。备份数据恢复的时候,需要先重应用系统,再将备份的数据备份导入应用系统,整个历时会比较长。
二、业界常见的容灾模式
1、从容灾系统的对灾难的抵抗程度来看,可分为数据容灾和应用容灾。
数据容灾,只有一套应用系统,对应两套数据存储系统,数据实时复制。
应用容灾,比数据容灾的层次要高,即建立一套完整的、与本地系统相当的备用业务系统。在灾难出现后,可迅速接管或承担本地系统的业务。
2、从两套业务系统的相互关系来看,可分为主备容灾、双活容灾。
主备容灾:两套业务系统,一套为主用生产系统,另一个备用生产系统。平常由主用生产系统提供服务,另一个系统不承担任何流量,数据在主备之间同步复制。只有在主用生产系统瘫痪,备用系统才启用。
双活容灾:两套业务系统,同时处于运行当中,类似于负载均衡,所以也就无所谓谁是主、谁是备了。
容灾模式下,特别是双活架构下,对两套系统之间通信线路质量、时延要求最高。至于高到什么程度,好像也没有国际标准,业内主流IT厂家比较认可的是单向时延3ms以内。关于两套系统之间的距离,普遍认可的是至少要求200公里以内。当然也有厂家提出80公里、60公里、甚至40公里的要求,个人认为那些主要是考虑裸光纤直接连接,其实质最终追求的还是链路的高可靠性、低时延,以当前的运营商新建的OTN网的品质来说,目前珠三角地市之间都还好。
3、根据不同系统部署的物理位置的不同,可分为本地容灾、同城容灾和异地容灾。
实际上,在同一机房建两套系统也是可以的,那就是本地容灾。放在两个不同机房,主要是为了防范火灾、建筑物破坏、供电故障、计算机系统及人为破坏引起的灾难,所以常常会将两套系统放在同城的不同机房。两个机房在同一城市,即为同城容灾,在不同城市即为异地容灾。异地肯定不能太远,据了解,淘宝、天猫最多也就杭州、上海之间做双活容灾。
三、关于双活容灾要注意的事项
双活的两套业务系统都承担流量,其实也要看承担到哪层。如果只是应用层双活,但是数据访问、异步消息等还得回到主站调用,那也不是真正的双活。
所以,双活必须保证每个业务系统都是独立运行的,所有的调用都是本机房调用且闭环,且底层数据同步。
一句话:首先要,一定要,考虑业务系统的自身架构。
当然,双活要考虑的事情还很多:链路时延,成本,维护力量 ……
四、典型的容灾备份架构--- “两地三中心”双活架构
两地:同城及异地。同城做双活,异地做备份。
三中心:生产中心1、生产中心2,异地灾备中心。
在同城两个生产中心建设两套相同的业务系统同时对外提供服务;同时,在异地灾备中心建设备份系统用于数据的备份。当同城的双中心都发生故障,异地灾备中心可以用备份数据进行业务的恢复。总体架构一般如下:
异地灾备,更多是考虑防范战争、地震、水灾等极端情况下的风险。所以,异地的距离一般要求大于200KM,异地数据一般采用异步复制模式。
说在最后的话:
在设计容灾和备份方案的时候,一定要考虑自己想要的是什么,并不是越高大上越好。我刚工作那会曾做过某银行系统的灾备系统实施,当时的实施方案比较简单:核心业务系统做互为主备(记得两台UNIX服务器都安装sentinel软件),通过心跳线监测。一套磁盘阵列做存储,另有一套异步备份。虽然架构简单,回头想想,其实挺实用的。
双活与灾备的目标,有时是背离的,从另一个角度来看,它又将“备份”的保险系数拉低了。