在本章中,我们将介绍以下秘籍:
- Understanding the Ceph Filesystem and MDS
- Deploying Ceph MDS
- Accessing Ceph FS through kernel driver
- Accessing Ceph FS through FUSE client
- Exporting the Ceph Filesystem as NFS
- Ceph FS – a drop-in replacement for HDFS
在本章中,我们将介绍以下秘籍:
Ceph 文件系统,也称为 Ceph FS,是一个符合 POSIX 的文件系统,它使用 Ceph 存储集群来存储用户数据。 Ceph FS 支持本机 Linux 内核驱动程序,这使得 Ceph FS 在任何风格的 Linux 操作系统中都具有高度自适应性。在本章中,我们将详细介绍 Ceph 文件系统,包括它的部署、理解内核驱动程序和 FUSE。
Ceph 文件系统提供了任何大小的符合 POSIX 标准的分布式文件系统,它使用 Ceph RADOS 来存储其数据。要实现 Ceph 文件系统,您需要一个正在运行的 Ceph 存储集群和至少一个 Ceph 元数据服务器 (MDS ) 管理其元数据并将其与数据分开,这有助于降低复杂性并提高可靠性。下图描述了 Ceph FS 及其接口的架构视图:
libcephfs 库在支持其多个客户端实现方面发挥着重要作用。它具有原生 Linux 内核驱动程序支持,因此客户端可以使用原生文件系统挂载,例如,使用 mount 命令。它与 SAMBA 紧密集成,并支持 CIFS 和 SMB。 Ceph FS 使用 cephfuse 模块将其支持扩展到 用户空间中的文件系统 (FUSE)。它还允许使用 libcephfs 库与 RADOS 集群直接应用程序交互。 Ceph FS 作为 Hadoop HDFS 的替代品越来越受欢迎。以前的 HDFS 版本只支持单名称节点,这会影响其可扩展性并造成单点故障;然而,这在当前版本的 HDFS 中已经改变。与 HDFS 不同,Ceph FS 可以在主动-主动状态下的多个 MDS 上实施,从而使其具有高度可扩展性、高性能且无单点故障。
只有 Ceph FS 需要 Ceph MDS;其他存储方式的块存储和基于对象的存储不需要MDS服务。 Ceph MDS 作为一个守护进程运行,它允许客户端挂载任意大小的 POSIX 文件系统。 MDS 不直接向客户端提供任何数据;数据服务仅由 OSD 完成。 MDS 提供了一个具有智能缓存层的共享一致文件系统,因此大大减少了读取和写入。它将其优势扩展到动态子树分区和用于元数据的单个 MDS。它本质上是动态的;守护进程可以加入和离开,接管故障节点很快。
MDS 不存储本地数据,这在某些场景下非常有用。如果一个 MDS 守护进程死掉,我们可以在任何具有集群访问权限的系统上重新启动它。元数据服务器的守护程序配置为主动或被动。主 MDS 节点变为活动状态,其余节点将进入备用。在主 MDS 发生故障的情况下,第二个节点负责并提升为活动节点。为了更快地恢复,您可以指定一个备用节点应该跟随您的一个活动节点,这会将相同的数据保留在内存中以预先填充缓存。
Jewel (v10.2.0) 是第一个包含稳定 Ceph FS 代码和 fsck/修复工具的 Ceph 版本,尽管多个活动 MDS 安全运行,并且快照仍处于试验阶段。 Ceph FS 的开发继续以非常快的速度进行,我们可以期待它在 Luminous 版本中完全投入生产。对于您的非关键工作负载,您可以考虑使用具有单个 MDS 且没有快照的 Ceph FS。
在接下来的部分中,我们将介绍配置内核和 FUSE 客户端的方法。您选择使用哪个客户端取决于您的用例。但是 FUSE 客户端是获取最新代码的最简单方法,而内核客户端通常会提供更好的性能。此外,客户端并不总是提供等效的功能。例如,FUSE 客户端支持客户端强制配额,而内核客户端不支持。
要为 Ceph 文件系统配置元数据服务器,您应该有一个正在运行的 Ceph 集群。在前面的章节中,我们学习了使用 Ansible 部署 Ceph 存储集群;我们将使用相同的集群和 Ansible 进行 MDS 部署。
通过 ceph-ansible 部署 MDS 服务器非常简单,让我们回顾一下如何完成的步骤:
Linux 内核 2.6.34 及更高版本中添加了对 Ceph 的原生支持。在这个秘籍中,我们将演示如何通过 client-node1 上的 Linux 内核驱动程序访问 Ceph FS。
为了让我们的客户端能够访问 Ceph FS,我们需要配置客户端以访问集群和挂载 Ceph FS。让我们回顾一下这是如何完成的:
语法:# mount -t ceph
语法: <Mon_ipaddress>:<Monitor_port>:/ <mount_point> <文件系统名称> [name=username,secret=secretkey|secretfile=/
Linux内核原生支持Ceph文件系统;但是,如果您的主机在较低的内核版本上运行,或者您有任何应用程序依赖项,您始终可以使用 Ceph 的 FUSE 客户端来挂载 Ceph FS。
让我们回顾一下如何配置 FUSE 客户端以访问 Ceph 集群并挂载 Ceph FS:
网络文件系统 (NFS) 是最流行的可共享文件系统协议之一,可用于每个基于 Unix 的系统。不了解 Ceph FS 类型的基于 Unix 的客户端仍然可以使用 NFS 访问 Ceph 文件系统。为此,我们需要一个可以将 Ceph FS 重新导出为 NFS 共享的 NFS 服务器。 NFS-Ganesha 是一个 NFS 服务器,在用户空间运行,并使用 libcephfs< 支持 Ceph FS 文件系统抽象层 (FSAL) /span>.
在这个秘籍中,我们将演示创建 ceph-node1 作为 NFS-Ganesha 服务器并导出 Ceph FS 作为 NFS 并将其安装在 client-node1.
让我们演练使用 client-node1 作为 NFS-Ganesha 服务器将 Ceph FS 导出为 NFS 的步骤:
让我们回顾一下我们采取的步骤: ceph-node2 有已配置为 Ceph MDS,并且 ceph-node1 已配置为 NFS-Ganesha 服务器。 span> 接下来,为了在客户端机器上挂载NFS共享,我们只需要安装NFS客户端包并挂载导出的共享 span> ceph-node1,如下图:
我在client-node1上安装NFS客户端包 和 mount:
Hadoop 是一个编程框架,支持在分布式计算环境中处理和存储大型数据集。 Hadoop 核心包括分析 MapReduce 引擎和称为 Hadoop 分布式文件系统 (HDFS) 的分布式文件系统,它有以下几个弱点:
在 HDFS 的最新版本之前它一直存在单点故障
它不符合 POSIX 标准
至少存储三份数据
它有一个集中的名称服务器,导致可扩展性挑战
Apache Hadoop 项目和其他软件供应商正在独立工作以弥补 HDFS 中的这些差距。
Ceph 社区在这方面做了一些开发,它有一个用于 Hadoop 的文件系统插件,它可能克服了 HDFS 的限制,可以作为它的替代品。将 Ceph FS 与 HDFS 结合使用有三个要求;它们如下:
运行 Ceph 集群
运行 Hadoop 集群
安装 Ceph FS Hadoop 插件
Hadoop 和 HDFS 的实现超出了本书的范围;但是,在本节中,我们将肤浅地讨论如何将 Ceph FS 与 HDFS 结合使用。 Hadoop 客户端可以通过名为 hadoop-cephfs.jar 的基于Java 的插件访问Ceph FS . 需要以下两个 java 类来支持 Hadoop 与 Ceph FS 的连接。
libcephfs.jar:这个文件应该放在/usr/share/java/ ,路径要添加到Hadoop_env.sh HADOOP_CLASSPATH span> 文件。
libcephfs_jni.so:此文件应添加到 LD_LIBRARY_PATH 环境参数并放在 /usr/lib/hadoop/lib 。 你也应该软链接到 /usr/lib/hadoop/lib/native/Linux -amd64-64/libcephfs_jni.so。
除此之外,必须在 Hadoop 集群的每个节点上安装原生 Ceph FS 客户端。有关使用 Ceph FS for Hadoop 的更多最新信息,请访问位于 http://ceph.com/docs/master/cephfs/hadoop,以及位于 https://github.com/ceph/cephfs-hadoop.