我在安装了 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 将这两台服务器用作一台?
并非完全“合二为一”(那么容易),而是并排。使用负载平衡器作为独立设备、代理软件或类似软件,您就大功告成了。
然而,您需要在服务器之间复制所有数据,因此除非您在服务器之间分配存储负载,否则它不会解决您的原始问题。您可以让服务器通过网络共享和访问其存储,或者使用其他方案 - 但这比使用单个、像样的服务器要复杂得多。