Мне необходимо запустить относительно большое количество виртуальных машин на относительно небольшом количестве физических хостов. Каждая виртуальная машина мало что делает - каждая должна запускать только одну базовую сетевую службу - подумайте о SMTP или тому подобном. Кроме того, нагрузка на каждую из них будет очень небольшой.
К сожалению, это примерно 100 виртуальных машин на 5 физических хостах. Каждый хост достаточно приличный - ядро 2 с 2 гигабайтами оперативной памяти и 1 ТБ диск. Однако я знаю, что если просто взять образ ubuntu vmware и добавить его на эту машину, у меня не будет около 100 экземпляров, а будет что-то ближе к 20.
Итак, есть ли надежда на такое соотношение изображений к хостам? Кроме того, какая реализация виртуальной машины лучше всего подходит для этой цели, т. Е. Имеет эффективное общее использование ресурсов? Здесь мы в основном используем vmware, но если есть значительное преимущество в производительности, которое можно получить, переключившись на Xen или что-то подобное, я уверен, что мы рассмотрим это.
Заранее благодарим вас за понимание :)
Примечание: в итоге мы использовали OpenVZ, и он работал довольно хорошо. Параметры по умолчанию для шаблона ubuntu позволяют запускать около 40 экземпляров на машине.


Если вы можете достаточно уменьшить гостя, вы, вероятно, сможете это сделать, без X, запускаемых минимальных служб и т. д. Посмотрите на Slackware или сервер ubuntu. Xen кажется популярным среди компаний, предоставляющих веб-хостинг, поэтому на него стоит обратить внимание.
Использование ЦП будет зависеть от приложений, но, возможно, вы захотите купить еще ОЗУ!
Если вы посчитаете, вы получите в среднем 100 МБ оперативной памяти для каждой машины. Это немного. Накладные расходы для виртуальной машины довольно велики, поскольку в каждом экземпляре требуется запускать полную ОС.
Либо вы используете действительно небольшую операционную систему (http://www.damnsmalllinux.org/?) И тратите время, чтобы ее еще больше разобрать, либо вы получаете машины большего размера.
Поскольку машины такие дешевые, я бы предпочел перейти на 64-битную ОС с большим количеством оперативной памяти.
У VMWare есть классная опция, в которой вы можете «объединить» группу физических машин, и она автоматически переместит виртуальные машины на то оборудование, которое используется меньше всего, без прерывания работы виртуальной машины.
Вы ограничены vmware? Рассматривали ли вы Виртуализация на уровне операционной системы?. Вы получите больше виртуальных машин с меньшими накладными расходами, учитывая, что каждая виртуальная машина может запускать одно и то же ядро.
нет - я не думаю, что я ограничен vmware. Что бы ни делало работу.
На самом деле - я не уверен. У нас могут быть определенные требования к ОС для каждого образа, которые не позволят нам сделать что-то вроде запуска кучи FreeBSD-джейлов.
Что ж, если бы вы могли настроить одно ядро Linux, которое поддерживало бы все ваши различные приложения, тогда Virtuozo и OpenVZ могли бы упаковать намного больше виртуальных машин на одном физическом хосте. Удачи!
Несколько мыслей ...
1- Как отмечали другие, арифметика памяти не работает, вам понадобится больше оперативной памяти.
2- В зависимости от службы вы можете найти предварительно настроенные виртуальные машины. Например, Astaro имеет установку виртуальной машины для бесплатного программного обеспечения межсетевого экрана. Вы также можете найти очень маленький дистрибутив Linux, который сможете адаптировать.
3- Возможно, мне что-то не хватает, но похоже, что Ubuntu уже довольно близок ... 20 экземпляров на машину на 5 машинах получают 100 экземпляров, которые вам требуются. Однако у нас не так много возможностей для будущего роста ...
Береги себя, удачи.
это больше похоже на 4-5 изображений на хост, всего 20 изображений.
Пара проблем с этим ...
Удачи
есть три основных направления, по которым они подходят:
снизить накладные расходы. OpenVZ, Vserver, chroot, если применимо, были бы идеальными. если вам действительно нужно, чтобы каждый экземпляр был реальной виртуальной машиной с собственным ядром, попробуйте KVM / Xen вместо VMWare. может быть менее зрелым, но у вас будет гораздо больше гибкости.
маленькие гости. попробуйте Ubuntu JeOS или создайте свой собственный с busybox
делитесь как можно больше между гостями. попробуйте поделиться одним образом R / O со всей ОС и смонтировать небольшой образ R / W для каждого гостя в / var, / home, / etc и т. д.
Хороший ответ, по состоянию на 2014 год. Я говорю, что Докер и контейнер linux должны быть добавлены к вашему пункту 1.
@ Ajeeb.K.P правда, контейнеры Linux (и варианты BSD / solaris) так же легки, как и chroot; но Docker добавляет наложение файловой системы, и я не знаю, насколько это влияет на дисковый ввод-вывод.
Я просто сказал, что это новые тенденции. Это более удобно для разработчиков. И это снижает сложность развертывания приложения. Его рассматривают такие крупные компании, как Google, Canonical (компания Ubuntu), Redhat и т. д. Я понимаю, что это может повлиять на ввод-вывод, но вопрос был о виртуальной машине. Docket - это контейнер на основе Linux (по крайней мере, некоторая концепция и код), поэтому я считаю, что это тоже ответ. В частности, Redhat работает с Project Atomic, а Canonical - с Ubuntu Snappy, и я слышал, что Google тоже в этом заинтересован.
Лучше всего запустить VMware ESX / ESXi, поскольку у них обоих есть необычная функция пула памяти. Он в основном берет идентичные страницы памяти и использует их для нескольких гостей, поэтому, если у вас много одинаковых гостей, вы сможете получить на своем хосте намного больше, чем с другими виртуальными машинами.
Проверьте бит о "Transparent Page Sharing" в эта запись в блоге, а также комментарий об этом здесь.
Очевидно, вы по-прежнему продвигаете его с 20 гостями на хост и только с 2 ГБ ОЗУ на каждом, но если вы удалите все посторонние службы и приложения, создадите 1 гостевой образ и клонируете его перед установкой специального приложения на каждом, вы можете уйти от только с ним, тем более что ссылка VMware показывает хост 4 Гб с 40 гостями!
Вам действительно нужно 100 полнофункциональных операционных систем?
Почему бы не воспользоваться подходом, который уже используется веб-серверами? Я имею в виду виртуальные веб-серверы / хосты.
Например, возьмите Apache HTTPD, установленный на одном физическом сервере, на котором размещено множество виртуальных серверов, с использованием одного файла конфигурации. Кроме того, вам понадобится настроенный DNS и / или множество виртуальных сетевых интерфейсов (eth0: 0, eth0: 1, ..., eth0: n) с разными IP-адресами.
Это должно сработать, если вам действительно нужно всего несколько сервисов, доступных миру, и нагрузка не велика.
Есть ли причина, по которой каждый экземпляр сетевой службы необходимо разделить на свои собственные виртуальные машины? Если вам не нужно изолировать пользователей друг от друга, но нужно изолировать процессы и трафик, тогда вам, вероятно, будет лучше просто использовать пять серверов как есть и запускать отдельные процессы для каждого экземпляра. Каждый экземпляр будет привязан к отдельному виртуальному интерфейсу.
Например, настройте виртуальный интерфейс и назначьте ему IP-адрес. Создайте файл httpd.conf и / или файл sendmail.cf для экземпляра, который вы хотите создать. В конфигурационном файле укажите, что демон должен быть привязан к виртуальному интерфейсу (и только к нему). Запустите демон.
Повторите для каждого экземпляра. У вас будет запущено много процессов (сотни, если не тысячи), в сумме они будут использовать меньше памяти, чем десятки виртуальных машин. Кроме того, ваша ОС сможет выгружать неиспользуемые файлы на диск.
Знаешь, это может быть неплохой идеей. Если я правильно понимаю, для каждого процесса я могу назначить виртуальный интерфейс с уникальным IP-адресом, и если я хочу, чтобы процесс имел собственный IP-адрес, я настраиваю их для использования одного из этих виртуальных интерфейсов.
К сожалению, я думаю, что у нас действительно есть причина иметь полноценную ОС. Однако нам может не понадобиться 100 из них, возможно, только 40, и тогда мы сможем использовать этот трюк для остальных. Это, конечно, есть над чем подумать.
Вы также можете попробовать что-нибудь с chroot-средами, если вам нужно дальнейшее разделение. Вы должны создать маленькие мини-файловые системы для каждого изолированного процесса, а затем запустить процесс в chroot-тюрьме.
Другая возможность - использовать облегченный дистрибутив Linux, который может работать с очень небольшим объемом памяти. Что-то вроде DamnSmallLinux или разновидность DDWRT. Они могут работать с 16 МБ памяти, что позволяет запускать 20 или более на одной машине.
Я не знаю, возможно ли это, но как насчет запуска каждой службы в среде chroot? Вероятно, вы могли бы сэкономить место на диске, жестко связав необходимые файлы библиотеки для создания каждой файловой системы chroot.
Еще одна проблема, связанная с запуском каждой службы на отдельной виртуальной машине, заключается в том, что всем им потребуется собственный IP-адрес. 100 IP-адресов могут не быть проблемой во внутренней сети (например, настройка 172/8 или 10/8), но если они являются частью вашего класса A (при условии, что у вас так много общедоступных), у вас закончится быстрый.
И, как спрашивали другие, почему каждая служба должна быть отдельной виртуальной машиной? Многие из них должны легко работать на одном хосте.
Если это что-то, что можно сделать на уровне приложения - я бы обошелся без виртуализации. Вы можете легко запустить несколько экземпляров своего приложения на разных номерах портов, даже на разных IP-адресах с псевдонимом IP. Таким образом, вы можете легко запустить более 20 копий на каждом из ваших ящиков. Черт возьми, вы могли бы делать все, используя половину вашего оборудования.
Виртуализация - это не решение для всего. :)
Мой 2c.
У меня есть одна четырехъядерная машина с полным рабочим столом и 9 виртуальных машин. поскольку это тестовая машина, я использую всевозможные гости. лучше всего по использованию оперативной памяти кажется debian-kfreebsd и tiny core linux. крошечное ядро Linux использует 10 МБ оперативной памяти, ничего не делая. добавьте пару сервисов, и это может быть 32M, так что я могу запустить 32 vm в пределах 1GB RAM! у вас есть 2 ГБ, поэтому допустим, вы можете запустить 48 машин, включая гипервизор и накладные расходы (я использую kvm.), поэтому с 5 машинами у нас будет до 240 машин: D
Думаю, сейчас я попробую: D
Кстати. Вы сказали, что у виртуальной машины должна быть небольшая нагрузка, поэтому я не рассчитывал на загрузку процессора или загрузку диска. и эти цифры имеют ровно нулевую избыточность.
Cloud Foundry. Я ничего не знаю о виртуальных машинах по сравнению с кем-либо еще, кто мог отправить ответ, но насколько я понимаю, если у вас есть хост, виртуальная машина на этом хосте, а затем Cloud Foundry на этой виртуальной машине, вы можете легко создать базовую вторичную виртуальную машину и легко реплицируйте и настройте все свои службы в этом наборе вторичных виртуальных машин, сохраняя при этом низкое использование оборудования. Я не знаю, сработает ли это наверняка, но насколько я понимаю, это был бы один из наиболее минимальных подходов, и это подход с двумя корпусами, который снизит возможный риск повреждения хост-машины.
Согласно этот блог, имея такое количество виртуальных машин, вы можете столкнуться с проблемами снижения производительности.
Я считаю, что мы можем использовать любую производную Linux. Кроме gentoo. Я хочу, чтобы эти машины были установлены до конца века;)