计算虚拟化

零宕机方案 vSphere Fault Tolerance

Google 的工程师大牛 Jeff Dean 说过:“如果你有一万台计算机在运行,那么每天一定会有电脑死机发生。”事实上的确如此,无论服务器设计得有多可靠,总是有宕机的可能性存在,哪怕是 IBM 号称永不宕机的大型机 (z 系列主机,z 代表 zero down time)。所以数据中心的管理员们一直在寻找提高系统可靠性的解决方案,最常见的就是双机热备方案。

VMware vCenter 就能够提供高可靠的集群 (Cluster) 方案,在 vSphere 集群中,任何一台服务器发生严重故障了(如系统宕机、网络故障、存储失联等),上面运行的工作负载就会被 vCenter 转移到其他正常运行的服务器继续运行。这种高可靠架构可以满足绝大多数业务的需求,在共享存储或 vSAN 上都能实现 RPO=0 的效果,但是需要一点时间在其他服务器上重启相关应用和服务,所以 RTO>0。

在设计高可靠系统时经常涉及到 RTO 和 RPO 两个指标:

  • RTO (Recovery Time Objective) 就是企业能容忍的恢复时间。灾难发生后,从 IT 系统宕机导致业务停顿,到 IT 系统恢复至可以恢复业务运营之间的时间。
  • RPO (Recovery Point Objective) 可简单地描述为企业能容忍的最大数据丢失量。假设系统一天做一次备份,如果第二天出现错误,那从备份完成后到错误出现时所写入的数据都无法挽回了,从上一次备份到发生错误之间的时间就是 RPO。

但是还是有一部分关键应用不允许有任何中断,要求达到 RTO=0 的高可靠性,这时候就可以采用 vSphere Fault Tolerance 容错技术。

 

FT 工作原理

FT 技术的工作原理是把需要保护的虚机运行在主服务器上,指定集群中的另一台服务器为备份,vSphere 在备份服务器上也创建一个跟受保护虚机一模一样的虚机。主虚机和备份虚机的数据和状态是完全一致的,通过 vLockStep (virtual Lockstep) 技术来保证两台虚机的同步运行。vSphere 通过网络把主虚机的 FT 日志 (FT Logging) 传递给备份虚机,保证两台虚机在同一时间内处理相同的指令,并且处理相同的非确定性事件,如网络数据包、用户输入、硬件时钟等,这些非确定性事件在物理机上几乎是无法同步的,但是虚机的所有硬件和 I/O 输入都是由 vSphere 来控制的,所以就可以做到。

Lockstep 技术是容错计算机 (Fault Tolerance Computer) 的关键实现技术之一,通过使用相同的、冗余的硬件组件来保持多个 CPU、内存精确的同步,在正确的相同时钟周期内执行相同的指令。该技术能够保证发现任何错误,即使短暂的错误,系统也能在不间断处理和不损失数据的情况下恢复正常运行。

vSphere 把发送给主虚机的网络数据包也完全复制给备份虚机,备份虚机执行跟主虚机完全一致的指令流,按照相同的顺序来对网络服务请求做出响应,产生完全一致的运算结果。唯一的区别在于,主虚机对外的输出是实际生效的,磁盘写操作会提交给硬盘、网络数据包会被发送出去;备份虚机的所有对外输出都会被 vSphere 屏蔽,外界不会感知到备份虚机的存在。

 

只有当主虚机失效时 (主服务发生故障),备份虚机才会真正生效。因为两个虚机的 CPU 指令顺列、内存状态都是完全一致的,vSphere 马上进行故障转移 (failover),即刻让备份虚机变成新的主虚机, 所有的 TCP 网络连接都没有中断,虚机中的应用可以继续运行。对外界用户而言,受保护的虚机完全没有中断运行,实现了 RPO=0 和 RTO=0 的最高等级容错。为了继续保护新的主虚机,vSphere 会在集群中寻找一台合适的服务器作为新的备份服务器,然后在上面复制一个新的备份虚机出来,从而形成新的容错保护机制。

换一个角度,我们也可以把 FT 技术看作是一种特殊的 vMotion。vMotion 的过程是把虚机的内存逐块地复制到另一台服务器上,在复制的过程中虚机还在正常运行,所以内存还在被不断的改写,最后一块被复制的内存被称之 vMotion checkpoint,这块内存复制完成之后虚机就被完全切换到新的服务器上运行,从而完成 vMotion 的整个过程。FT 技术则是持续地复制 checkpoint 内存块,正常情况下并不结束这一操作,只有当故障转移时,才真正完成 vMotion 操作。

 

FT 适用条件

FT 技术不要求对应用进行改写,或是对操作系统进行特殊的配置,所以一般的应用可以很方便地使用 FT 技术来进行保护。vSphere 6.0 可以保护的虚机最多可以有 4 个 vCPU、64 GB 内存,不超过这个资源限制的应用都可以采用 FT 技术来保护。而且这是 vSphere 标准版就内置的功能,不用采购额外的软件许可证,凡是 vSphere 的用户都可以随时激活对于虚机的 FT 保护。

FT 的工作机制要求主备虚机之间进行同步,只有等备份虚机上的同步操作完成之后,主虚机上的数据包传输才会真正完成。对于网络上的用户而言,发给主虚机的网络请求就有一个额外的延迟,一般这个延迟从几毫秒到几百毫秒不等,一个低速的 FT 日志同步网络(如1GB)可能加剧这种等待,搭建 vSphere FT 环境要求主备服务器之间是专用的 10GB 高速低延迟同步网络,以保证主备服务器之间的 FT 日志同步速度,否则就会给受保护的应用带来严重的性能影响。所以 FT 技术不适用于对于延迟敏感的应用或者是实时应用,也不适用于对于内存进行大量修改的应用(因为会产生大量的 FT 日志同步)。

传统的容错计算是由昂贵的专用服务器实现的,现在 vSphere 在普通的 x86 服务器上就能实现同样的功能,容错计算终于成为一种大家都用得起的技术。