我为一个大型网络项目(java + postgres + 一些工具)维护服务器,该项目目前托管在三台机器上:
- 机器:邮件服务器(postfix)、广告服务器(lighttpd + php + openx)
- 机器:Tomcat + Servlet
- 机器:PostgreSQL-Server,静态内容(通过 lighttpd)
所有机器都运行 Debian Stable 并通过 VPN (openvpn) 连接。由于硬件非常老旧(AMD Athlon 3000+ 和 2GB RAM),是时候做出改变了。
这些服务器现在应该被一台大机器(16GB Ram,支持 VT 的大 Intel CPU,5 个 IP)所取代。
现在的问题是:我应该仍然使用虚拟机来分离不同的任务,还是应该像往常一样简单地将所有东西放在机器上。优缺点在哪里?
我想到了以下几点:
专业虚拟化:
- 安全性:由于 vm 是分开的,因此您不能占用整台机器(希望如此)
骗子虚拟化:
- 性能:有性能损失
- 工作:每个虚拟机的每个维护工作都必须完成多次
- 通信:不同 vm(Servlet do Database)的通信变得更加复杂。
- 硬内存限制:我必须为每台机器分配静态资源(如内存)。如果说我的 db-server 在 30 秒内需要更多内存(比分配的内存多)并且其他机器上会有更多可用内存,这可能是一个骗局。如果没有虚拟化,这将不是问题。
感谢您的任何提示。
正如许多人提到的那样,虚拟化很好,因为您可以轻松地制作/恢复快照。
我想谈谈一些事情。有人提到需要维护多台机器而不是一台。通过网络引导虚拟机并从中心点挂载所有软件的分区,可以减少大量维护工作。这样,软件更新/安装会自动迁移到其他机器,从而消除大部分额外的维护时间。
还有第三种选择:FreeBSD 监狱。- 这些使您可以创建单独的环境,而无需虚拟化开销。- 分离比普通的 GNU/Linux chroot 高得多(一切,甚至网络层,都在内核级别分离) - 每个监狱都可以拥有自己的 IP,这些实际上不是虚拟化的,而只是内核中的隔离环境+文件系统。 http://en.wikipedia.org/wiki/FreeBSD_jail
作为专业人士,我不会忽视安全收益。确实,在某些条件下可以突破虚拟机(虚拟机软件中的错误 - 尽管这些错误已被修补;跟上更新,就像其他任何事情一样) - 安全性与层有关,没有一层是故障安全的。虽然简单性往往有利于安全性,但有些东西会给您带来太多好处,正如我所提到的,可以通过从中心位置安装基本系统来简化事情(甚至可以是只读安装) -
这是一个真实的例子:
假设一个 php 应用程序中存在 mysql 注入漏洞,攻击者可以利用此漏洞将文件写入您的服务器。(例如:通过 INTO OUTFILE sql 语法) - 一种常见的方法是编写一个包含更多漏洞利用代码的 php 文件,进一步破坏服务器;毕竟一个 php 脚本几乎等同于一个 shell 帐户作为执行它的用户(执行 apache 进程的用户)运行 - 从那里攻击者只是一个远离完全 root 访问权限的本地漏洞。如果 mysql 处于隔离环境中,例如虚拟机、bsd jail 或 chroot 环境,攻击者将能够将他的 php 代码写入文件,但他永远无法通过访问url,因为 mysql 服务无法访问 apache 托管的任何文件。
我更喜欢虚拟化,因为,
a.) 您可以以非常简单的方式进行服务器备份
b.) 您可以创建正在运行的服务器的第二个实例来测试某些东西,而无需接触生产服务器
c.) 您可以完美地处理资源,使一台服务器比其他服务器具有更高的优先级。
干杯
拨弦
虚拟化是一种方式。
这样,您可以轻松地备份/恢复甚至将您的虚拟机从一台服务器移动到另一台服务器,而停机时间最短。
良好的硬件、软件和良好的设置,性能损失是最小的。只需使用 ssh 进行所有通信,并使用无法从 Internet 访问的单独本地 IP。简单安全。
从长远来看,您会发现维护实际上更容易。openvz 甚至可以让您轻松拍摄任何正在运行的虚拟机的快照。
它可以扩展!添加更多虚拟机比添加更多硬件要容易得多。
此外,任何一个虚拟机崩溃/停机都不会影响其他虚拟机。
性能损失 - 是的,从技术上讲有一个。您或您的用户会注意到这一点吗?除非它是一些疯狂的高端工作负载,或者你可怕地过度配置 VM*(或者试图将 5 个具有“正常”RAM 分配的 VM 挤到旧的现有服务器上,否则我严重怀疑它。记得实际检查你的 RAM用法 - 如果您要拆分所有内容,则默认为运行级别 3 的 NTP 服务器不需要 512megs。(仅拆分 NTP 服务器是多余的,这只是一个示例。)
工作 - 这是真的。如果它仅来自一到三台服务器,可能没什么大不了的 - 进行更改,将命令从一个终端会话复制/粘贴到另一个。尽管如此,您需要某种管理工具,我目前正在研究Puppet。
*内存限制 - 取决于 virt。您使用的解决方案。某些环境(如 ESX/vSphere)允许您为 VM 分配比物理可用内存更多的 RAM。如果您为该功能付费,ESX 可以让您设置资源池,并根据需要自动调整资源,并能够设置优先级。像所有事情一样,您必须知道它是如何工作的以及在特定环境中的权衡。
该安全部分是相对而言的,因为您必须保护三个环境而不仅仅是一个环境,单独的分离并不能提供太多的安全性。
您是正确的,存在性能损失,更不用说虚拟化软件中的任何错误都可能使整台机器崩溃。