文件夹/存储镜像

文件夹/存储镜像

我现在在单个 VPS 上运行一个 Web 应用程序,我想使用两个 VPS(来自不同的提供商)通过负载均衡器协同工作来扩展它并使其具有 HA。

我已经成功设置了 MySQL 主主复制,并且能够将 HaProxy 设置为负载均衡器,但现在我需要设置一个文件/文件夹同步机制来保留两者,这样当在一个服务器上更改或添加文件时,它会在第二台服务器上添加或更新。

我搜索了可以实现这个功能的软件,似乎最著名的是 GlusterFS 和 DRBD。(Ceph 看起来非常复杂)

我尝试设置这两个并使用它们,但却无法让它们工作。

是否有人知道如何在其中一个上设置双主复制的良好指南?

PS:我在 VPS 上使用 Ubuntu

答案1

在这两者中,GlusterFS 是最佳选择。DRDB 更常用于主动/被动故障转移。

使用 Gluster 时需要考虑的重要事项是,所有客户端节点必须直接连接到所有服务器节点,并且所有服务器节点都必须直接连接到所有服务器节点。虽然 Gluster 可以在服务器节点之间进行复制,但其数据传播主要在客户端进行控制和管理。客户端负责将数据分发到服务器节点,因为它们同时连接到所有相关节点。在这种情况下,客户端 > 服务器网络是最重要的考虑因素。

由于在这种情况下您将使用服务器作为客户端(小型集群中可接受的做法),因此您只需要确保这些节点之间具有良好的存储网络。

我强烈建议使用三个 Gluster 节点,原因如下。首先,仅使用两个节点无法自动解决裂脑情况。当一个存储节点有无效数据或处于离线状态时,您需要第三个节点来提供多数规则。其次,您的数据完整性本身会更好,因为您可以使用 3n 复制或 2n-a(带仲裁的两个节点)复制。

就您的目的而言,2n-a 复制可能是一个目标。其行为类似于三节点复制,但性能与双节点复制差不多(也就是说,在大多数情况下更好)。最简单的形式是,它涉及两个普通数据节点和一个仲裁节点,该节点仅包含用于测量其他两个节点完整性的元数据。因此,仲裁节点只需要 4k 的空间来跟踪每个文件,并且所需的带宽比两个完整存储节点少得多。这是值得考虑的。

最后,GlusterFS 是文件系统之上的一层,用于存储数据,因此在安装 GlusterFS 后不要直接与这些文件系统交互。它将这些文件系统称为“砖块”,但它们不必是单独的文件系统。它们可以是单个文件系统中的目录(不完全推荐)或类似 BTRFS 子卷的东西(更推荐)。一般来说,任何符合 POSIX 标准的文件系统都可以作为后备砖块。

可以在节点上创建相同的砖块,然后将其凝结成卷。卷是多服务器导出,其行为与 NFS 非常相似。此时,您需要做的就是挂载该导出。

关于仲裁卷的简短文档:https://gluster.readthedocs.io/en/latest/Administrator%20Guide/arbiter-volumes-and-quorum/

有关如何在简单的 2n 集群中设置 GlusterFS 的详细指南请参见此处:https://www.digitalocean.com/community/tutorials/how-to-create-a-redundant-storage-pool-using-glusterfs-on-ubuntu-servers

相关内容