使用或不使用虚拟化的Linux Web服务器?

我维护一个大型web项目(java + postgres +一些工具)的服务器,目前托pipe在三台机器上:

  1. 机器:Mailserver(后缀),Ad-Server(lighttpd + php + openx)
  2. 机器:Tomcat + Servlet
  3. 机器:PostgreSQL-Server,静态内容(通过lighttpd)

所有机器运行Debian Stable并通过VPN(openvpn)连接。 由于硬件非常陈旧(每个AMD Athlon 3000+和2GB RAM),因此需要更换。

这些服务器现在应该被一台大机器(16GB Ram,大Intel CPU支持VT,5个IP)所取代。

现在的问题是:我仍然应该使用虚拟机来分离不同的任务,还是应该像往常一样把所有东西都放在机器上。 优点和缺点在哪里?

我想到了以下几点:

Pro虚拟化

  • 安全:由于虚拟机是分开的,你不能把整个机器(希望)

Con虚拟化:

  • 性能:有性能损失
  • 工作:每个维护工作必须为每个虚拟机做好几次
  • 沟通:不同vm(Servlet do Database)的通信变得更加复杂。
  • 硬盘内存限制:我必须为每台机器分配静态资源(如内存)。 这可能是一个骗局,如果说我的数据库服务器需要更多的RAM 30秒(比分配),并会有更多的RAM在其他机器上可用。 没有虚拟化,这不会是一个问题。

感谢任何提示。

性能损失 – 是的,从技术上讲有一个。 这是你或你的用户会注意到的吗? 除非是一些疯狂的高端工作负载,否则你可能会过度提供虚拟机*(或者试图用一个“正常”的RAM分配到一个旧的,现有的服务器上来挤压5个虚拟机,我真的怀疑它。使用情况 – 如果你把所有东西都分开了,那么对于默认运行级别为3的NTP服务器来说,你不需要(比如说)512megs。(拆分掉只是一个NTP服务器是过度的,这仅仅是一个例子)。

工作 – 这是真的。 如果只从一个到三个服务器,可能不是什么大事 – 做你的改变,把你的命令从一个terminal会话复制/粘贴到另一个。 尽pipe如此,你想要某种pipe理工具,我目前正在看Puppet 。

*内存限制 – 取决于virt。 你使用的解决scheme 有些环境(如ESX / vSphere)允许您为虚拟机分配更多的RAM,而不是物理上可用。 如果您为该function付费,ESX让您设置资源池,并根据需要自动调整资源,并设置优先级。 就像所有的事情一样,你必须知道它是如何工作的,以及在特定环境中的折衷。

正如很多人提到的,虚拟化很好,因为您可以轻松地创build/恢复快照。

我想谈谈一些事情。 有人提到需要维护多台机器。 通过networking启动虚拟机,并从一个中心点安装所有软件的分区,可以减less大量的维护工作。 这样,软件更新/安装就会自动迁移到其他机器上,从而消除大部分额外的维护时间。

还有第三个选项:FreeBSD jails。 – 这些可以让你创build独立的环境,而不需要虚拟化的开销。 – 分离远远高于普通的GNU / Linux chroot(即使是networking层的所有东西,在内核层面都是分开的) – 每个jail都可以拥有自己的IP,而这些实际上并不是虚拟化的,而只是内核中的孤立环境+文件系统。 http://en.wikipedia.org/wiki/FreeBSD_jail

作为职业球员,我不会放弃安全上的收获。 确实有可能在某些条件下突破虚拟机(虚拟机软件中的错误 – 虽然这些错误得到了修补;跟其他更新一样) – 安全是关于层,而不是一层是故障保护。 虽然简单性往往有利于安全性,但也有一些东西可以带来太多好处,正如我所提到的,通过从中央位置安装基本系统(甚至可以是只读安装),可以简化事物 –

这是一个真实世界的例子:

说一个php应用程序有一个mysql注入漏洞,攻击者可以利用这个漏洞将文件写入你的服务器。 (例如:通过INTO OUTFILE sql语法) – 一个常用的方法是编写一个包含更多漏洞代码的php文件,进一步破坏服务器; 毕竟一个PHP脚本几乎等同于执行它的用户(执行apache进程的用户)运行的shell帐户 – 从那里攻击者只是一个本地漏洞,远离完全的根访问。 如果mysql处于一个孤立的环境,比如一个虚拟机,一个bsd jail或一个chroot环境,攻击者就可以将他的php代码写入一个文件,但是他永远无法通过访问url,因为mysql服务将不能访问由apache托pipe的任何文件。

我宁愿虚拟化,因为,

a。)您可以非常简单地进行服务器备份

b。)您可以创build运行服务器的第二个实例,以testing某些内容,而无需触摸生产服务器

c。)您可以完美地处理资源,使其他服务器的优先级更高。

干杯

拨弦

虚拟化就是这样。

这样,您可以轻松地备份/恢复,甚至可以将vm从一台服务器移至另一台服务器,同时将停机时间降到最低。

具有良好的硬件,软件和良好的设置,性能损失是最小的。 只需使用ssh进行所有通信,并使用分离的本地IP地址,这些地址无法从Internet访问。 简单而安全。

从长远来看,你会发现维护实际上更容易。 openvz甚至可以让你轻松地拍摄任何正在运行的虚拟机。

它规模! 添加更多vm比添加更多硬件要容易得多。

另外,任何一个虚拟机崩溃/下不会影响其他虚拟机。

这个安全部分是非常相对的,因为你将不得不保证三个环境而不是一个环境,单独分离并不能提供很高的安全性。

你是正确的,有性能损失,更不用说虚拟化软件中的任何错误都可能使整个机器崩溃。