oVirt高可用虚拟机
高可用虚拟机
什么是高可用性VM?
高可用性VM(HA VM)是由oVirt在意外消失(例如由于运行VM的主机故障,存储问题或QEMU崩溃)而自动消失时自动重启的VM。
如何使虚拟机高度可用
高可用性设置位于VM编辑对话框中。确保在那里显示“高级选项”,然后选择“ 高可用性”。
您可以看到那里有几个设置。最主要的是必须选中的高可用性复选框。本文档后面将讨论一些其他设置。
高可用性虚拟机是否总是自动重启?
自动启动虚拟机要比最初想象的要复杂一些。为了满足用户操作的要求,安全地启动这种VM,必须满足几个条件。
第一个条件是oVirt Engine必须完全确定VM当前不在任何地方运行。不满足此条件可能导致VM的多个实例在不同主机上同时运行,这就是所谓的“ 裂脑情况”。oVirt使用安全机制,例如sanlock数据,VM租用和恢复行为,以防止大脑分裂。但是请务必注意,如果oVirt Engine无法(在某些设置下)确定某个VM尚未运行,则它无法在其他位置自动启动它。例如,如果运行VM的主机不可访问,这并不意味着VM不能在那里幸福地运行。如果未启用相应的保护机制,则oVirt Engine可能会在其他位置启动VM,尽管它具有很高的可用性。
从oVirt,来宾操作系统或通过管理员发出的主机关闭(计为用户启动的关闭)手动关闭或关闭的VM不会自动重新启动。手动关闭虚拟机是用户的一项操作,oVirt对此很荣幸。用户负责再次手动启动此类VM。
可能还有其他原因阻止启动高可用性VM,例如由于给定时刻的资源限制而无法运行VM。
您可以观看DevConf.cz谈论高可用性VM及其重启。
暂停的虚拟机
除了正在运行,停止或无法访问之外,高可用性VM(以及其他VM)也可能会暂停。可以出于多种原因暂停虚拟机,例如:
- 用户要求VM开始暂停。
- 在迁移的最后阶段或使用内存制作快照时,VM可以暂停一小会儿。通常,这不会损害VM的可用性。
- 精简置备的磁盘映像已满并且必须放大时。这又只是暂时的情况。
- 由于无法访问或损坏的存储而发生I / O错误。这是一个真正的问题。
暂停的VM随后可以自动(例如,在迁移时)或由用户手动切换到其他状态(通常为“运行”或“关闭”)。
高可用VM和I / O错误
当VM尝试访问无法访问的存储或其他损坏的存储而发生I / O错误时,VM可能会暂停(除非QEMU在主机I / O访问中挂起或发生其他异常情况)。然后直到存储问题消失,它才能再次运行。然后,oVirt可以以不同的方式处理已暂停的VM。一旦存储域再次正常工作,Vdsm将遍历由于存储错误而已暂停的给定主机上的所有VM(无论是否具有高可用性)(不尝试恢复任何其他已暂停的VM)。每个暂停的VM发生什么情况取决于VM的恢复行为。
恢复行为
VM恢复行为定义了一旦先前损坏的存储再次开始工作后,如何处理由于I / O错误而先前暂停的VM。可以在VM编辑对话框的High Availability部分中选择恢复行为,以及其他VM高可用性设置。
定义了以下恢复行为:
- AUTO_RESUME:一旦存储再次正常工作,VM将自动恢复。这是最简单的情况– VM会因存储问题暂时暂停,然后继续运行,而无需用户干预。它应该用于没有特殊要求的非高可用性VM,以及KILL由于某些原因而无法使用行为时用于高可用性VM 。
- LEAVE_PAUSED:VM永远不会自动恢复。用户必须手动处理VM(运行或关闭电源)。此行为适用于在暂停后需要其他手动干预的VM,例如其来宾OS或在此运行的软件中的一些补救措施。
- KILL:这类似于AUTO_RESUME除非VM暂停时间太长。如果在给定的时间间隔(默认为80秒)内纠正了存储问题,则VM将自动恢复。但是,如果存储问题持续较长时间,则该虚拟机迟早会被终止。此行为适用于高可用性VM,以便允许它们在不存在存储问题的另一台主机上启动。
可以在任何VM上选择恢复行为,而不仅仅是高可用性VM。但是,关于高可用性虚拟机有一些特殊注意事项:
- 只要VM处于暂停状态,它就可能阻止Engine在另一个正常运行的主机上启动它。
- 或者暂停的VM可能在另一台主机上启动,然后又在原始主机上恢复,从而导致大脑分裂(该VM同时在多个实例中运行)。
如果在非高度可用的VM中使用应用程序级别的高可用性,则还需要特别注意。AUTO_RESUME在这种情况下,使用恢复行为可能不是一个好主意:如果VM暂停并且应用程序级别的高可用性通过在其他位置运行应用程序来处理这种情况,则如果暂停的VM重新启动,则可能会引起混乱。在此类设置中使用LEAVE_PAUSED或KILL恢复行为可能会更好。
另一个特殊的考虑因素是,高可用性VM中的应用程序或其他功能是否需要很长时间才能启动。然后,最好是让VM暂停并尝试恢复它(即使需要一些时间),而不是尝试尽快重新启动VM,然后等待很长时间才能开始内部服务开始工作。 在这种情况下,AUTO_RESUME恢复行为可能更可取KILL。
虚拟机租约
VM租用是一项功能,可确保VM不能同时在多个实例中运行。这种保证使重启高可用性虚拟机更加安全,从而更加轻松。当虚拟机已通过租约启动并且为虚拟机启用了租约时,无法进行裂脑。
再次在VM编辑对话框的“高可用性”部分中,只能为高可用性VM启用VM租约。只需在对话框中选择“ VM租赁的目标存储域 ”。
基本上,具有租约的VM只能在给定主机上获得租约后才能在该主机上启动。VM停止,暂停,被杀死或QEMU进程崩溃后,它将释放租约,使其可用于在另一台主机上启动VM。VM租约在单独的有关租约的文档中进行了详细描述。
为了防止出现脑裂,最好在高可用性VM上使用VM租约。如果某些主机上的存储问题长时间存在,相同的设置也有助于重新启动其他主机上的高可用性VM。由于暂停的VM释放了其租约,因此这些VM可以在其他主机上运行,但是在稍后尝试在原始主机上恢复它们时可能会造成麻烦。因此,这KILL是具有租约的VM唯一可能的恢复行为,当Engine将VM移至“未知”状态并尝试在其他位置启动它时,这有助于破坏已暂停的VM实例。当然,KILL行为意味着在给定条件下会杀死VM,因此在使用它之前,请考虑一下您的设置。
补充笔记
从oVirt 4.2开始,VM恢复行为可用。较早的oVirt会AUTO_RESUME在所有VM上发布已应用的行为。
在oVirt 4.2.2之前,具有KILL行为的VM 仅在存储可用后才被杀死,即Vdsm尝试恢复已暂停的VM。从oVirt 4.2.2开始,即使在存储问题仍然存在的情况下,超时也会在不久后终止VM。
如果在存储问题仍然存在的情况下尝试恢复虚拟机,则迟早会再次暂停该虚拟机。当用户尝试手动恢复VM或诱使Vdsm认为存储域状态已更改时,可能会发生这种情况。在这种情况下,终止超时将重置并从新的暂停操作开始重新计数。
可以/etc/vdsm/vdsm.conf使用vm_kill_paused_time选项在主机上调整killing timeout值。但是不要这样做,除非您真的知道自己在做什么!