>>返回主页
腾讯云TStack架构师韩宝英:TStack虚拟机双活实践

2018-03-21 15:10

  大家好,我今天演讲题目是TStack的虚拟机双活实践。

  下面将从三个方面来介绍:背景简介、COLO原理和TStack实践。

  高可用是云计算的一个永久的话题,业界评价高可用一般有以下两个标准:

  RTO,服务中断后的恢复时间。

  RPO,服务恢复后数据丢失量。

  当然,高可用的目标是尽可能降低这两个指标,一般来说业界方案有两种:

  一是HA,通用的做法是虚拟机宕机后,另选节点重建虚拟机,重新对外提供服务;

  二是FT,采用一种双活乃至多活的方式,虚拟机间保持同步,主虚拟机宕机后,由备虚拟机对外提供服务。

  今天主要分享FT,以双活为例,一般情况是在创建主虚拟机的同时创建一个备份的虚拟机,主虚拟机和备份虚拟机周期性做相关状态和数据的同步,根据同步技术的不同,业界主要有三种方案:

  一是根据虚拟机内部的事件做相关同步。

  二是微同步,设立一个时间周期,周期性的对相关虚拟机做同步。

  三是今天重点分享的COLO。

  COLO的架构图:

  首先,创建两个虚拟机,这两个虚拟机并行运行,保持一个双活的状态。

  内部有Heart beat模块,当心跳断连的时候,和Failover模块一起触发备虚拟机的升主动作,使得备虚拟机可以对外提供服务。

  然后是磁盘和网络相关的模块,磁盘我们以非共享盘的方式作为样例,先看一下它的组成形式。

  首先是主虚拟机(PVM)引入quorum协议,将本地盘和nbd-client作为子节点加到qurom协议中;备虚拟机,引入两块缓存盘,并把备虚拟机的本地盘通过nbd协议导出。

  主备虚拟机同步的时候,在落盘前,先将对应数据写入缓存盘中,同步之后,将缓存置空即可。

  当主虚拟机宕了之后,将缓存盘中内容提交至被虚拟机磁盘中,然后备虚拟机接管服务,

  这是非共享盘的方式,共享的方式原理大体类似。

  COLO-Proxy模块:

  借助QEMU的filter模块实现了一系列插件,来包的时候mirror模块复制一份给备虚拟机;回包时通过compare做对比,如果一致的话,把主虚拟机的包发出去即可;如果不一致,认为主备不同步,把主虚拟机的包发出,同时触发一次主备同步。

  Tstack整合流程,首先创建一个规格,规格就指定了是否创建双活虚拟机。当指定创建双活虚拟机的时候,创建完主虚拟机会根据主虚拟机的相关配置,到另外一个节点上创一个备虚拟机出来。主备虚拟机都创出来之后,根据前面讲的加载相关设备,然后进行同步操作。当主虚拟机宕机后,触发让备虚拟机对外提供服务,同时上报警告给用户,提示主虚拟机已经出现问题,请用户进行后续跟进。

  下面是我们测算出的一个磁盘结果,可见使用了双活后,磁盘io还是有一定的降幅的。把备虚拟机的缓存盘放到ramdisk上,效果会有一定提升。然后是网络方面,大家知道主备虚拟机肯定会占用网络带宽。使用主备虚拟机的时候,大家看下峰值,带宽占用还是比较明显的。默认情况下的主备同步,其实把主虚拟机完全拷贝到备份虚拟机,在保持双活同步的情况下很大程度是浪费的,引入post-copy后效果还是比较明显的。

  下面我们看下引入双活后的约束条件,第一主备虚拟机需要满足反亲和性。第二是由于它对资源还是有一定消耗的,不要把容错的虚拟机在同一台节点上放太多。第三双活的虚拟机不支持热迁移和存储热迁移。第四虚拟机快照以及vhost-net,config-drive等特性无法支持。

  虚拟机双活的建议:应用程序对可用性要求高;应用程序不能通过其他方式实现其高可用。应用程序可用通过其他方式实现其高可用,但方案过于复杂。这些情况都可以尝试虚拟机双活。

  第一,大家对我们有兴趣了解TStack产品可到展台了解。第二,有希望加入TStack团队的兄弟,可以私下跟我们联系,谢谢大家。

0