Запуск множества виртуальных машин на одном хосте

StackOverflow https://stackoverflow.com/questions/154250

Вопрос

Мне необходимо запустить относительно большое количество виртуальных машин на относительно небольшом количестве физических хостов.Каждая виртуальная машина не делает многого — каждая должна запускать только одну базовую сетевую службу — например, SMTP или что-то в этом роде.Кроме того, нагрузка на каждого будет чрезвычайно легкой.

К сожалению, цифры составляют около 100 виртуальных машин на 5 физических хостах.Каждый хост достаточно приличный — ядро ​​2, 2 гига оперативки и диск на 1 ТБ.Тем не менее, я знаю, что просто взяв образ Ubuntu VMware и добавив его на эту машину, я не получу около 100 экземпляров, а будет что-то ближе к 20.

Итак, есть ли надежда на такое соотношение изображений и хостов?Кроме того, какая реализация виртуальной машины лучше всего подходит для этой цели, т.е. обеспечивает эффективное общее использование ресурсов?В основном мы используем здесь vmware, но если есть значительное преимущество в производительности, которое можно получить за счет перехода на Xen или что-то подобное, я уверен, что мы рассмотрим это.

Заранее спасибо за ваши идеи :)

Примечание:В итоге мы использовали OpenVZ, и он работал довольно хорошо.Параметры по умолчанию для шаблона Ubuntu позволяют нам запускать около 40 экземпляров на каждой машине.

Это было полезно?

Решение

Есть три основных направления, которые помогут сделать их подходящими:

  1. более низкие накладные расходы.OpenVZ, Vserver, chroot — идеальный вариант, если это применимо.если вам действительно нужно, чтобы каждый экземпляр был настоящей виртуальной машиной со своим собственным ядром, попробуйте KVM/Xen вместо VMWare.может быть, вы менее зрелы, но у вас будет гораздо больше гибкости.

  2. меньшие гости.попробуйте Ubuntu JeOS или создайте свою собственную систему с помощью busybox

  3. делитесь как можно большим количеством между гостями.попробуйте использовать один образ чтения/вывода для всех ОС и смонтируйте небольшой образ чтения/записи для каждого гостя в /var, /home, /etc и т. д.

Другие советы

Пара проблем с этим...

  1. Для сервера Vmware вам действительно понадобится серверное оборудование, если оно не предназначено только для тестирования.
  2. Используйте решение виртуализации простого уровня, такое как Xen Server, или VMware ESX или ESXi (бесплатно), или Hyper-V, которое не является простым уровнем, но ближе по производительности.
  3. Для 20-1 вам понадобится больше оперативной памяти.Математика не складывается.Минимально функциональным машинам требуется 512, если только это не идеально урезанный Linux, в котором должно быть как минимум 256.20x256= 5 ГБ + 5-10% накладных расходов.С такими характеристиками этого не произойдет.
  4. Для 20-1 вам понадобится больше процессора.Каждая машина будет иметь виртуальный ЦП.общий доступ к ядру 2 означает, что 10-1 на процессор.не хорошо.Мы запускаем почти 20 на двухъядерном процессоре Dell 1950 с 16 ГБ оперативной памяти.Прекрасно работает.
  5. Что бы вы ни выбрали, вы будете переназначать память.Не совсем уверен, какие из них вам позволяют.Vmware будет, но показывает предупреждения.
  6. Я слышал, но не имею доказательств, что XenServer обеспечит прирост производительности, но никто не утверждает, что он превышает 10-20%.

Удачи

Вам действительно нужны 100 полнофункциональных операционных систем?

Почему бы не воспользоваться подходом, который уже используется веб-серверами?Я имею в виду виртуальные веб-серверы/хосты.

Например, возьмем Apache HTTPD, установленный на одном физическом сервере, на котором размещено множество виртуальных серверов, с использованием одного файла конфигурации.Кроме того, вам понадобится настроенный DNS и/или множество виртуальных сетевых интерфейсов (eth0:0, eth0:1,...,eth0:n) с разными IP-адресами.

Это должно сработать, если вам действительно нужно только несколько сервисов, открытых миру, и нагрузка невелика.

Другая возможность — использовать облегченный дистрибутив Linux, который может работать на очень небольшом объеме памяти.Что-то вроде DamnSmallLinux или вариации DDWRT.Они могут работать в памяти объемом всего 16 МБ, что позволяет запускать 20 и более на одной машине.

Лучше всего использовать VMware ESX/ESXi, поскольку они оба имеют интересную функцию объединения памяти.По сути, он берет идентичные страницы памяти и использует их среди нескольких гостевых машин, поэтому, если у вас много одинаковых гостевых систем, вы сможете получить на своем хосте гораздо больше, чем на других виртуальных машинах.

Проверьте немного о «Прозрачном совместном использовании страниц» в эта запись в блоге, и комментарий по этому поводу здесь слишком.

Очевидно, вы все еще настаиваете на 20 гостях на хост и только 2 ГБ ОЗУ на каждом, но если вы удалите все посторонние службы и приложения, а также создайте 1 гостевой образ и клонируйте его перед установкой специального приложения на каждый из них, вы можете только сойдите с рук, тем более что ссылка на VMware показывает хост 4 ГБ с 40 гостями!

