如何在调整虚拟机大小时避免停机

许多IaaS提供商提供RAM和内核的dynamic升级/降级。

通常,Linux VM必须重新启动才能应用这些更改。

有时,像VMware工具或其他访客服务这样的东西已经很好地集成在一起,所以资源的升级是立即可用的,但降级仍然需要重新启动。

我该如何解决这个问题,以便在降级资源时不必重新启动我的客人?

使用RHEL6上的libvirt + KVM(推测是其他),你可以用virsh命令setmemsetvcpus来做到这setvcpus

诀窍是在引导guest虚拟机之前,必须在永久configuration中设置最大可能值。 在setvcpus上有这个标志; 对于内存你需要说setmaxmem而不是(伟大的UI那里)。 然后,您可以在configuration范围内实时缩放它们。

对于Linux客户,它热插拔来宾的资源。 对于Windows客人,对于内存来说,它告诉窗口它始终具有最大的最大尺寸。 但是,它将使用气球驱动程序来阻止您带走的任何内存。 不确定Windows客户端上的VCPU。

理想情况下,如果您正在处理维护时段之外的单个节点的按比例缩放或按需按比例放大,则重新启动对您无关紧要。 您的体系结构应该具有容错性,集群性和/或负载均衡性,以便在resize时不会影响任何节点。 这是Heroku和其他PaaS提供商透明地做的事情。 如果您从自己的IaaS资源中构build自己的PaaS,则应该强烈考虑使用类似的模型。

此外,许多体系结构采用策略,应用程序的给定层中的节点具有固定的大小,并且根据需要将整个客户机实例放大或缩小,而不是调整单个主机的大小。

我认为你通过改变来宾资源分配的规模来接近这个错误的方式。 您应该如何使应用程序可扩展,以便可以根据需要调配或销毁整个guest虚拟机,而不是在各个Web前端或数据库服务器上摆弄RAM或CPU。

如果说VMware,在线RAM和CPU 减less不支持操作。 没有虚拟机停机时间,这是不可能的。