在单个主机上运行许多虚拟机

时间:2020-03-06 14:56:16  来源:igfitidea点击:

我需要在相对较少的物理主机上运行相对大量的虚拟机。每个虚拟机并没有做什么,每个虚拟机基本上只需要运行一个基本的网络服务,例如SMTP等。此外,每个组件上的负载将非常轻。

不幸的是,数字有点像5台物理主机上的100个虚拟机。每个主机都是足够不错的core 2,带有2 gigs的ram和1TB的磁盘。但是,我知道仅获取ubuntu的vmware映像并在该计算机上抛出将不会使我接近100个实例,并且接近20个实例。

那么,对于图像与主机的比率是否有希望?另外,哪种虚拟机实现最适合此目的,即资源的整体使用效率高?我们在这里主要使用vmware,但是如果切换到Xen或者类似产品可以获得显着的性能优势,我相信我们会考虑的。

预先感谢见解:)

注意:我们最终使用了OpenVZ,并且效果很好。 ubuntu模板的默认参数使我们每台计算机可以运行约40个实例。

解决方案

如果我们可以使访客瘦身,我们可能可以做到,没有X,启动了最少的服务,等等。看看slackware或者ubuntu服务器。
Xen在网络托管公司中似乎很受欢迎,因此可能值得一看。

CPU使用率取决于应用程序,但我们可能想购买更多内存!

如果进行数学计算,则每台计算机平均可获得100 MB的内存。这个不多。 VM的开销非常大,必须在每个实例中运行完整的OS。

