NFS with CephFS

9 篇文章 0 订阅

NFS with CephFS

CephFS 命名空间可以使用 NFS-Ganesha NFS 服务器 通过 NFS 协议导出。 本文档提供有关手动配置 NFS-Ganesha 集群的信息。 管理 NFS-Ganesha 集群和 CephFS 导出的最简单和首选的方法是使用 ceph nfs ... 命令。 有关详细信息,请参阅 :doc:/mgr/nfs。 由于部署是使用 cephadm 或 rook 完成的。

先决条件

  • Ceph文件系统
  • NFS 服务器主机上的 libcephfs2nfs-ganeshanfs-ganesha-ceph 包。
  • NFS-Ganesha 服务器主机连接到 Ceph public network

备注

建议使用 3.5 或更高稳定版本的 NFS-Ganesha 包和 pacific (16.2.x) 或更高稳定版本的 Ceph 包。

配置 NFS-Ganesha 以导出 CephFS

NFS Ganesha提供了一个文件系统抽象层(FSAL)来插入不同的存储后端。FSAL_CEPH是CephFS的插件FSAL。对于每个NFS Ganesha导出,FSAL_CEPH使用libcephfs客户端装载NFS Ganesha导出的CephFS路径。

使用Cephfs设置NFS Ganesha,包括为NFS Ganesha创建的Ceph客户端设置NFS Ganesha和Ceph的配置文件和CephX访问凭据,以访问Cephfs。

NFS Ganesha配置

下面是一个配置有FSAL_CEPHganesha.conf示例。它适用于独立NFS Ganesha服务器,或NFS Ganesha服务器的主动/被动配置,由某种集群软件(如Pacemaker)进行管理。有关选项的重要细节将作为注释添加到示例配置中。有以下选项:

  • 尽可能减少 Ganesha 缓存,因为 libcephfs 客户端(FSAL_CEPH)也主动缓存
  • 从存储在 RADOS 对象中的 Ganesha 配置文件中读取
  • 在 RADOS OMAP 键值接口中存储客户端恢复数据
  • 强制 NFSv4.1+ 访问
  • 启用读委托(至少需要 v13.0.1 libcephfs2 包和 v2.6.0 稳定的 nfs-ganeshanfs-ganesha-ceph 包)
#
# 可以使用 FSAL_CEPH 为 CephFS 提供 NFS 网关。 以下示例配置作为配置的起点应该很有用。 
# 此基本配置适用于独立 NFS 服务器,或由某种集群软件(例如pacemaker、docker 等)管理的
# 主动/被动配置。
#
# 还要注意,也可以在 RADOS 中放置一个配置文件,并给出ganesha 从中获取它的 rados URL。
# 例如,如果配置文件存储在名为“nfs-ganesha”的 RADOS 池中,在名为“ganesha-namespace”
# 的命名空间中,对象名称为“ganesha-config”:
#
# %url	rados://nfs-ganesha/ganesha-namespace/ganesha-config
#
# 如果我们只导出CEPFS(或RGW),请将配置和恢复数据存储在RADOS中,并强制使用NFSv4.1+进行访问
# 我们可以避免任何形式的本地存储,ganesha可以作为非特权用户运行(即使在锁定的容器中)。
#

NFS_CORE_PARAM
{
	# 如果禁用 NLM,Ganesha 可以提前解除NFS宽限期。
	Enable_NLM = false;

	# rquotad在这里没有添加任何价值。 CephFS不支持per-uid配额。
	Enable_RQUOTA = false;

	# 在这个配置中,我们仅导出 NFSv4。在实践中,最好使用 NFSv4.1+ 来获得会话的好处。
	Protocols = 4;
}

NFSv4
{
	# 现代版本的 libcephfs 支持委托,但目前不建议在集群配置中使用它们。 默认情况下它们
	# 被禁用,但可以为单例或主动/被动配置重新启用。
	# Delegations = false;

	# 可以在这种配置下使用任何恢复后端,但可以将其存储在RADOS中是一个很好的功能,可以轻
	# 松地将守护程序迁移到另一台主机。
	#
	# 对于单节点或主动/被动配置,首选 rados_ng 驱动程序。 对于主动/主动集群配置,可以
	# 使用 rados_cluster 后端。 有关更多信息,请参阅 ganesha-rados-grace 帮助页。
	RecoveryBackend = rados_ng;

	# NFSv4.0 客户端不发送 RECLAIM_COMPLETE,因此我们最终不得不等待整个宽限期
	#(如果有的话)。 避开他们。
	Minor_Versions =  1,2;
}

# libcephfs 客户端会尽可能主动地缓存信息,因此 ganesha 主动缓存相同的对象几乎没有什么好处。
# 这样做也会损害缓存的一致性。 在这里,我们尽可能多地禁用属性和目录缓存。
MDCACHE {
	# 尽可能减小 dirent 缓存的大小。
	Dir_Chunk = 0;
}

