我不确定在提供上传文件时如何提供容错解决方案。
我有一个单负载均衡器,其中有两台服务器(webserver1、webserver2)作为节点,都运行 Apache2,并且有一个两个节点都可以访问但不能通过 WAN 访问的数据库。
网络服务器最终将被扩展,数据库也将被分片。
常规文件复制
此时,我正在运行从 webserver2 到 webserver1 的计划 rsync,webserver1 是主服务器,其文件正在分发到 webserver2。目前只有两台服务器,但这是为了扩展。
分享图片
我的 Web 应用程序中有三个目录,用于保存上传到 webserver1 和 webserver2 的用户生成的文件(这些是 rsync 操作的例外)。
目前,我有 3 个 NFS 共享可从 webserver1 获得,所述共享正在由 webserver2 安装。
我对分布式架构领域还很陌生,但据我所知,NFS 解决方案会导致单点故障 - 我已经改变了负载均衡器上的权重,以确保 webserver2 接收更多流量,因此 webserver1 上的负载不应该更高。
我没有更多预算花在任何云解决方案(例如 Amazon S3)上,所以我唯一的行动方案就是提供免费软件解决方案。
有没有可行的软件解决方案?我的首要任务是消除单点故障,同时将服务器负载降至最低。
答案1
在这种情况下,我喜欢使用专用的 NFS 服务器...对单点故障的担忧可以通过某些设计决策来抵消...
- 您要防范什么?组件故障?服务器故障?网络中断?
- 这个设置托管在哪里?数据中心设施?办公室?还是云端?
- 预算会不会有那么大的限制?
如果基础架构是虚拟化的,我将拥有一对虚拟负载平衡器(或单个硬件负载平衡器)、一层 Web 服务器、数据库(可能)和后端存储。该存储可以由虚拟 NFS 服务器、独立物理机箱、NAS 等提供。我很少使用集群文件系统。
看起来你的规模还不足以解决这个问题。我理解规划更大规模的动机,但真的您所做的事情有什么问题吗?不过,NFS 导出也不应该对服务器性能产生如此负面的影响……
答案2
在性能和弹性方面,在独立文件系统之间复制数据有很多好处。您当前的设置到底有什么问题?
我会远离共享文件系统(GFS2、OCFS 等),因为它们的性能不是很好。对于这种角色,复制文件系统(如 Lustre 或 AFS)在性能和功能之间提供了合理的折衷。
您是否希望将数据存储在文件系统中?NoSQL 数据库集群可能要简单得多。当然,还有高清文件系统。
答案3
主/主中的 DRBD 可以满足您的大部分需求,它没有高开销,并且任一服务器都可以写入或读取,并且可以在没有另一台服务器存在的情况下运行。
它的运行有点复杂,但它是一种能够满足您大部分(即使不是全部)要求的解决方案。
答案4
听起来你正在寻找类似的东西移动文件系统。它是基于 webdav 的分布式、复制文件共享。请注意,它不符合 POSIX 标准,并且您的应用程序需要“移动感知”。它是为了共享网站图像而构建的。