我需要在相对较少的物理主机上运行相对大量的虚拟机。每个虚拟机都没有做太多 - 每个虚拟机只需要运行一个基本的网络服务 - 想想SMTP等。此外,每个上的负载将非常轻。
不幸的是,这些数字类似于5个物理主机上的100个虚拟机。每个主机足够体面 - 核心2与2演出的RAM和1Tb磁盘。但是,我知道只是拿一个ubuntu的vmware图像然后扔掉那台机器就不会让我接近100个实例,并且会接近20个。
那么,这个图像与主机的比例是否有任何希望?此外,哪种虚拟机实现最适合此目的 - 即有效地整体使用资源?我们主要在这里使用vmware,但如果通过切换到Xen等可以获得显着的性能优势,我相信我们会考虑它。
提前感谢您的见解:)
注意:我们最终使用的是OpenVZ并且运行良好。 ubuntu模板的默认参数让我们每台机器运行大约40个实例。
答案 0 :(得分:6)
有三个主要方面可以使这些适合:
降低开销。如果适用的话,OpenVZ,Vserver,chroot将是理想的选择。如果你真的需要每个实例都是一个拥有自己内核的真实虚拟机,那么试试KVM / Xen而不是VMWare。可能不那么成熟,但你会有更多的灵活性。
小客人。尝试Ubuntu JeOS,或使用busybox滚动自己的
尽可能在客人之间分享。尝试与所有操作系统共享一个R / O映像,并为/ var,/ home,/ etc等上的每个guest虚拟机安装一个小的R / W映像
答案 1 :(得分:5)
有几个问题...
答案 2 :(得分:3)
您真的需要100个全功能操作系统吗?
为什么不采用Web服务器已经使用的方法?我指的是虚拟Web服务器/主机。
例如,使用单个配置文件,在托管许多虚拟服务器的单个物理服务器上安装Apache HTTPD。另外,您需要使用不同的IP地址配置DNS和/或许多虚拟网络接口(eth0:0,eth0:1,...,eth0:n)。
如果您确实只需要向世界公开的几项服务并且负载不高,那么这应该有用。
答案 3 :(得分:3)
另一种可能性是使用可以在非常少量的内存中运行的轻量级Linux发行版。像DamnSmallLinux或DDWRT的变体。它们可以在16MB的内存中运行,允许您在一台机器上运行20个或更多。
答案 4 :(得分:2)
我有一台四核机器运行完整的桌面和9台虚拟机。因为这是一台试验机,我使用各种各样的客人。 ram用法最好的似乎是debian-kfreebsd和小核心linux。 tiny core linux使用10M的ram什么都不做。添加一些服务,它可能是32M,所以我可以在1GB的RAM内运行32伏!你有2GB所以我们可以说你可以运行48台机器,包括一个虚拟机管理程序和开销(我使用的是kvm。)所以有5台机器,我们最多可以有240台机器:D
我想我马上会尝试一下:D
顺便说一句。你说vm的负载很轻,所以我没有指望cpuload或diskload。这些数字恰好有0个冗余。
答案 5 :(得分:2)
您最好运行VMware ESX / ESXi,因为它们都具有奇特的内存池功能。它基本上需要相同的内存页并在多个guest虚拟机中使用它们,所以如果你运行了很多相同的guest虚拟机,你将能够在主机上获得比其他虚拟机更多的内容。
查看this blog entry中有关“透明页面共享”的内容,以及有关here的评论。
显然,你仍然推动它每个主机有20个访客,每个主机只有2Gb RAM,但如果你删除所有无关的服务和应用程序,并构建1个访客映像并在安装之前克隆它每个专用应用程序,您可能只是侥幸逃脱它,特别是当VMware链接显示一个运行40位客户的4Gb主机时!
答案 6 :(得分:1)
如果你可以足够瘦下来,你可能会做到这一点,没有X,最小的服务开始等等。看看slackware或ubuntu服务器。 Xen似乎在网络托管公司中很受欢迎,因此可能值得关注。
CPU使用率取决于应用程序,但您可能想购买更多内存!
答案 7 :(得分:1)
是否有理由将每个网络服务实例划分到自己的虚拟机中?如果您不需要将用户彼此隔离,但确实需要隔离进程和流量,那么您可能最好只使用五个服务器并为每个实例启动单独的进程。每个实例都绑定到一个单独的虚拟接口。
例如,配置虚拟接口并为其分配IP地址。为要创建的实例创建httpd.conf文件和/或sendmail.cf文件。在配置文件中,指定守护程序应绑定到虚拟接口(并且只能绑定到该接口)。启动守护进程。
对每个实例重复一遍。你将有很多进程在运行(数百个,如果不是数千个),它们的总和将使用比几十个虚拟机更少的内存。此外,您的操作系统将能够将未使用的操作系统交换到磁盘上。
答案 8 :(得分:0)
根据this blog,由于拥有如此多的VM,您可能会遇到性能干扰问题。
答案 9 :(得分:0)
如果它可以在应用程序级别完成 - 我没有任何虚拟化。您可以在不同的端口号上运行应用程序的多个实例,甚至可以轻松地使用IP别名来处理不同的IP。这样,您可以轻松地在每个盒子上运行超过20份。哎呀,你可以用一半的硬件做任何事情。
虚拟化不是解决所有问题的方法。 :)
我的2c。
答案 10 :(得分:0)
在自己的VM中运行每个服务的另一个问题是它们都需要自己的IP地址。 100个IP可能不是内部网络上的问题(如172/8或10/8设置),但如果它们属于您的A类(假设您有那么多公众),那么您将耗尽快。
并且,正如其他人所问,为什么每项服务都需要成为自己的VM?其中许多应该能够轻松地在同一主机上运行。
答案 11 :(得分:0)
我不知道这是否可行,但是如何在chroot环境中运行每个服务?您可以通过硬链接必要的库文件来创建每个chroot文件系统来节省磁盘空间。
答案 12 :(得分:0)
几点想法......
1-正如其他人所指出的,内存算法不起作用,你需要更多的RAM。
2-根据服务的不同,您可以找到预配置的虚拟机。例如,Astaro为其免费的防火墙软件设置了VM。您也可以找到一个可以适应的非常小的Linux发行版。
3-也许我错过了一些东西,但听起来Ubuntu已经非常接近...... 5台机器上的每台机器20个实例获得了你需要的100个实例。然而,未来增长的空间不大......
小心,祝你好运。
答案 13 :(得分:0)
您是否仅限于vmware?您是否考虑过Operating system-level virtualization?假设每个VM可以运行相同的内核,您将获得更多具有更少开销的虚拟机。
答案 14 :(得分:0)
VMWare有一个很酷的选项,您可以“集中”一组物理机,它会自动将虚拟机移动到最少使用的硬件,而不会中断VM的运行。
答案 15 :(得分:0)
如果你进行数学计算,每台机器平均可以得到100 MB的RAM。这并不多。 VM的开销非常大,必须在每个实例中运行完整的操作系统。
要么使用一些非常小的操作系统(http://www.damnsmalllinux.org/?)并花时间将其剥离更多,或者你会得到更大的机器。
机器价格便宜,我倾向于升级到具有大量内存的64位操作系统。
答案 16 :(得分:-2)
Cloud Foundry。与其他可能提交了答案的人相比,我对虚拟机一无所知,但据我了解,如果您拥有主机,该主机上的虚拟机,然后是该虚拟机上的Cloud Foundry,您可以轻松创建基本辅助虚拟机并轻松实现复制并配置该辅助虚拟机集中的所有服务,同时保持较低的硬件使用率。我不知道它是否可以肯定,但据我所知,这将是最简单的方法之一,它是一种双壳方法,可以降低损坏主机的可能风险。