首页 > 其他分享 >Paper——可容错的虚拟机实践系统设计.18162229

Paper——可容错的虚拟机实践系统设计.18162229

时间:2024-04-28 09:46:41浏览次数:25  
标签:外部 虚拟机 primary CPU 状态机 Paper 确定性 backup 18162229

目标:通过主备复制手段设计一个可容错的VM,用于用户运行企业级程序。primary日常工作,一旦它宕机,和它保持lock-step的backup会立刻顶上,外界观察不到这些操作,我们制造了只有一台VM永远在正常运行的假象。

要考虑的点:

  1. 使用什么手段保持primary和backup严格同步
  2. 在虚拟化单核CPU时和多核CPU时手段有何不同
  3. 非确定性指令和外部中断如何处理
  4. primary和backup任意一个宕机之后如何处理,如何恢复到一主一备并保持同步的状态
  5. 脑裂问题如何处理,如何保证只有一个primary正在与外部交互
  6. backup顶上之后,新backup如何追上此前的全部操作
  7. ...

同步手段概述

  • 状态迁移:将变更后的状态迁移到backup,包括CPU状态(寄存器)、内存、IO设备等
  • 复制状态机:将产生变更的操作(operation)发送给backup

试想一个会操作大量内存的操作,如果使用状态迁移则要传输大量的数据,占用带宽并且难以保持同步;而复制状态机只会该操作发送给backup,节省数据传输量。

本篇论文中采用复制状态机的方式。

复制状态机及其限制

状态机是一个数学模型,它具有状态,外部的输入事件会让状态机的状态发生改变。

若有状态机A和B,它们的初始状态一致,后续状态机B以相同的顺序执行和A一样的输入事件,并且这些输入事件对状态产生的变更都是确定性的,那么B就会和A保持同步。下面两点是复制状态机的关键:

  1. 主备初始状态一致
  2. 备份以相同的顺序执行和主一样的输入事件
  3. 所有操作对状态的变更都是确定性的

可以把计算机看作是一个状态机,其持有的状态就是CPU寄存器、内存、缓存,而输入事件则是CPU执行的指令以及外部中断。

既然选择了复制状态机,就意味着VMWare团队必须处理所有非确定性的外部事件,包括:

  1. 非确定性指令:随机数、日期时间等
  2. 外部中断:中断由设备发出,对于计算机的执行来说是异步的,假设中断在A的第110条指令和第111条指令之间发生,那么对于B,若想与A保持同步,必须也在110条和111条之间插入这个中断
  3. 只支持单核:对于多核CPU的每一个内存读写都是非确定性的操作

一般来说采用复制状态机的容错系统处理非确定性操作的方式是将非确定性操作的结果连同操作一起发送给备份,但是对于多核CPU的内存读写,这相当于将内存操作的全部结果都发送,所以复制状态机的优势已经没了。

VMWare FT貌似后期支持多核CPU的时候采用了状态迁移

利用Hypervisor

VMWare FT是如何捕获primary的每一个指令执行以及外部输入的呢?

img

在运行的虚拟机以及实际硬件之间有一个Hypervisor层,它对于一个VM的执行有完全的控制权,包括向VM递送所有的输入。它能够捕获所有primary上的非确定性操作的必要信息,并通过logging channel将这些信息发送给backup以在backup上重放。

举个例子——接收外部事件:

  1. primary的hypervisor通过外部中断接收到网卡包,它通过logging channel将其发送给backup的logging channel,并向VM层递送该中断
  2. backup的hypervisor也向它的VM层递送该中断

举个例子——发送外部事件:

  1. primary执行到了一个发送外部事件的指令,hypervisor识别到它是primary,外部事件将正常发送
  2. backup也执行到了这个指令,hypervisor识别到它是backup,不发送本次事件。所以不会有两个网卡包被发送到网络中

共享磁盘

上面提到backup会丢弃所有外部事件的发送,那磁盘写入怎么解决?

primary和backup会共享一个底层的网络磁盘,当primary宕机backup顶上后可以看到和primary一样的磁盘。

img

同步实现细节

标签:外部,虚拟机,primary,CPU,状态机,Paper,确定性,backup,18162229
From: https://www.cnblogs.com/lilpig/p/18163041

