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