搜索

2.16. 将命名空间导出到 NFS-Ganesha

download PDF

在 Red Hat Ceph Storage 3 及更高版本中,Ceph 对象网关通过使用 NFS 版本 3 和 NFS 版本 4.1 在生产系统中导出 S3 对象命名空间的功能。

注意

NFS Ganesha 功能不用于一般用途,而仅适用于迁移到 S3 云。

注意

Red Hat Ceph Storage 不支持版本控制存储桶的 NFS 导出。

其实施符合 Amazon Web Services(AWS)分层命名空间约定,将 UNIX 风格路径名称映射到 S3 存储桶和对象。连接的命名空间的顶级(如果存在)属于 NFSv4 伪根,由 Ceph 对象网关 S3 存储桶组成,其中 bucket 表示为 NFS 目录。bucket 中的对象呈现为 NFS 文件和目录层次结构,遵循 S3 约定。支持创建文件和目录的操作。

注意

不支持创建或删除硬链接或软链接 IS。不支持通过 NFS 对存储桶或目录执行重命名操作,但对目录内和目录间支持的文件以及文件系统和 NFS 挂载之间的文件重命名。通过 NFS 执行文件重命名操作时,其成本会更高,因为它们会更改目标目录,并且通常强制完整 读取目录进行刷新

注意

不支持通过 NFS mount IS 编辑文件。

注意

Ceph 对象网关要求应用按顺序写入文件偏移 0 至文件末尾。尝试写出订单会导致上传操作失败。要临时解决这个问题,请在将文件复制到 NFS 空间时使用 cp、cat 或 rsync 等实用程序。始终使用 sync 选项挂载。

具有 NFS 的 Ceph 对象网关基于网关服务器的内部库打包,以及用于 NFS-Ganesha NFS 服务器的文件系统抽象层(FSAL)命名空间驱动程序。在运行时,一个 Ceph 对象网关守护进程实例与 NFS 结合了完整的 Ceph 对象网关守护进程,这是一个不含 Civetweb HTTP 服务且在一个进程中具有 NFS-Ganesha 实例的省事。要使用此功能,请部署 NFS-Ganesha 版本 2.3.2 或更高版本。

在包含 NFS-Ganesha(nfs-ganesha-rgw)实例的主机上,执行 启动和配置 NFS-Ganesha 实例前 的步骤。

运行多个 NFS 网关

每个 NFS-Ganesha 实例充当完整的网关端点,但当前的限制是 NFS-Ganesha 实例无法配置为导出 HTTP 服务。与普通网关实例一样,可以启动任意数量的 NFS-Ganesha 实例,从群集导出相同或不同的资源。这可实现 NFS-Ganesha 实例的集群。但是,这并不表示高可用性。

当常规网关实例和 NFS-Ganesha 实例重叠相同的数据资源时,可以从标准 S3 API 和导出的 NFS-Ganesha 实例访问它们。您可以将 NFS-Ganesha 实例与 Ceph 对象网关实例在同一主机上并置。

开始前

  1. 在尝试运行 NFS-Ganesha 之前,禁用将运行 NFS-Ganesha 的任何主机上运行的任何内核 NFS 服务实例。如果另一个 NFS 实例正在运行,NFS-Ganesha 将不会启动。
  2. 作为 root 用户 启用 Red Hat Ceph Storage Tools 存储库:

    Red Hat Enterprise Linux 7

    # subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms

    Red Hat Enterprise Linux 8

    # subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms

  3. 确保 rpcbind 服务正在运行:

    # systemctl start rpcbind
    注意

    提供 rpcbind 的 The rpcbind 软件包通常会默认安装。否则,请先安装软件包。

    有关 NFS 如何使用 rpcbind 的详细信息,请参阅 Red Hat Enterprise Linux 7 的存储管理指南中的 Required Services 部分。

  4. 如果 nfs-service 服务正在运行,请停止并禁用该服务:

    # systemctl stop nfs-server.service
    # systemctl disable nfs-server.service

