情况:
在集成的一体化 ESXi/ZFS-Storage 服务器上,存储 VM 使用裸机磁盘并通过 NFS(或 iSCSI)将文件系统导出回 ESXi,ESXi 将其用作其他 VM 的池存储,存在更新存储虚拟机时会出现问题,因为许多正在运行的虚拟机都依赖于它,并且会因或类似原因而超时NFS.AllPathsDown
,这相当于从普通服务器中拉出驱动器而不将其关闭。
当然可以关闭所有虚拟机,但这会变得非常耗时且乏味(或者必须编写脚本)。将虚拟机移动到另一台主机是可能的,但需要更长的时间,并且在较小的设置中可能是不可能的,因为单台机器就足够了。暂停虚拟机可能会起作用,但速度也很慢(有时比关机慢)。
可能的解决方案...
- 一个简单而有效的解决方案似乎是通过 CLI 停止 VM 进程,在使用
kill -STOP [pid]
找到它之后ps -c | grep -v grep | grep [vmname]
,执行存储 VM 的升级/重新启动,然后使用 继续执行 VM 进程kill -CONT [pid]
。 - 类似的解决方案可能是快速重启(在 Solaris/illumos via
reboot -f
或 Linux via 上可用kexec-reboot
)的组合,这需要几秒钟而不是几分钟,以及 ESXi 中的 NFS 超时(在失去 NFS 连接时,我认为所有 I/O 都会暂停120 秒,直到假定存储永久关闭)。如果重新引导时间在 ESXi NFS 窗口内,理论上它应该类似于由于错误更正而一分钟没有响应但随后恢复正常操作的磁盘。
……还有问题?
现在,我的问题是:
- 哪种方法更可取,或者它们同样好/坏?
- 在数据库、Active Directory 控制器、用户运行作业的机器等特殊情况下会有哪些意外副作用?
- 哪里应该小心?链接博客上的评论提到,例如,当 CPU 冻结时,可能会出现计时问题。
编辑:澄清这个问题的范围
在收到前两个答案后,我认为我的问题措辞不够清楚,或者为了简洁而遗漏了太多信息。我知道以下几点:
- VMware 或其他任何人都不支持它,不要这样做!:我没有提到这一点,因为第一个链接已经告诉了它,而且我也不会问这台机器是否由 VMware 支持管理。这是一个纯粹的技术问题,支持的东西超出了这里的范围。
- 如果今天设计一个新系统,有些事情可以通过其他方式来完成: 正确,但是由于系统已经运行了几年稳定,我宁愿不把婴儿和洗澡水一起扔掉,重新开始,引入新的问题。
- 购买硬件X,你不会有这个问题!诚然,我可以以相似的成本购买 2 或 3 台额外的服务器并拥有完整的 HA 设置。我知道这是怎么做到的,这并不难。但这不是这里的情况。如果这对我来说是一个可行的解决方案,那么我一开始就不会问这个问题。
- 只需接受关闭和重启的延迟:我知道这是一种可能性,因为这是我目前正在做的事情。我问这个问题是为了在当前设置中找到更好的替代方案,或者了解已证实的技术原因,其中概述的一些方法会出现问题 - “它是不可预测的”,没有任何解释为什么在我的书中没有得到证实的答案。
因此,重新表述问题:
- 这两种方法中的哪一种在技术上更可取?为什么,假设设置是固定的并且目标是减少停机时间而不会给数据完整性带来任何负面影响?
- 在特殊情况下有什么意外的副作用,例如
- 用户和/或应用程序访问它们的活动/空闲/静止数据库
- 这台机器上和/或其他机器上的 Active Directory 控制器(在同一个域上)
- 通用机器空闲或用户运行作业或运行自动维护作业(如备份)
- 网络监控或路由器等设备
- 在此服务器或另一台或多台服务器上使用或不使用 NTP 的网络时间
- 在哪些特殊情况下最好不要这样做,因为缺点大于优点?哪里应该小心?链接博客上的评论提到,例如,当 CPU 冻结时可能会出现计时问题,但没有提供任何推理、证明或测试结果。
- 这两种解决方案之间的实际技术差异是什么?
- 由于主机上的 CPU 过载,VM 进程的执行停止
- 由于磁盘或控制器故障而增加了磁盘 I/O 的等待时间,假设它低于 NFS 阈值?