我对要构建的应用程序有一个想法,其中一个要求是全局复制的文件系统。存在像 Ceph 和 GlusterFS 这样的东西,但我不确定它们是否符合我的特定用例。
- 假设我在 3 个不同的地区 [美国、欧洲、亚洲] 有 3 个应用服务器
- 然后我有一个 3 节点 Ceph 设置,在每个区域 [美国、欧洲、亚洲] 有 1 个节点
- 我可以让每个应用服务器直接连接到他们所在区域的 Ceph 节点,还是必须通过一些集中的编排节点?
我问是因为我想将文件系统延迟保持在最低限度,并且只使用 Ceph 来同步所有节点之间的更改。如果我不能直接连接到“本地”节点,我认为延迟会非常高。
任何帮助理解这一点将不胜感激!
这取决于数据访问的类型:Ceph 可以将数据存储为块设备 (RBD)、S3 对象存储 (RGW) 或文件系统 (CephFS)。正如您提到的那样,我在这里假设 CephFS 和 Gluster,它们都是文件系统抽象。
在三节点配置中,Ceph 将在每个站点运行一个或多个 OSD 守护程序(每个磁盘驱动器一个)。数据在集群中的 OSD 上进行条带化,您的 CephFS 客户端(内核、FUSE 或 Windows)将通过算法访问正确的节点来存储数据,无需网关。这是如何完成的,解释起来很长,但本质上它是一个分布式哈希表映射,附加数据保存在 MON 守护进程中的服务器端。
CephFS 的数据路径是直接的,从您的客户端到 OSD,没有插入网关。
文件系统使用了一个额外的守护进程类型,MDS,它存储你的文件系统元数据。如果您的文件系统操作执行文件系统更改(例如创建目录),则将访问 MDS 而不是 OSD。
但是,特别是对于您的预期用例,Ceph 是一个同步存储系统,它的性能会随着节点之间的距离越远而下降。通常建议您将扩展配置保持在节点之间 10 毫秒的往返延迟范围内。换句话说,Ceph 集群喜欢住在一个数据中心,但如果你有很好的链接,你可以将它们延伸到一个城市或一些小国家。