相关文章

  • centos7虚拟机配置ens网卡静态地址还是会dhcp分配一个地址?
    centos7虚拟机配置ens网卡静态地址还是会dhcp分配一个地址?问题现象[root@cent0s7~]#ipa1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8s......
  • KVM虚拟机迁移(静态)
    1.查看虚拟机状态,确认关闭状态virshlist--all 2.查看虚拟机文件位置virshdomblklistzabbix3.导出配置文件并查看导出文件virshdumpxmlzabbix>/root/zabbix.xml 4.把刚导出的配置文件传到目的服务制定路径(路径为虚拟机配置文件位置) scpzabbix.xml10.10.7.13......
  • 【VMware vSphere】vCLS 和 FSVM代理虚拟机的默认用户名和密码。
    vCLS代理虚拟机由vSphere集群服务自动生成并用于维护集群服务的运行状况。默认情况下,当集群内主机大于等于三台时,vCLS虚拟机为三个,若集群内主机数小于三台时,vCLS虚拟机等于主机的数量。这些代理虚拟机由vSphereESXAgentManager解决方案管理,通常情况下不应该去手动干预它......
  • (收藏)Mac电脑虚拟机Parallels Desktop 19 亲测稳定可用
    前言使用mac电脑时,总有某些场景需要用windows,又不愿意装双系统,更不可能准备两个电脑。上网搜索,了解到mac又一个PD虚拟机,超级好用,果断查找资源,必须给安装上正文经过不断的尝试和使用,终于发现了一个网站里提供的PD虚拟机稳定可靠,教程还详细,必须收藏。下载地址:https://mac.shuic......
  • Ubuntu 24.04 LTS x86_64 OVF (sysin) - VMware 虚拟机模板
    Ubuntu24.04LTSx86_64OVF(sysin)-VMware虚拟机模板Ubuntu24.04LTS(GNU/Linux6.8-genericx86_64)请访问原文链接:Ubuntu24.04LTSx86_64OVF(sysin)-VMware虚拟机模板,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org无耻抄袭者YuTao请远离本站!!!......
  • 如何进入 Docker Desktop for Mac 虚拟机
    由于DockerDesktop使用最小化定制的linuxkit作为一个虚拟机提供docker宿主服务一般情况我们无法直接进入因为并没有提供完整的bbusbox工具服务20.10.5)版本以前cd/Users/****/Library/Containers/com.docker.docker/Data/vms/0/screentty新版本20.10.5)之后nc-U......
  • Centos7搭建 KVM 命令行安装虚拟机
    安装前准备验证物理机CPU是否支持kvmcat/proc/cpuinfo|egrep'vmx|svm'关闭SELinuxsetenforce0永久关闭:vim/etc/sysconfig/selinux将SELinux设置为disabled安装依赖项yuminstallqemu-kvmlibvirtvirt-installbridge-utils-y验证安装结果lsmod|grepkvm......
  • 记一次 手搓 虚拟机 全过程,遇到的问题
    参考文档 1、准备一台 虚拟机主机  A机【我准备的是 win10 企业版的】打开左下角菜单-hyper-v 自带的 虚拟机管理器如果这里找不到 hyper-v 的话,请检查是否安装对应的功能,安装后重启 A机器2、这里我选择快速创建3、选择 本地安装源......
  • kvm修改虚拟机名称
    关闭虚拟机注意:如果虚拟机有快照需要先删除快照!virshlist--allvirshshutdowntest_66.124正常关闭后,虚拟机状态state为:shutoff修改配置文件名称mvtest_66.124.xmlwugang_test_66.124.xml修改配置文件内容修改图中标注的名称,即虚拟机的名称这两处为虚拟机的磁盘......
  • Docker - 基本概念、与虚拟机的区别、架构、镜像操作、容器操作、数据卷挂载
    Docker-基本概念、与虚拟机的区别、架构、镜像操作、容器操作、数据卷挂载 一、对Docker 的理解1、Docker基本概念我们平时开发大型项目组件较多,依赖关系复杂,环境差异大,通过Docker就可解决上述问题~ Docker就是一个快速交付应用、运行应用的技术:运行前后:......