Многие провайдеры IaaS предлагают динамическое обновление / понижение уровня ОЗУ и ядер.
Обычно виртуальную машину Linux необходимо перезагрузить, чтобы применить эти изменения.
Иногда такие вещи, как инструменты VMware или другие гостевые службы, хорошо интегрированы, поэтому обновления к ресурсам доступны немедленно, но для перехода на более раннюю версию требуется перезагрузка.
Как я могу решить эту проблему, чтобы при переходе на более раннюю версию ресурсов мне не приходилось перезагружать моих гостей?
В идеале, если вы имеете дело с постоянным или по требованию вертикальным масштабированием отдельных узлов вне периода обслуживания, перезагрузка не должна иметь для вас значения. Ваша архитектура должна быть отказоустойчивой, кластерной и / или сбалансированной по нагрузке, чтобы потеря узла во время изменения размера ни на что не повлияла. Это то, что Heroku и другие провайдеры PaaS делают прозрачно. Если вы строите свой собственный PaaS из своих ресурсов IaaS, вам настоятельно рекомендуется рассмотреть аналогичную модель.
Кроме того, многие архитектуры используют стратегию, при которой узлы на заданном уровне приложения имеют фиксированный размер, а целые гостевые экземпляры вращаются вверх или вниз по мере необходимости, а не изменяют размер отдельных хостов.
Я думаю, что вы подходите к этому неверно, изменяя назначение гостевых ресурсов в соответствии с масштабом. Что вы должны делать, чтобы сделать приложение масштабируемым таким образом, чтобы все гости могли быть подготовлены или уничтожены по мере необходимости, вместо того, чтобы возиться с ОЗУ или ЦП на отдельных веб-интерфейсах или серверах баз данных.
С libvirt + KVM на RHEL6 (и предположительно других) вы можете сделать это с помощью команд virsh setmem
и setvcpus
.
Хитрость в том, что вы должны установить максимально возможные значения в постоянной конфигурации перед загрузкой гостя. Для этого есть флажок setvcpus
; на память нужно сказать setmaxmem
вместо этого (отличный интерфейс). Затем вы можете масштабировать их вверх и вниз на лету в пределах диапазона, указанного в конфигурации.
Для гостей Linux он подключает ресурсы к гостю или от него. Для гостей Windows, для памяти он сообщает окнам, что всегда имеет полный максимальный размер. Однако он будет использовать драйвер воздушного шара, чтобы удерживать любую память, которую вы забираете. Не уверен в VCPU на гостевых ОС Windows.
Если говорить о VMware, оперативной памяти и процессоре уменьшается не поддерживаются операции. Это невозможно без простоя ВМ.