配置 NFS-Ganesha 实例

  1. 安装 nfs-ganesha-rgw 软件包:

    # yum install nfs-ganesha-rgw
  2. 将 Ceph 配置文件从 Ceph 监控节点复制到 NFS-Ganesha 主机的 /etc/ceph/ 目录,并根据需要编辑该文件:

    # scp <mon-host>:/etc/ceph/ceph.conf <nfs-ganesha-rgw-host>:/etc/ceph
    注意

    Ceph 配置文件必须包含有效的 [client.rgw.{instance-name}] 部分,以及各种必要的网关配置变量的对应参数,如 rgw_data密钥环rgw_frontends。如果导出不符合有效 S3 存储桶命名要求的 Swift 容器,请将 Ceph 配置文件的 [client.rgw] 部分中的 rgw_relaxed_s3_bucket_names 设置为 true。例如,如果 Swift 容器名称包含下划线,则它不是有效的 S3 存储桶名称,并且不会同步,除非 rgw_relaxed_s3_bucket_names 设为 true。当在 NFS 之外添加对象和存储桶时,这些对象会在 rgw_nfs_namespace_expire_secs 设置的时间里显示在 NFS 命名空间中,默认为大约 5 分钟。覆盖 Ceph 配置文件中的 rgw_nfs_namespace_expire_secs 的默认值,以更改刷新率。

  3. 打开 NFS-Ganesha 配置文件:

    # vim /etc/ganesha/ganesha.conf
  4. 使用 FSAL (File System Abstraction Layer)块配置 EXPORT 部分。提供 ID、S3 用户 ID、S3 访问密钥和机密。对于 NFSv4,它应类似如下:

    EXPORT
    {
            Export_ID={numeric-id};
            Path = "/";
            Pseudo = "/";
            Access_Type = RW;
            SecType = "sys";
            NFS_Protocols = 4;
            Transport_Protocols = TCP;
            Squash = No_Root_Squash;
    
            FSAL {
                    Name = RGW;
                    User_Id = {s3-user-id};
                    Access_Key_Id ="{s3-access-key}";
                    Secret_Access_Key = "{s3-secret}";
            }
    }

    Path 选项指示 Ganesha 在哪里查找导出。对于 VFS FSAL,这是服务器命名空间中的位置。对于其他 FSAL,它可能是由 FSAL 命名空间管理的文件系统中的位置。例如,如果 Ceph FSAL 用于导出整个 CephFS 卷,则 路径 将是 /

    Pseudo 选项指示 Ganesha 将导出放在 NFS v4 的伪文件系统命名空间内。NFS v4 指定服务器可以构造不与任何实际导出位置对应的伪命名空间,并且该伪文件系统的部分可能仅存在于 NFS 服务器的域中且不与任何物理目录对应。此外,NFS v4 服务器将其所有导出放置在一个命名空间内。可以将单个导出导出为伪文件系统 root,但将多个导出放置在伪文件系统中更为常见。使用传统的 VFS 时,Pseudo 位置通常与 路径 位置相同。使用 / 作为路径返回到示例 CephFS 导出,如果需要多个导出,则导出可能会有其他内容作为 Pseudo 选项。例如,/ceph

    任何应支持 NFSv3 的 EXPORT 块都应在 NFS_Protocols 设置中包含版本 3。此外,NFSv3 是支持 UDP 传输的最后一个主要版本。早期版本的标准包括 UDP,但 RFC 7530 禁止其使用。要启用 UDP,将其包含在 Transport_Protocols 设置中。例如:

    EXPORT {
    ...
        NFS_Protocols = 3,4;
        Transport_Protocols = UDP,TCP;
    ...
    }

    设置 SecType = sys; 允许客户端在没有 Kerberos 身份验证的情况下附加.

    设置 Squash = No_Root_Squash; 允许用户在 NFS 挂载中更改目录所有权.

    使用传统 OS 原生 NFS 4.1 客户端的 NFS 客户端通常会看到由目标服务器的 pseudofs root 定义的导出文件系统的联合命名空间。其中任意数量的可以是 Ceph 对象网关导出。

    每个导出都有自己的 名称User_Id、access _KeySecret_Access_Key,并且创建对指定用户可见的对象命名空间的代理。

    ganesha.conf 中的导出也可以包含 NFSV4 块。红帽 Ceph 存储支持 Allow_Numeric_Owners 和 only ly_Numberic_Owners 参数,作为设置 idmapper 程序的替代选择。

    NFSV4 {
        Allow_Numeric_Owners = true;
        Only_Numeric_Owners = true;
    }
  5. 配置 NFS_CORE_PARAM 块。

    NFS_CORE_PARAM{
        mount_path_pseudo = true;
    }

    mount_path_pseudo 配置设置被设置为 true 时,它将使 NFS v3 和 NFS v4.x 挂载使用相同的服务器侧路径来访问导出,例如:

        mount -o vers=3 <IP ADDRESS>:/export /mnt
        mount -o vers=4 <IP ADDRESS>:/export /mnt
    Path            Pseudo          Tag     Mechanism   Mount
    /export/test1   /export/test1   test1   v3 Pseudo   mount -o vers=3 server:/export/test1
    /export/test1   /export/test1   test1   v3 Tag      mount -o vers=3 server:test1
    /export/test1   /export/test1   test1   v4 Pseudo   mount -o vers=4 server:/export/test1
    /               /export/ceph1   ceph1   v3 Pseudo   mount -o vers=3 server:/export/ceph1
    /               /export/ceph1   ceph1   v3 Tag      mount -o vers=3 server:ceph1
    /               /export/ceph1   ceph1   v4 Pseudo   mount -o vers=4 server:/export/ceph1
    /               /export/ceph2   ceph2   v3 Pseudo   mount -o vers=3 server:/export/ceph2
    /               /export/ceph2   ceph2   v3 Tag      mount -o vers=3 server:ceph2
    /               /export/ceph2   ceph2   v4 Pseudo   mount -o vers=4

    mount_path_pseudo 配置设置设为 false 时,NFS v3 挂载使用 Path 选项,NFS v4.x 挂载使用 Pseudo 选项。

    Path            Pseudo          Tag     Mechanism   Mount
    /export/test1   /export/test1   test1   v3 Path     mount -o vers=3 server:/export/test1
    /export/test1   /export/test1   test1   v3 Tag      mount -o vers=3 server:test1
    /export/test1   /export/test1   test1   v4 Pseudo   mount -o vers=4 server:/export/test1
    /               /export/ceph1   ceph1   v3 Path     mount -o vers=3 server:/
    /               /export/ceph1   ceph1   v3 Tag      mount -o vers=3 server:ceph1
    /               /export/ceph1   ceph1   v4 Pseudo   mount -o vers=4 server:/export/ceph1
    /               /export/ceph2   ceph2   v3 Path     not accessible
    /               /export/ceph2   ceph2   v3 Tag      mount -o vers=3 server:ceph2
    /               /export/ceph2   ceph2   v4 Pseudo   mount -o vers=4 server:/export/ceph2
  6. 配置 RGW 部分。指定实例的名称,提供 Ceph 配置文件的路径,并指定任何初始化参数:

    RGW {
        name = "client.rgw.{instance-name}";
        ceph_conf = "/etc/ceph/ceph.conf";
        init_args = "--{arg}={arg-value}";
    }
  7. 保存 /etc/ganesha/ganesha.conf 配置文件。
  8. 启用并启动 nfs-ganesha 服务。

    # systemctl enable nfs-ganesha
    # systemctl start nfs-ganesha
  9. 对于非常大型的伪目录,请将 ceph.conf 文件中的可配置参数 rgw_nfs_s3_fast_attrs 设置为 true,使命名空间不可变并加快速度:

    rgw_nfs_s3_fast_attrs= true
  10. 从每个网关节点重启 Ceph 对象网关服务:

    # systemctl restart ceph-radosgw.target

