比如,需要使用 XenServer 等开源技术将十几个应用程序托管在一台戴尔服务器上。有些应用程序占用大量资源,而有些则不然。
如果服务器有 32GB 的 RAM,虚拟机的架构应该是什么?为每个应用程序创建单独的虚拟机是否是一个好的架构决策?
如果有人能提供有关此类优化的详细信息,那就太好了。
技术栈几乎到处都是 PHP、MySQL。
答案1
如果你几乎在所有地方都使用相同的技术堆栈,那么为每个应用程序配备一个虚拟机似乎会带来太多开销。你不仅会运行额外的内核,还会运行 MySQL、Apache/nginx 和 PHP。我建议为 MySQL 服务器配备单独的虚拟机。如果你的应用程序数据库繁重,你可以将大部分 RAM 专用于它。
对于 apache/nginx 和 PHP,我会为不同版本/配置的 PHP 设置单独的虚拟机,例如,如果您有一些需要 PHP 5.3<= 甚至 PHP4 的旧版应用程序,您可以为它们设置单独的虚拟机。如果您的所有应用程序都可以在相同版本和配置的 PHP 上运行,那么我只需使用 apache/nginx vhosts 来虚拟化它们。如果您设置多个虚拟机(例如针对不同的 PHP 配置或版本),则维护服务器会更容易。
请记住,如果您设置了多个 apache/web VM,则每个不同的 VM 都需要一个单独的公共 IP,以便从外部访问它。为了解决这个问题(如果您想使用单独的 VM 路由),您必须在其中一个 VM 或单独的 VM 上设置 httpd 代理。这通常是nginx
,那么您只需要在这个 VM 上设置 1 个公共 IP,然后您将所有请求代理到内部网络上的其他 VM。