EXPORT
{
	# 此导出的唯一导出 ID 号
	Export_ID=100;

	# 我们只对这种配置中的NFSv4感兴趣
	Protocols = 4;

	# NFSv4不允许UDP传输
	Transports = TCP;

	#
	# 通往Cepfs树的路径。
	#
	# 请注意,FSAL_CEPH 不支持子树检查,因此无法验证客户端提供的文件句柄是否可通过导出的子树访问。
	#
	# 出于这个原因,我们只是在这里导出“/”。
	Path = /;

	#
	# 伪根路径。 这是导出将出现在 NFS 伪根命名空间中的位置。
	#
	Pseudo = /cephfs_a/;

	# 我们希望能够读写
	Access_Type = RW;

	# 立即超时属性缓存条目
	Attr_Expiration_Time = 0;

	# 启用读委托? libcephfs v13.0.1 及更高版本允许 ceph 客户端设置委托。 虽然可以允许RW委托,
	# 但不建议在 ganesha 获得 CB_GETATTR 支持之前启用它们。
	#
	# 还要注意,委托在集群配置中可能不安全,因此最好在解决此问题之前禁用它们:
	#
	# http://tracker.ceph.com/issues/24802
	#
	# Delegations = R;

	# NFS 服务器通常决定将来自 root 用户的传入请求“压缩”到“nobody”用户。 可以禁用它,但现在,
	# 我们将其保持启用状态。
	# Squash = root;

	FSAL {
		# FSAL_CEPH 导出
		Name = CEPH;

		#
		# Ceph 文件系统有一个与之关联的名称字符串,现代版本的 libcephfs 可以根据名称挂载它们。
        # 默认是挂载集群中的默认文件系统(通常是第一个创建的)。
		#
		# Filesystem = "cephfs_a";

		#
		# Ceph 集群有自己的身份验证方案 (cephx)。Ganesha 充当 cephfs 客户端。 这是要使用
		# 的客户端用户名。 需要在运行 ganesha 之前创建此用户。
		#
		# 通常,ceph 客户端的名称类似于“client.foo”。 此设置不应包含“client.”前缀。
		#
		# 参考:
		#
		# http://docs.ceph.com/docs/jewel/rados/operations/user-management/
		#
		# 默认设置为 NULL,这意味着用户 ID 在 libcephfs 中设置为默认值(通常为“admin”)。
		#
		# User_Id = "ganesha";

		#
		# 用于会话的密钥(如果有)。 如果未设置,它将使用 cephx 密钥环文件的正常搜索路径来查找密钥:
		#
		# Secret_Access_Key = "YOUR SECRET KEY HERE";
	}
}

# FSAL_CEPH 的配置块
CEPH
{
	# 此ceph集群的ceph.conf文件的路径。
	# Ceph_Conf = /etc/ceph/ceph.conf;

	# 用户文件创建掩码。 这些位将被新创建的inode上的 unix 权限屏蔽掉。
	# umask = 0;
}

#
# 这是 RADOS RecoveryBackend 的配置块。 这仅在将客户端恢复记录存储在 RADOS 对象中时使用。
#
RADOS_KV
{
	# 此ceph集群的 ceph.conf 文件的路径。
	# Ceph_Conf = /etc/ceph/ceph.conf;

	# recoverybackend 有自己的 ceph 客户端。 默认是让libcephfs自动生成用户ID。请注意, 
	# RADOS_KV 块没有Secret_Access_Key设置。 必须使用 cephx 密钥环文件进行认证访问。
	# UserId = "ganesharecov";

	# 包含恢复对象的 ceph 存储池的池 ID。默认为“nfs-ganesha”。
	# pool = "nfs-ganesha";

	# 考虑在此处为每个正在运行的守护程序设置一个唯一的 nodeid,特别是如果该守护程序最终可能迁
	# 移到具有不同主机名的主机(即,如果您正在运行具有 rados_ng/rados_kv 和/或横向扩展的 
	# rados_cluster 的主动/被动集群 )。 默认是使用运行 ganesha 的节点的主机名。
	# nodeid = hostname.example.com
}

# rados://URL访问的配置块。它也使用自己的客户端来访问对象,独立于FSAL_CEPH和RADOS_KV客户端。
RADOS_URLS
{
	# 此ceph集群的 ceph.conf 文件的路径。
	# Ceph_Conf = /etc/ceph/ceph.conf;

	# RADOS_URLS也使用他们自己的 ceph 客户端。 认证访问需要 cephx 密钥环文件。
	# UserId = "ganeshaurls";

	# 我们还可以让ganesha监视RADOS对象以获取通知,并在收到通知时强制重新加载配置。将其设
	# 置为有效的rados://URL 以启用此功能。
	# watch_url = "rados://pool/namespace/object";
}

libcephfs 客户端的配置

libcephfs 客户端的 ceph.conf 包含一个 [client] 部分,其中设置了 mon_host 选项以让客户端连接到 Ceph 集群的监视器,通常通过 ceph config generate-minimal-conf 生成。 例如:

[client]
        mon host = [v2:192.168.1.7:3300,v1:192.168.1.7:6789], [v2:192.168.1.8:3300,v1:192.168.1.8:6789], [v2:192.168.1.9:3300,v1:192.168.1.9:6789]

使用 NFSv4 客户端挂载

最好使用 NFSv4.1+ 协议挂载 NFS-Ganesha 导出以获得会话的好处。

挂载 NFS 资源的约定是特定于平台的。 以下约定适用于 Linux 和一些 Unix 平台:

mount -t nfs -o nfsvers=4.1,proto=tcp <ganesha-host-name>:<ganesha-pseudo-path> <mount-point>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值