虚机高可用

虚机高可用是指当运行虚拟机的主机出现系统故障、存储问题、qemu崩溃等时,其上运行的虚拟机能够自动在集群中的其他主机重新启动起来。 虚拟高可用的实现必须基于共享存储或者gluster存储。

如何配置虚机高可用

虚机高可用配置在虚机的编辑对话框中,进入【高级选项】中的【高可用】标签页,选中【高可用】复选框即可,oVirt4.2版本中还有一些其他的可配置项。

虚机自动重启的说明

高可用虚机自动重启的逻辑要复杂些,只有当一些条件满足时虚机才能安全的自动重新启动起来。 首要条件是ovirt-engine要确定这个虚机当前没有在其他主机上运行,如果这个条件判断出错将会导致一个虚机的多个实例在不同主机上同时运行,从而造成数据损坏,这个现象被称为脑裂。 oVirt使用安全机制例如sanlock、虚机租约和恢复行为来阻止脑裂的发生,但是仍然需要注意的是如果ovirt-engine不知道这个虚机是否仍在运行,将不会让它在其他主机上自动重启。例如,如果一个运行着虚机的主机无法联系上并不代表着虚机不再运行了,尽管配置了虚机高可用,如果安全机制不可用ovirt-engine也不会重启虚拟机。 从oVirt WEB管理台手动关闭或断电虚拟机,或者在虚拟机内部从操作系统层面关机,或者由于管理问题导致的主机关闭虚机(被认为是用户发起的关机),这类操作不会触发虚机高可用,虚机不会自动重启,手动关闭虚机是用户行为将被oVirt忽视,也应由用户再把虚机启动起来。 Youtube上有个关于虚机高可用以及自动重启的说明DevConf.cz talk

虚机暂停

除了运行、停止、无响应外,虚机也有可能会暂停,暂停的原因有多种,例如:

  • 用户手动暂停虚机;
  • 在线迁移的最后阶段会有很短暂的暂停,但不影响虚机使用;
  • 打带内存的快照会有很短暂的暂停,但不影响虚机使用;
  • 当一个精简模式的磁盘已分配的空间被写满要扩展的时候,这也是很短暂的;
  • 当存储无法访问或存储中断出现I/O错误时,这属于故障情况;

虚机高可用和I/O错误

由于存储I/O错误导致的虚机暂停在存储恢复后能够被自动处理,存储恢复后vdsm会检查所有的虚机,如果是由于存储问题引起的暂停会按照虚机配置的恢复行为进行处理。其他原因导致的虚机暂停不会被自动处理。

虚机恢复行为

虚机恢复行为定义了由于存储I/O错误导致的虚机暂停在存储恢复正常后虚机如何进行处理。虚机恢复行为在虚机编辑对话框中的高可用标签页中配置。 有如下三种行为可选择:

自动恢复:当存储可用时,虚机会自动恢复到运行状态。这是最简单的处理方案,虚机因为存储问题暂停一段时间然后自动恢复运行,期间不受用户的人工干预。这种行为适用于没有特殊要求的非高可用虚机,或者不适合kill掉的高可用虚机。

保持暂停:虚机将不会自动恢复,必须用户手动处理此虚机(启动或断电)。这种行为适用于虚机在暂停后需要额外的人工干预的情形,例如对虚机内运行的软件或操作系统进行补救。

杀死:除非虚机暂停时间比较长,否则效果和“自动恢复”是一样的。如果存储问题在限定的超时时间内(默认是80s)能够恢复正常,那么暂停的虚机将会自动恢复,如果虚机暂停的时间比较长,那么将会被杀死。这种行为适用于高可用虚机,目的是为了让高可用虚机能够在其他主机上重新启动。

所有虚机都可以配置恢复行为,不仅仅是高可用虚机,但是对于高可用虚机需要有一些额外的考虑:

  • 只要虚机处于暂停状态,engine将不会将它从另外的主机上运行起来;
  • 暂停的虚机可能在另外一台主机上启动起来,而之前主机上处于暂停的虚机又恢复了,将会导致脑裂的发生。

在非高可用虚机中启用应用级别的高可用还需要特别考虑,这种场景使用“自动恢复”可能不太好,虚机暂停后,其中的应用程序触发高可用,在其他地方运行应用程序,当虚机恢复后,可能会导致应用程序的混乱。这种情况下使用“保持暂停”或“杀死”比较好。

另一个特别考虑的场景是,如果一个高可用虚机中的应用程序或服务在虚机启动后需要很长时间才能开始,可能花些时间恢复比等待虚机重启后的服务启动更好,这时候使用“自动恢复”比“kill”更合适。

虚机租约

虚机租约是一个用来保证同一时刻只能运行一个虚机实例的功能,这让高可用的虚机更安全,当一个虚机开始于一个租约并且这个租约始终保持的情况下是不会发生脑裂问题的。

虚机租约只能为高可用的虚机配置,在虚机编辑对话框的高可用标签页,从下拉列表框中选择使用租约的目标存储域即可。

通常一个虚机只有获得租约才能从指定的主机上运行,一旦这个虚机停止、暂停、被杀死或它的QEMU进程崩溃了,它的租约就会被释放,以便于将这个虚机从其他主机上重新启动。虚机租约的详细说明在【虚机租约】。

为了防止脑裂,最好为高可用虚机配置租约,同样也有助于将高可用虚机在其他主机上重新启动以免原来主机上一直存在存储问题。由于暂停状态的虚机会释放租约,以便在其他主机上重新启动,但是当原来主机上的此虚机从暂停状态恢复时就会有问题,所以“杀死”是带租约的虚机唯一可选的恢复行为,这样能够在engine尝试将暂停虚机在其他主机上启动时将原来的虚机实例销毁掉。当然毕竟是杀死虚机,用之前仔细考虑下。

补充说明

从oVirt4.2之后的版本可以配置虚机恢复行为,之前的版本所有的虚机默认使用“自动恢复”行为。

oVirt4.2.2之前版本的“杀死”行为只有在存储恢复时才执行,vdsm尝试去恢复暂停的虚机。oVirt4.2.2之后当超时时间到了,即使存储仍存在问题也会将虚机杀死。

如果在存储存在问题的情况下,虚机尝试恢复,会再次进入暂停状态。当用户尝试手动的启动暂停状态的虚机或vdsm被欺骗的认为存储域的状态发生改变时会发生这种情况。这种情况下超时时间会从再次暂停的时间重新计时。

“杀死”行为的超时时间可在/etc/vdsm/vdsm.conf中配置,配置项为vm_kill_paused_time.除非你清楚该如何改否则别改!

0 条回复 A 作者 M 管理员 E
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论