2.16. 将命名空间导出到 NFS-Ganesha
在 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 对象网关实例在同一主机上并置。
开始前
- 在尝试运行 NFS-Ganesha 之前,禁用将运行 NFS-Ganesha 的任何主机上运行的任何内核 NFS 服务实例。如果另一个 NFS 实例正在运行,NFS-Ganesha 将不会启动。
作为
root 用户
启用 Red Hat Ceph Storage Tools 存储库:Red Hat Enterprise Linux 7
subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms
# subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8
subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms
# subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
rpcbind
服务正在运行:systemctl start rpcbind
# systemctl start rpcbind
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意提供
rpcbind
的 Therpcbind
软件包通常会默认安装。否则,请先安装软件包。有关 NFS 如何使用
rpcbind
的详细信息,请参阅 Red Hat Enterprise Linux 7 的存储管理指南中的 Required Services 部分。如果
nfs-service
服务正在运行,请停止并禁用该服务:systemctl stop nfs-server.service systemctl disable nfs-server.service
# systemctl stop nfs-server.service # systemctl disable nfs-server.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 NFS-Ganesha 实例
安装
nfs-ganesha-rgw
软件包:yum install nfs-ganesha-rgw
# yum install nfs-ganesha-rgw
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Ceph 配置文件从 Ceph 监控节点复制到 NFS-Ganesha 主机的
/etc/ceph/
目录,并根据需要编辑该文件:scp <mon-host>:/etc/ceph/ceph.conf <nfs-ganesha-rgw-host>:/etc/ceph
# scp <mon-host>:/etc/ceph/ceph.conf <nfs-ganesha-rgw-host>:/etc/ceph
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意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
的默认值,以更改刷新率。打开 NFS-Ganesha 配置文件:
vim /etc/ganesha/ganesha.conf
# vim /etc/ganesha/ganesha.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
FSAL
(File System Abstraction Layer)块配置EXPORT
部分。提供 ID、S3 用户 ID、S3 访问密钥和机密。对于 NFSv4,它应类似如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 设置中
。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
SecType = sys;
允许客户端在没有 Kerberos 身份验证的情况下附加.设置
Squash = No_Root_Squash;
允许用户在 NFS 挂载中更改目录所有权.使用传统 OS 原生 NFS 4.1 客户端的 NFS 客户端通常会看到由目标服务器的
pseudofs
root 定义的导出文件系统的联合命名空间。其中任意数量的可以是 Ceph 对象网关导出。每个导出都有自己的
名称
组User_Id、access
_Key
和Secret_Access_Key
,并且创建对指定用户可见的对象命名空间的代理。ganesha.conf
中的导出也可以包含NFSV4
块。红帽 Ceph 存储支持Allow_Numeric_Owners
和 onlyly_Numberic_Owners
参数,作为设置idmapper
程序的替代选择。NFSV4 { Allow_Numeric_Owners = true; Only_Numeric_Owners = true; }
NFSV4 { Allow_Numeric_Owners = true; Only_Numeric_Owners = true; }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
NFS_CORE_PARAM
块。NFS_CORE_PARAM{ mount_path_pseudo = true; }
NFS_CORE_PARAM{ mount_path_pseudo = true; }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当
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
mount -o vers=3 <IP ADDRESS>:/export /mnt mount -o vers=4 <IP ADDRESS>:/export /mnt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当
mount_path_pseudo
配置设置设为false
时,NFS v3 挂载使用Path
选项,NFS v4.x 挂载使用Pseudo
选项。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
RGW
部分。指定实例的名称,提供 Ceph 配置文件的路径,并指定任何初始化参数:RGW { name = "client.rgw.{instance-name}"; ceph_conf = "/etc/ceph/ceph.conf"; init_args = "--{arg}={arg-value}"; }
RGW { name = "client.rgw.{instance-name}"; ceph_conf = "/etc/ceph/ceph.conf"; init_args = "--{arg}={arg-value}"; }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
/etc/ganesha/ganesha.conf
配置文件。 启用并启动
nfs-ganesha
服务。systemctl enable nfs-ganesha systemctl start nfs-ganesha
# systemctl enable nfs-ganesha # systemctl start nfs-ganesha
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于非常大型的伪目录,请将
ceph.conf
文件中的可配置参数rgw_nfs_s3_fast_attrs
设置为true
,使命名空间不可变并加快速度:rgw_nfs_s3_fast_attrs= true
rgw_nfs_s3_fast_attrs= true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从每个网关节点重启 Ceph 对象网关服务:
systemctl restart ceph-radosgw.target
# systemctl restart ceph-radosgw.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 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
<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 和
挂载。要使用 UDP 作为传输,请将 noacl
作为挂载选项,可以将 Linux 客户端配置为通过 NFSv3proto=udp
添加到挂载选项中。但是,TCP 是首选的协议。
<ganesha-host-name>:/ <mount-point> nfs noauto,noacl,soft,nfsvers=3,sync,proto=tcp 0 0
<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
设置值。