具有大量导出卷的 GlusterFS

具有大量导出卷的 GlusterFS

我计划将我的小型共享托管环境迁移到 Amazon EC2。它需要一个用于存储 Web 内容的中央存储(暂时将数据库等放在一边),以便我可以同时执行以下两项操作:在多个 http 节点之间平衡网站的负载和/或将网站从一个节点移动到另一个节点,而无需实际移动任何数据。

目前,我的存储位于 NFS 服务器上,该服务器通过 pacemaker/heartbeat/drbd 实现高可用性。据我所知,您无法在 EC2 中使用虚拟 IP,因此大多数 HA 解决方案都失败了。剩下的是 GlusterFS(和 Ceph,但他们自己声明不在生产中使用它)。所以我将设置两个 GlusterFS 节点,每个节点位于单独的可用区域中,每个节点都安装多个 EBS 卷(mdadm raid 10 以提高性能和安全性)并相互复制。每个客户端都会知道两个导出器节点,如果其中一个发生故障,存储本身仍将正常运行。

到目前为止一切顺利(或者不好?)。现在问题来了:根据我对 GlusterFS 的理解,访问控制是基于卷的 hosts.allow/.deny 列表。为了减少损坏的 HTTP 节点的影响,我想将每个节点对存储的访问限制在他实际服务的网站的 webroot 上。

让我通过我当前的 NFSv4 + mount-bind 设置示例来澄清这一点:

在 httpnode1 上

这些是他服务的网站

* domain1.tld
* domain5.tld
* domain10.tld

/etc/fstab 中的 nfs 导出

10.0.0.1:/ /srv/web nfs4 rw,..

在 NFS 导出器上

结构

* /srv/storage   << here are all websites
* /srv/export/httpnode1/   << webroots for httpnode1
* /srv/export/httpnode1/domain1.tld/   << mount-bind of /srv/storage/domain1.tld/
* /srv/export/httpnode1/domain5.tld/   << mount-bind of /srv/storage/domain5.tld/
* /srv/export/httpnode1/domain10.tld/   << mount-bind of /srv/storage/domain10.tld/
* /srv/export/httpnode2/   << webroots for httpnode2
* /srv/export/httpnode2/domain31.tld/   << mount-bind of /srv/storage/domain3.tld/
* /srv/export/httpnode2/domain5.tld/   << mount-bind of /srv/storage/domain5.tld/

/etc/exports

# httpnode1
/srv/export/httpnode1   10.0.0.123(rw,..,fsid=0,crossmnt)
/srv/export/httpnode1/domain1.tld   10.0.0.123(rw,..)
/srv/export/httpnode1/domain5.tld   10.0.0.123(rw,..)
/srv/export/httpnode1/domain10.tld  10.0.0.123(rw,..)

# httpnode2
/srv/export/httpnode2   10.0.0.192(rw,..,fsid=0,crossmnt)
/srv/export/httpnode2/domain3.tld   10.0.0.192(rw,..)
/srv/export/httpnode1/domain5.tld   10.0.0.123(rw,..)

到目前为止,我能想到的只有一个解决方案,即 EC2 + EBS + GlusterFS 从 GlusterFS 导出多个卷:每个 HTTP 节点一个。

有没有人有这方面的经验(例如几百个导出卷中的资源需求)以及如何查看您的配置?或者更好的是:有没有什么优雅的方法来实现我的目标?

谢谢您的见解!

问候 Joerg

答案1

我在 EC2 上使用 gluster 的经历并不出色。我看到了巨大的性能问题,最终完全放弃了 gluster。简而言之……如果节点之间有 1-2 毫秒的延迟……gluster 将遭受成倍的损失。这是一个相当小的设置,其中只有 2 个节点。我真不想看看你是否有更多的节点或份额。

我的解决方案是切换到 unison 并在实例之间进行复制...但我可以诚实地理解,这对于许多情况来说可能并不理想。

作为替代解决方案,您是否考虑过使用 s3 bucket 和 s3fs?它们可以在节点之间轻松共享。

相关内容