许多 IaaS 提供商提供 RAM 和核心的动态升级/降级。
通常必须重新启动 Linux VM 才能应用这些更改。
有时,VMware 工具或其他客户服务等功能集成得很好,因此升级资源立即可用,但降级仍然需要重新启动。
我该如何解决这个问题,以便在降级资源时不必重新启动我的客户端?
答案1
使用 RHEL6(以及其他系统)上的 libvirt + KVM,您可以使用 virsh 命令setmem
和执行此操作setvcpus
。
诀窍在于,您必须在启动客户机之前在永久配置中设置最大可能值。有一个标志用于此setvcpus
;对于内存,您需要改为说setmaxmem
(那里的用户界面很棒)。然后,您可以在配置的范围内动态地增加或减少它们。
对于 Linux 客户机,它会将资源热插拔到客户机或从客户机中拔出。对于 Windows 客户机,对于内存,它会告诉 Windows 它始终具有最大大小。但是,它会使用气球驱动程序来阻止您拿走的任何内存。不确定 Windows 客户机上的 VCPU。
答案2
理想情况下,如果您在维护窗口之外处理单个节点的持续或按需扩展,则重新启动对您来说并不重要。您的架构应该具有容错性、集群性和/或负载平衡性,以便在调整大小期间丢失节点不会影响任何事情。这是 Heroku 和其他 PaaS 提供商透明执行的事情。如果您正在使用 IaaS 资源构建自己的 PaaS,则应该强烈考虑采用类似的模型。
此外,许多架构都采用了这样一种策略,即应用程序给定层中的节点具有固定大小,并且整个客户机实例根据需要启动或关闭,而不是调整单个主机的大小。
我认为您通过更改客户机资源分配来扩展这一功能的做法是错误的。您应该做的是使应用程序可扩展,以便可以根据需要配置或销毁整个客户机,而不是摆弄各个 Web 前端或数据库服务器上的 RAM 或 CPU。
答案3
如果谈到 VMware,在线 RAM 和 CPU减少不支持操作。如果没有 VM 停机,则无法实现此操作。