文件托管在多台服务器上?

文件托管在多台服务器上?

我在安装了 Apache 的 Debian 服务器上有一个用于文件托管的 PHP 网站(如 Dropbox),但我的磁盘空间不足。有没有办法在网络中添加另一台服务器,并以某种方式让 Apache 将这两台服务器用作一台?我听说可以使用负载均衡器来实现,但我对此并不熟悉。我在 Google 上搜索过,但它只提到了性能,所以我不确定我是否走在正确的轨道上?

答案1

除了向服务器添加额外的磁盘外,还有其他一些选项可供您使用。您可以使用 NFS 通过网络在两台服务器之间共享文件夹。然后,您可以让 PHP 脚本在两个文件夹(本地文件夹和远程 NFS 挂载)之间进行负载平衡,或者使用多层文件系统(如 mergefs)使一个文件夹平衡两个文件夹之间的文件。

另一种选择是将每个文件的位置存储在数据库或查找表中,包括它所在的服务器。然后,您可以将网站代理的子路径设置为其他服务器,或者为每个服务器设置一个子域。

我推荐的最佳方案是使用 NAS 来存储所有文件,然后使用 NFS 或 SMB 将其挂载到每台服务器上。更复杂的方案是设置分布式文件共享软件,如 MinIO、GlusterFS 或 Ceph。但是,这些可能比您需要的更高级。


例子

 ## NFS + mergefs

 server1.example.com
 
 /srv/
 |- local
 |  |- file1
 |  |- file2
 |
 |- remote --> nfs://server2.example.com/srv/local
 |  |- file3
 |  |- file4
 |
 |- combined ( /srv/local + /srv/remote )
 |  |- file1
 |  |- file2
 |  |- file3
 |  |- file4
 

 server2.example.com
 
 /srv/
 |- local
 |  |- file3
 |  |- file4
 |
 |- remote --> nfs://server1.example.com/srv/local
 |  |- file1
 |  |- file2
 |
 |- combined ( /srv/local + /srv/remote )
 |  |- file1
 |  |- file2
 |  |- file3
 |  |- file4


 ## One domain, subpath per server

 example.com
 |- usercontent/a
 |  |- file1
 |  |- file2
 |
 |- usercontent/b --> server2.example.com
 |  |- file3
 |  |- file4

 ## Subdomain per server

 example.com
 |- server1.example.com/files
 |  |- file1
 |  |- file2
 |
 |- server2.example.com/files
 |  |- file3
 |  |- file4

答案2

简短的回答:不要那样做。

一个网站可能由多台服务器组成。但是,这只是为了平衡高使用率网站的 CPU、RAM 或带宽负载。一般来说,这些服务器的内容是重复的。(并非总是如此,但就你的情况而言,是的。)

就您而言,您说您的空间不足,因此您需要更多空间,而不是多台服务器。

最容易管理的选项(即所需的技术知识最少)是向系统添加第二个硬盘。磁盘可以添加到内部托架中,甚至可以通过 USB 连接。然后,将 Apache 目录的内容移动到该磁盘,更新主目录设置,一切就大功告成了。

还有很多其他选择。例如,迁移到 Digital Ocean、GoDaddy 或 Amazon 等托管服务提供商。但目前,只需添加第二个磁盘即可。

答案3

我的磁盘空间不足了。

根据服务器型号,扩展其存储或更换服务器可能会更容易且更便宜。

有没有办法在网络中添加另一台服务器并以某种方式让 Apache 将这两台服务器用作一台?

并非完全“合二为一”(那么容易),而是并排。使用负载平衡器作为独立设备、代理软件或类似软件,您就大功告成了。

然而,您需要在服务器之间复制所有数据,因此除非您在服务器之间分配存储负载,否则它不会解决您的原始问题。您可以让服务器通过网络共享和访问其存储,或者使用其他方案 - 但这比使用单个、像样的服务器要复杂得多。

相关内容