单个服务器或集群

单个服务器或集群

在我目前的工作中,我遇到过这种情况:每次我们安装一些新软件(90% 的应用程序是用 PHP 编写的),它都会安装在自己的服务器上,由 Debian 操作系统、Apache 服务器和 PostgreSQL 数据库组成。由于采用这种策略,我们目前拥有大约 10 台服务器(注意:当我说服务器时,我说的是“没有屏幕的普通 PC”,而不是“我们在这台服务器上花的钱足以养活一个小国”),其中大多数都具有相同的软件要求。

这种情况让我想到:我们是不是应该创建一个集群,而不是为每个应用程序添加单独的服务器?我可以证明,虽然有些服务器需要更好的硬件(主要是 RAM),但其他一些服务器已经闲置了至少三周,因此使用集群我们可以更好地利用这些资源。同时,我不确定结果是否值得花费时间和精力来组建和维护上述集群(我一直想使用“上述”这个词)。

介绍完这些之后,主要问题是:在这种情况下,您是否建议创建集群?还是会保留现有服务器?

答案1

集群会增加冗余度并提高可扩展性。但是,它会带来复杂性。您需要某种形式的负载平衡(循环 DNS 并不适合)。您还需要处理服务器之间的会话共享。您的应用程序可能会将其写入数据库,这样做虽然会有点慢,但还是可以正常工作,但许多应用程序并非设计用于集群环境。您可以使用粘性会话负载平衡,或者自己修改应用程序以处理集群范围的会话。

答案2

您可以看看虚拟化 - 用一台或两台高级服务器替换您的众多机器,并使用 VMWare、虚拟服务器等为每个虚拟机分配适当的资源。

答案3

每个人的观点都有自己的优点。我认为,如果您的所有(或大多数)应用程序都是 LAMP 堆栈式的,那么我会建议集群数据库部分(MySQL/PostGreSQL/等)以您希望的方式进行主动-主动/故障转移。

在应用程序性能方面,你确实需要更多的指标来证明任何类型的集群。为了增加复杂性而不考虑实际的测量更不用说可能的可管理性噩梦,请确保你有一些证据。

从逻辑角度来看,如果您只是启动新网站/应用程序,并且数据库始终是每个应用程序的一部分,我认为将数据库集群在一起从管理角度来看是有益的,最终可以让您虚拟化 Web 服务器(降低未来成本)。保持两层独立将在以下方面对您有所帮助:

  • 数据是 IT 中最重要的东西。丢失信息;失去客户,从而导致金钱损失。如果操作正确(并经过严格测试),集群可以提高性能/可用性/冗余度/可管理性。

  • 虚拟化 Web 服务器可提高可用性和可管理性。如果虚拟服务器出现故障,Web 服务器可以迁移到另一台可用的虚拟主机,数据库集群可以继续运行。此外,安装每个新 Web 应用程序所需的购买成本也更低。为虚拟主机添加更多 RAM 比购买全新服务器要便宜得多,不是吗?

因此直接回答你的问题..

这种情况让我思考:我们是否应该创建一个集群,而不是为每个应用程序添加单独的服务器?

是的,在一定程度上。除非您托管一个大型 Web 应用程序,并且性能是一个主要问题(例如 facebook?),否则集群 Web 服务器并可能包括一些缓存服务器(memcached)以提高性能肯定会有所帮助。但就您而言,听起来您有很多小型或更简单的网站/Web 应用程序,每个应用程序都有数据库。如果负载/性能不是问题,虚拟化将有助于提高正常运行时间/可用性。

从正常运行时间/冗余/管理的角度来看,我肯定会将数据库服务器集群到一组可靠的服务器中。确保数据安全,降低停机/灾难发生的可能性。这比网站重要得多,因为网站只是一堆由 apache、nginx(选择您的网络服务器)提供服务的文件。备份网站通常不会占用太多存储空间,而恢复网站应该相当简单直接。或者您可以发挥创造力,当您的所有网站都在虚拟机中运行时,备份虚拟机以记录网络服务器上的任何更改,然后备份它们,如果正在运行/生产映像损坏或难以修复,只需从存档中复制好的副本即可。数据库集群应该仍在运行,一旦新的虚拟机启动并运行,它应该指向数据库集群。只是一个想法。我敢打赌其他人有更好的想法/技术,但无论如何。这只是一个想法。

我可以证明,虽然一些服务器需要更好的硬件(主要是 RAM),但其他一些服务器已经闲置了不少于三周,因此使用集群我们可以更好地利用这些资源。

如果你仓促得出结论需要更好的硬件,你最好先弄清楚这一点,然后再围绕坏部件构建集群。如果你遇到大量类似的问题,而且这些问题持续出现,集群实际上无法解决任何问题。是的,集群会根据设计时的问题进行调整,但首先要找到根本问题。为什么要在糟糕的基础上构建集群?但如果你的观点不是足够的硬件,那是另一个问题,可能不是你能控制的。我会考虑和做预算的人闲聊沉重

同时,我不确定结果是否值得花费时间和精力来组建和维护上述集群(我一直想使用“前述”这个词)。

除了你丰富的词汇量,很高兴看到你至少意识到了如果你选择集群路线,你面临的任务有多重。我要大胆猜测一下,我认为你正在寻找“继续”使用集群的理由,虽然这里的许多人可能同意你的观点,但只有你知道你的技术优势和劣势。10 个网络服务器还不错,但不久之后,当你需要托管越来越多的网络服务器时,在管理服务器、备份服务器、处理正常运行时间/可用性和冗余之间,你将不得不做点什么。如果你现在不做点什么,那可能没问题,但我会开始调查你未来的所有选择。谁知道呢?六个月后,你将添加 10 个应用程序,你的观点将发生巨大变化。

根据我的经验,在进行任何此类冒险之前,请进行研究,调查您当前的资产,制定策略/计划并填补该计划中的所有空白。事实上,如果您开始研究集群等,这里有一份很棒的文档:http://www.scribd.com/doc/4069180/Caching-Performance-Lessons-from-Facebook假设计划中总会出错,你审查和修改计划的时间越多,你就越能发现可能出现的陷阱。

答案4

如果您在所有服务器上的工作基本相同,那么您可以通过 apache 虚拟主机和多个数据库在单个服务器上提供相同的服务。

另一个解决方案可能是使用 OpenVZ 设置服务器并为每个应用程序设置一个 VPS

相关内容