大家常说高可用,High Availablility,但是一般说到这个词的时候,具体指的什么方案呢?
级别一:FT (Fault Tolerance) 双击热备
通过创建与主实例保持虚拟同步的虚拟机,使应用在服务器发生故障的情况下也能够持续可用。
这种方法常通过使主虚拟机 和辅助虚拟机执行相同顺序的 x86指令来完成此过程。主虚拟机捕获所有输入和事件,并在辅助虚拟机上进行重放。
辅助虚拟机执行与主虚拟机相同的指令序列,如果运行主虚拟机的主机或运行辅助虚拟机的主机发生故障,则会发生即时且透明的故障切换。
虽然FT功能很强大,但是在虚拟化中很少用到FT功能,一是对资源浪费比较严重,二是性能下降比较快,由于是指令级别的同步,因而两台虚拟机之间的距离非常近,无法完全达到容灾的目的,三是如果主虚拟机因为执行非法指令蓝屏,则辅助虚拟机也马上就会发生,根本无法保证业务延续性。
级别二:虚拟机HA
虚拟机HA主要指在有一个共享存储池的情况下,当一台物理机挂了,这台物理机上的虚拟机可以迁移到其他物理机的机制。
因为虚拟机是有状态的,因而需要共享存储池来保证状态可以被另外一台物理机读取到。
在HA状态下,虚拟机的恢复时间一般在秒级别,也即当监控探测到物理机挂了之后,可以迅速在空闲的物理机上将虚拟机启动起来。
启动HA的物理机集群可以比较大,可以跨机架,比FT更能起到容灾的目标。
级别三:同城双活
如果一个机架,或者整个机房,甚至整个数据中心着火了,则如何保证业务的连续性呢?
一种常用的机制是同城双活,就是在同一个城市,距离大概30km到100km的两个数据中心之间,通过高速专线互联的方式,让两个数据中心形成一个大二层网络。
同城双活最重要的是数据如何从一个数据中心同步到另一个数据中心,并且在一个数据中心故障的时候,可以实现存储设备的切换,保证状态能够快速切换到另一个数据中心。主流的存储厂商都提供在高速光纤互联情况下,在一定距离之内的两台存储设备的近实时的同步,数据双活是一切双活的基础。
基于双数据中心的数据同步,对上看起来可以形成一个统一的存储池,从而数据库层在共享存储池的情况下可以近实时的切换,例如Oracle RAC。
虚拟机在统一的存储池的情况下,也可以实现跨机房的HA,在一个机房切换到另一个机房。
SLB负载均衡实现同一机房的各个虚拟机之间的负载均衡。
GSLB可以实现跨机房的负载均衡,实现外部访问的切换。
如果在两个数据中心距离很近,并且大二层可通的情况下,也可以使用VRRP协议,通过VIP方式进行外部访问的切换。
同城双活一般宣称是实时切换,但是真正实施起来,一般在几分钟到十几分钟,对于数据量比较大的,还会几十分钟。
级别四:异地容灾
当你觉得一个地方两个数据中心还是不保险,例如海啸,地震,原子弹等,则可以在异地修建容灾数据中心。
第一大问题还是数据的问题,也即生产数据中心的数据如何备份到容灾数据中心,由于异地距离比较远,不可能像双活一样采取近同步的方式,只能通过异步的方式进行同步,也可以预见的是,容灾切换的时候,数据会丢失一部分。
由于容灾数据中心平时是不用的,不会讲所有的业务都进行容灾,否则成本太高。
对于数据的问题比较建议从业务层面进行容灾,由于数据同步会比较慢,可以根据业务需求高优先级同步重要的数据,因而容灾的层次越高越好。
例如有的用户完全不想操心,则使用存储层面的异步复制,对于存储设备来讲,是无法区分放在存储上的虚拟机哪台是重要的,哪台是不重要的,完全根据块进行复制,很可能先复制了不重要的虚拟机。
如果用户想对虚拟机做区分,则可以使用虚拟机层面的异步复制,用户知道哪些虚拟机更重要一些,哪些虚拟机不重要,则可以先同步重要的虚拟机。
如果用户可以根据业务层情况,在更细的粒度上区分哪些对业务来讲是重要的数据,例如交易数据,需要优先同步,哪些对于业务来讲是不重要的数据,例如日志数据。
在有异地容灾的情况下,可以平时进行容灾演练,看容灾数据中心是否能够真正起作用,别容灾了半天,真用上的时候掉链子。
由于是异地,容灾切换的时间一般在小时级别,几个小时不等。
级别五:异地备份
备份是比容灾更加不灵活的一种方式,和容灾的不同是,容灾需要使得虚拟机的资源时刻准备着,等需要切换的时候,马上就用,数据和虚拟机还是热数据。而备份更多的是以冷数据的方式,将虚拟机镜像,数据库镜像等变成文件存放在价格比较便宜的存储上面,成本比容灾要低得多。
存储可以是专门用于备份的存储设备,也可以使用对象存储等大容量而且成本低的存储。
备份往往区分全量备份和差量备份,一般在重要的时间点保存全量备份,然后以后的一段时间保存差量备份,然后再全量备份,再差量备份。
备份恢复的过程也是从最近的全量备份开始,逐渐补足差量备份,从而达到最接近最终状态的数据。
一旦用到备份,则说明环境已经全部不在,需要重新准备环境来运行虚拟机和存储,所以恢复的时间在天级别。
原文发布时间为:2018-07-10
本文作者:刘超
本文来自云栖社区合作伙伴“程序员小灰”,了解相关信息可以关注“程序员小灰”