我的问题非常基本,我了解什么是负载平衡以及它如何工作,但是在实践中我无法想象它。
假设我在服务器上运行一个 AMP 应用程序。有一天流量太大,我必须开始平衡负载,所以我添加了另一台服务器。我已经将所有数据存储在第一个服务器上,那么我应该把什么放在那台服务器上呢?我可以复制网站的文件,但我的数据库仍然在第一台服务器上,我仍然必须从我的新服务器上连接到它,所以这似乎不是一个好的解决方案?我可以添加第三台服务器,使其成为 MySQL 服务器,并使用它来存储我的数据,并让我的 Apache 服务器连接到它,但这似乎也不是一个好的解决方案,因为我仍然需要从单个位置获取所有请求的数据。
在现实中是如何做到的?
答案1
第二种方案一般在使用负载均衡设备时使用。即有两台应用服务器,负载均衡设备根据不同的算法在两台应用服务器之间分配传入的流量。例如,循环、最少请求优先等。
两个应用服务器应连接到单个数据源。为此,您可以使用与 MariaDB(免费、开源且是 MySQL 的替代品)配合良好的集群数据库。
希望这能回答你的问题。
答案2
您的情况可能有许多解决方案。
首先 - 是的,您将整个 www 目录复制到安装了与第一个节点完全相同的 apache 和 php 版本的其他服务器。如果您的应用程序使用文件存储,那么最好将其放在共享上 - 例如 NFS 或 sshfs(在单独的服务器上)。如果您想将此文件存储放在两个应用服务器上,则需要实时同步它们(不是一个好的解决方案)。在这种情况下,在 SAN 上创建的 NFS 是最好的,因为您有 SAN 等的保护。
至于数据库 - 单个数据库服务器,与应用程序分开,托管合理的 RAM 和磁盘空间,可以处理大量连接和大量查询。如果每秒查询数达到数千,您将不得不开始担心。但是如果您达到这一点,那么解决方案是已经建议的数据库集群。要构建集群,您至少需要 3 个数据库服务器和一个负载平衡器(代理)。
因此,您的设置将包括:
- Web 服务器的负载均衡器
- 至少 2 个应用程序/Web 服务器
- 数据库服务器
- 文件服务器(如果需要)
或者,对于数据库集群:
- 数据库服务器的负载平衡器
- 集群中的 3 个数据库服务器