我想在生产环境中拥有一个带有少量虚拟机(具有不同的客户操作系统)的 KVM 虚拟化服务器。现在,当我想为主机安装内核/软件包更新时,如何重新启动虚拟机管理程序而不损坏任何虚拟机数据?(当虚拟机上发生一些 SQL/磁盘写入时)
我知道这是一个非常简单的问题,但我主要想知道内核维护应该是主机保持更新的最佳选择。我没有发现数据损坏/任何此类严重问题,但虚拟机的最小中断是可以接受的(在应用程序托管服务器环境中)。
答案1
升级服务器的最佳选择是使用实时迁移。准备一个备用主机,为其提供完全升级的软件堆栈,然后将所有正在运行的虚拟机实时迁移到该主机。现在您可以安全地升级并重新启动原始主机。这是大多数公共云处理主机升级而不导致客户虚拟机停机的方式。
当然,客户虚拟机在某些时候也需要自己的软件升级和重启。
答案2
我看到了几种具有不同成本、停机时间和风险的选项。
- 实时迁移。这样可以将停机时间降到最低,意味着每次只冒一个虚拟机的风险。但是,迁移出错可能会引发问题,当然,您需要第二个主机箱。
- 非实时迁移,每次关闭一个虚拟机并迁移它们。如果您的环境中无法进行实时迁移,则可能值得考虑。
- 关闭虚拟机,然后在重新启动主机后重新启动它们。任何像样的虚拟机平台都应该能够向虚拟机发送 ACPI 关闭信号,任何像样的现代操作系统都应该理解 ACPI 关闭信号的含义。如果您采用这种方式,并且客户虚拟机已经有一段时间没有重新启动了,我建议您在关闭所有虚拟机以重新启动主机之前,先对每个虚拟机进行一次测试关闭和重新启动。
- 将虚拟机挂起至磁盘并在重新启动主机后恢复它们。这里的风险是如果升级期间所做的更改导致无法恢复,会发生什么情况。然后,您将面临所有虚拟机的非正常关闭。