у меня есть одна четырехъядерная машина с полным рабочим столом и 9 виртуальных машин.так как это тестовая машина, я использую всяких гостей.Лучшими по использованию оперативной памяти являются debian-kfreebsd и tiny core linux.крошечное ядро ​​​​Linux использует 10 МБ оперативной памяти, ничего не делая.добавьте пару сервисов, и это может быть 32 МБ, так что я смогу запустить 32 виртуальные машины в пределах 1 ГБ оперативной памяти!у вас есть 2 ГБ, допустим, вы можете запустить 48 машин, включая гипервизор и накладные расходы (я использую kvm), поэтому с 5 машинами у нас будет до 240 машин :D

думаю, я попробую это через минуту :D

кстати.Вы сказали, что виртуальная машина будет иметь небольшую нагрузку, поэтому я не рассчитывал на загрузку процессора или диска.и эти цифры имеют ровно нулевую избыточность.

Если вы можете достаточно уменьшить гостя, вы, вероятно, сможете это сделать, без X, запуска минимальных служб и т. д.Посмотрите на сервер Slackware или Ubuntu.Xen кажется популярным среди веб-хостинговых компаний, поэтому, возможно, на него стоит обратить внимание.

Использование ЦП будет зависеть от приложений, но, возможно, вам захочется купить еще немного оперативной памяти!

Есть ли причина, по которой каждый экземпляр сетевой службы необходимо разделить на отдельные виртуальные машины?Если вам не нужно изолировать пользователей друг от друга, но нужно изолировать процессы и трафик, то, вероятно, лучше просто использовать пять серверов как есть и запускать отдельные процессы для каждого экземпляра.Каждый экземпляр будет привязан к отдельному виртуальному интерфейсу.

Например, настройте виртуальный интерфейс и присвойте ему IP-адрес.Создайте файл httpd.conf и/или файл sendmail.cf для экземпляра, который вы хотите создать.В конфиге укажите, что демон должен быть привязан к виртуальному интерфейсу (и только к нему).Запустите демон.

Повторите для каждого экземпляра.У вас будет много запущенных процессов (сотни, если не тысячи), общая сумма которых будет использовать меньше памяти, чем десятки виртуальных машин.Кроме того, ваша ОС сможет заменять неиспользуемые файлы на диск.

Если вы посчитаете, вы получите в среднем 100 МБ оперативной памяти для каждой машины.Это немного.Накладные расходы на виртуальную машину довольно велики: в каждом экземпляре приходится запускать полную ОС.

Либо вы используете какую-то действительно небольшую ОС (http://www.damnsmalllinux.org/?) и потратьте время на то, чтобы еще больше его упростить, иначе вы получите машины побольше.

Поскольку машины настолько дешевы, я бы предпочел перейти на 64-битную ОС с большим количеством оперативной памяти.

У VMWare есть замечательная опция, позволяющая «объединить» группу физических машин, и она автоматически переместит виртуальные машины на то оборудование, которое меньше всего используется, не прерывая работу виртуальной машины.

Скорее рекламная ссылка.

Вы ограничены vmware?Вы рассмотрели Виртуализация на уровне операционной системы? Вы получите больше виртуальных машин с меньшими затратами, поскольку каждая виртуальная машина может работать с одним и тем же ядром.

Несколько мыслей...

1. Как отмечали другие, арифметика памяти не работает, вам понадобится больше оперативной памяти.

2. В зависимости от услуги вы можете найти предварительно настроенные виртуальные машины.Например, Астаро имеет настройку виртуальной машины для бесплатного программного обеспечения брандмауэра.Вы также можете найти очень маленький дистрибутив Linux, который можно адаптировать.

3- Возможно, я что-то упускаю, но похоже, что Ubuntu уже довольно близка...20 экземпляров на машину на 5 машинах дают необходимые 100 экземпляров.Однако запаса для будущего роста не так много...

Берегите себя, удачи.

Я не знаю, возможно ли это, но как насчет запуска каждой службы в среде chroot?Вероятно, вы могли бы сэкономить дисковое пространство, жестко связав необходимые файлы библиотеки для создания каждой файловой системы chroot.

Другая проблема при запуске каждой службы на отдельной виртуальной машине заключается в том, что всем им потребуется собственный IP-адрес.100 IP-адресов могут не быть проблемой во внутренней сети (например, настройка 172/8 или 10/8), но если они являются частью вашего класса A (при условии, что у вас так много общедоступных), у вас закончится быстрый.

И, как спрашивали другие, почему каждая служба должна быть отдельной виртуальной машиной?Многие из них должны легко работать на одном хосте.

Если это можно сделать на уровне приложения, я бы отказался от виртуализации.Вы можете запускать несколько экземпляров своего приложения на разных номерах портов, даже на разных IP-адресах, с легкостью используя псевдонимы IP.Таким образом, вы можете легко запустить более 20 копий на каждом из ваших ящиков.Черт возьми, возможно, вы сможете сделать все, используя половину вашего оборудования.

Виртуализация не является решением всех проблем.:)

Мой 2с.

Облачная литейная.Я ничего не знаю о виртуальных машинах по сравнению с кем-либо еще, кто, возможно, отправил ответ, но, насколько я понимаю, если у вас есть хост, виртуальная машина на этом хосте, а затем Cloud Foundry на этой виртуальной машине, вы можете легко создать базовую вторичную виртуальную машину и легко реплицируйте и настраивайте все свои службы в этом наборе дополнительных виртуальных машин, сохраняя при этом низкое использование оборудования.Я не знаю, сработает ли это наверняка, но, насколько я понимаю, это будет один из наиболее минимальных подходов, и это двухкорпусный подход, который снизит возможный риск повреждения хост-машины.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top