配置 NFSv4 客户端

要访问命名空间,请将配置的 NFS-Ganesha 导出挂载到本地 POSIX 命名空间中的所需位置。如前文所述,这种实施有一些独特的限制:

  • 仅支持 NFS 4.1 和更高协议类别。
  • 要强制执行写顺序,请使用 sync 挂载选项。

要挂载 NFS-Ganesha 导出,请在客户端主机上的 /etc/fstab 文件中添加以下条目:

<ganesha-host-name>:/ <mount-point> nfs noauto,soft,nfsvers=4.1,sync,proto=tcp 0 0

指定 NFS-Ganesha 主机名和客户端上挂载点的路径。

注意

为了成功挂载 NFS-Ganesha 导出,客户端上必须存在 /sbin/mount.nfs 文件。nfs-tools 软件包提供此文件。在大多数情况下,会默认安装 软件包。但是,验证是否在客户端上安装了 nfs-tools 软件包,如果未安装,请进行安装。

有关 NFS 的详情,请参阅 Red Hat Enterprise Linux 7 的存储管理指南中的 网络文件系统(NFS) 一章。

配置 NFSv3 客户端

通过提供 nfsvers=3 和 noacl 作为挂载选项,可以将 Linux 客户端配置为通过 NFSv3 挂载。要使用 UDP 作为传输,请将 proto=udp 添加到挂载选项中。但是,TCP 是首选的协议。

<ganesha-host-name>:/ <mount-point> nfs noauto,noacl,soft,nfsvers=3,sync,proto=tcp 0 0
注意

如果挂载将使用版本 3 和 UDP,则使用版本 3 和 传输设置 配置 NFS Ganesha EXPORT协议 设置。

由于 NFSv3 不将客户端 OPEN 和 CLOSE 操作告知文件服务器,RGW NFS 无法使用这些操作来标记文件上传事务的开始和结束。相反,当第一次写入以偏移 0 发送到文件时,RGW NFS 会尝试启动新的上传,并在默认情况下 10 秒内看到对 文件的新写入时完成上传。要更改此值,请在 Ceph 配置文件的 RGW 部分中为 rgw_nfs_write_completion_interval_s 设置值。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.