我们或者使用一些占用空间很小的操作系统(http://www.damnsmalllinux.org/?),或者花时间将其缩减得更多,否则我们将获得更大的计算机。

机器那么便宜,我倾向于升级到具有大量内存的64位操作系统。

VMWare有一个很酷的选项,我们可以在其中"池化"一组物理机,它将自动将虚拟机移动到使用最少的硬件,而不会中断VM的运行。

而是广告链接。

我们是否限于vmware?我们是否考虑过操作系统级虚拟化?假设每个VM可以运行相同的内核,那么我们将获得更多具有较少开销的VM。

几点想法...

1正如其他人指出的那样,内存算法不起作用,我们将需要更多的RAM。

2根据服务,我们可能能够找到预配置的虚拟机。例如,Astaro为其免费的防火墙软件提供了VM设置。我们也许还可以找到一个非常小的Linux发行版,我们可以对其进行调整。

3也许我丢失了一些东西,但听起来好像Ubuntu已经非常接近了……5台机器上的每台机器20个实例将获得我们所需的100个实例。未来的增长空间不大,但是...

保重,祝你好运。

几个问题...

  • 对于Vmware服务器,除非仅用于测试,否则我们确实需要服务器硬件。
  • 可以使用Xen Server,VMware ESX或者ESXi(免费)或者Hyper-V等裸机级虚拟化解决方案,该解决方案不是裸机级,但性能更接近。
  • 对于20-1,我们将需要更多RAM。数学相加。最低功能的机器需要512,除非它是完美剥离的Linux,其至少应具有256. 20x256 = 5GB + 5-10%的开销。在那些规格上不会真的发生。
  • 对于20-1,我们将需要更多处理器。每台计算机将有一个vCPU。在内核2上共享意味着每个处理器10-1. 不好。我们在双四核Dell 1950、16GB RAM上运行将近20个。效果很好。
  • 无论我们选择什么,都将超额预订内存。不确定是哪一个让我们。 vmware可以,但显示警告。
  • 我听说过,但没有证据表明XenServer可以提供性能上的好处,但是没有人声称其超过10%到20%。

祝你好运

有以下三个主要方面可以使这些工作变得合适:

  • 较低的开销。如果适用,OpenVZ,Vserver,chroot将是理想的选择。如果我们真的需要每个实例都是具有自己内核的真实VM,请尝试使用KVM / Xen而不是VMWare。可能还不那么成熟,但是我们将拥有更多的灵活性。
  • 较小的客人。试试Ubuntu JeOS,或者使用busybox自己动手
  • 在客人之间尽可能多地分享。尝试与所有操作系统共享一个R / O映像,并在/ var,/ home,/ etc等上为每个来宾安装一个小的R / W映像

最好运行VMware ESX / ESXi,因为它们都具有精美的内存池功能。它基本上占用相同的内存页面,并在多个guest虚拟机之间使用它们,因此,如果我们运行很多相同的guest虚拟机,则与其他VM相比,我们在主机上可以获得更多的内存。

在此博客条目中检查有关"透明页面共享"的位,并在此处也对其进行评论。

显然,我们仍在推动它,每个主机20个来宾,每个主机只有2Gb RAM,但是如果我们删除所有无关的服务和应用,并构建1个来宾映像并克隆它,然后在每个专用应用上安装专用应用,尤其是VMware链接显示一个运行40个来宾的4Gb主机!

我们真的需要100个全功能操作系统吗?

为什么不采用已经使用过的Web服务器方法呢?我的意思是虚拟Web服务器/主机。

例如,将Apache HTTPD安装在使用单个配置文件托管多个虚拟服务器的单个物理服务器上。另外,我们将需要配置DNS和/或者具有不同IP地址的许多虚拟网络接口(eth0:0,eth0:1,...,eth0:n)。

如果我们确实只需要向外界公开几个​​服务并且负载不高,则此方法应该起作用。

是否有理由将每个网络服务实例划分到各自的虚拟机中?如果我们不需要将用户彼此隔离,而是需要隔离进程和流量,那么最好直接使用这五台服务器并为每个实例启动单独的进程,这样可能会更好。每个实例将绑定到一个单独的虚拟接口。

例如,配置虚拟接口并为其分配IP地址。为要创建的实例创建一个httpd.conf文件和/或者sendmail.cf文件。在配置文件中,指定守护程序应绑定到虚拟接口(并且仅应绑定到该虚拟接口)。启动守护程序。

对每个实例重复上述步骤。我们将运行许多进程(数百个,如果不是数千个),它们的总使用量将比几十个VM少。另外,操作系统将能够将未使用的磁盘交换到磁盘上。

另一种可能性是使用可以在非常少量的内存中运行的轻量级Linux发行版。像DamnSmallLinux或者DDWRT的变体。它们最多可以在16MB的内存中运行,从而使我们可以在一台计算机上运行20个或者更多的内存。

我不知道这是否可行,但是如何在chroot环境中运行每个服务呢?我们可以通过硬链接必要的库文件来创建每个chroot文件系统,从而节省磁盘空间。

在自己的VM中运行每个服务的另一个问题是它们都将需要自己的IP地址。内部网络上的100个IP可能不是问题(例如172/8或者10/8设置),但是如果它们属于A类的一部分(假定我们有很多公共地址),那么我们将用光100个IP快速地。

而且,正如其他人所问的那样,为什么每个服务都需要成为自己的VM?他们中的许多人应该能够轻松地在同一主机上运行。

如果这是可以在应用程序级别完成的工作,那么我将无需进行任何虚拟化。我们可以在不同的端口号上甚至在具有IP别名的不同IP上运行应用程序的多个实例。这样,我们就可以轻松地在每个盒子上运行20多个副本。哎呀,我们也许可以用一半的硬件来完成所有事情。

虚拟化不是万能的解决方案。 :)

我的2c。

我有一台运行完整台式机的四核计算机和9个虚拟机。因为这是一台测试机,所以我会使用各种各样的客人。关于ram使用的最佳方法似乎是debian-kfreebsd和小型内核linux。小型内核linux使用10M的ram无所作为。添加几个服务,它可能是32M,所以我可以在1GB的内存中运行32个虚拟机!我们有2GB,所以可以说我们可以运行48台计算机,包括虚拟机监控程序和开销(我正在使用kvm。)因此,如果有5台计算机,我们最多可以运行240台计算机:D

我想我马上会尝试的:D

顺便提一句。我们说虚拟机的负载应该很轻,所以我不指望cpuload或者diskload。这些数字正好是0的冗余度。