AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 76084
Accepted
theomega
theomega
Asked: 2009-10-20 12:01:21 +0800 CST2009-10-20 12:01:21 +0800 CST 2009-10-20 12:01:21 +0800 CST

为 Linux Webserver 使用或不使用虚拟化?

  • 772

我为一个大型网络项目(java + postgres + 一些工具)维护服务器,该项目目前托管在三台机器上:

  1. 机器:邮件服务器(postfix)、广告服务器(lighttpd + php + openx)
  2. 机器:Tomcat + Servlet
  3. 机器: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 秒内需要更多内存(比分配的内存多)并且其他机器上会有更多可用内存,这可能是一个骗局。如果没有虚拟化,这将不是问题。

感谢您的任何提示。

linux
  • 5 5 个回答
  • 1298 Views

5 个回答

  • Voted
  1. jns
    2009-10-20T17:27:17+08:002009-10-20T17:27:17+08:00

    正如许多人提到的那样,虚拟化很好,因为您可以轻松地制作/恢复快照。

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

    还有第三种选择: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 托管的任何文件。

    • 4
  2. plucked
    2009-10-20T15:56:04+08:002009-10-20T15:56:04+08:00

    我更喜欢虚拟化,因为,

    a.) 您可以以非常简单的方式进行服务器备份

    b.) 您可以创建正在运行的服务器的第二个实例来测试某些东西,而无需接触生产服务器

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

    干杯

    拨弦

    • 3
  3. DennyHalim.com
    2009-10-20T16:37:05+08:002009-10-20T16:37:05+08:00

    虚拟化是一种方式。

    这样,您可以轻松地备份/恢复甚至将您的虚拟机从一台服务器移动到另一台服务器,而停机时间最短。

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

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

    它可以扩展!添加更多虚拟机比添加更多硬件要容易得多。

    此外,任何一个虚拟机崩溃/停机都不会影响其他虚拟机。

    • 3
  4. Best Answer
    Orangutech
    2010-08-28T12:04:23+08:002010-08-28T12:04:23+08:00

    性能损失 - 是的,从技术上讲有一个。您或您的用户会注意到这一点吗?除非它是一些疯狂的高端工作负载,或者你可怕地过度配置 VM*(或者试图将 5 个具有“正常”RAM 分配的 VM 挤到旧的现有服务器上,否则我严重怀疑它。记得实际检查你的 RAM用法 - 如果您要拆分所有内容,则默认为运行级别 3 的 NTP 服务器不需要 512megs。(仅拆分 NTP 服务器是多余的,这只是一个示例。)

    工作 - 这是真的。如果它仅来自一到三台服务器,可能没什么大不了的 - 进行更改,将命令从一个终端会话复制/粘贴到另一个。尽管如此,您需要某种管理工具,我目前正在研究Puppet。

    *内存限制 - 取决于 virt。您使用的解决方案。某些环境(如 ESX/vSphere)允许您为 VM 分配比物理可用内存更多的 RAM。如果您为该功能付费,ESX 可以让您设置资源池,并根据需要自动调整资源,并能够设置优先级。像所有事情一样,您必须知道它是如何工作的以及在特定环境中的权衡。

    • 1
  5. gekkz
    2009-10-20T12:25:42+08:002009-10-20T12:25:42+08:00

    该安全部分是相对而言的,因为您必须保护三个环境而不仅仅是一个环境,单独的分离并不能提供太多的安全性。

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

    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve