Ceph 提供 NFS 服务:高效存储解决方案的终极指南

马哥Linux运维

共 4900字,需浏览 10分钟

 ·

2024-06-18 17:24



目录

  • Ceph提供nfs服务

    • 3.1 创建cephfs

    • 3.2 导出

    • 3.3 客户端尝试挂载

    • 3.4 验证

    • 2.1 ceph提供的nfs的架构

    • 1.1 检查模块

    • 1.2 检查是否有nfs-ganesha集群

    • 1. 前期准备

    • 2. 创建nfs服务

    • 3. nfs导出

    • 4. 高可用nfs-ganesha


Ceph提供nfs服务

ceph除了可以提供cephfs之外,也是可以支持nfs的,因为如果直接对外提供cephfs的话,客户端挂载比较繁琐,而提供nfs的话就非常易用了

1. 前期准备

1.1 检查模块


    

[root@ceph01 ~]# ceph mgr module ls |grep nfs

"nfs",

默认基本都是启动的,如果没有启用可以执行


    

[root@ceph01 ~]# ceph mgr module enable nfs

1.2 检查是否有nfs-ganesha集群


    

[root@ceph01 ~]# ceph nfs cluster ls

[root@ceph01 ~]#

2. 创建nfs服务

通过自动创建的方式


    

[root@ceph01 ~]# ceph nfs cluster create 1 "ceph01 ceph02"

NFS Cluster Created Successfully

[root@ceph01 ~]# ceph nfs cluster ls

1
  • create 后面的1指的是集群的id,可以改为其他的

  • 引号里面的ceph01,ceph02指的是在哪些节点上启动进程

创建完之后再去查看集群就会有一个了,并且显示为1,这个1不是指集群的数量,而是你刚刚给他的ID,如果你的ID指定的是其他的,那么他这里就会显示你自己指定的ID

2.1 ceph提供的nfs的架构

ceph的nfs是有一个组件叫做nfs-ganesha,然而cephfs的是由mds组件提供的

你客户端通过nfs的方式去挂载ceph的话,就相当于nfs-ganesha是一个翻译器,将你的nfs连接请求转换成cephfs,在你看来你挂载的是nfs,其实底层给你提供的存储的还是cephfs

他的连接就是这样的:客户端存储请求---> nfs-ganesha--->mds

当然也可以存储到rgw,不过这一块的适配做的不是很好,有很多功能用不了

这样nfs服务就创建好了,但是还没有配置后端的存储

3. nfs导出

nfs导出也就是给他配置后端存储

3.1 创建cephfs


    

# 创建一个cephfs,如果有的话可以不做

[root@ceph01 ~]# ceph fs volume create cephfs

[root@ceph01 ~]# ceph osd pool ls

device_health_metrics

.nfs

cephfs.cephfs.meta

cephfs.cephfs.data

3.2 导出


    

[root@ceph01 ~]# ceph nfs export create cephfs --cluster-id 1 --pseudo-path /cephfs --fsname cephfs --path=/

{

"bind": "/cephfs",

"fs": "cephfs",

"path": "/",

"cluster": "1",

"mode": "RW"

}
  • 这里的意思就是从cephfs中创建一个nfs,cluster-id就是之前指定的id,导出的nfs路径为/cephfs

  • --fsname:这个意思是使用哪个cephfs,我的cephfs的名字就叫cephfs

  • --path:指的是cephfs的路径

3.3 客户端尝试挂载


    

[root@master ~]# mount -t nfs 172.16.1.20:/cephfs /mnt

[root@master ~]# df |grep mnt

172.16.1.20:/cephfs 59736064 0 59736064 0% /mnt

挂载的ip写你自己的nfs的ip,我是用的公有云创建的ceph集群,所以这是一个公网IP

这种挂载方式就比直接挂载cephfs要方便的多了,因为如果要挂载cephfs的话我们还需要创建cephfs用户,还得授权,这种方式就不需要

3.4 验证

我们之前说这个nfs的数据也是存到cephfs里面了,我们来挂载cephfs看看


    

# 使用比较简单的授权方式,这种方式是后来更新的,较早的ceph版本可能没有这个命令

[root@ceph01 ~]# ceph fs authorize cephfs client.cephfs / rw -o ceph.client.cephfs.keyring

修改ceph.client.cephfs.keyring文件内容


    

# 只保留密钥部分

[root@ceph01 ~]# cat ceph.client.cephfs.keyring

AQBTNHFmDhxSABAAqB69R7Y3Rb89LA06R0pfmw==

# 挂载

[root@ceph01 ~]# mount -t ceph 172.16.1.20:6789:/ /mnt -o name=cephfs,secretfile=./ceph.client.cephfs.keyring

cephfs写入数据


    

[root@ceph01 mnt]# echo hello > cephfs

nfs查看数据


    

[root@master mnt]# ls

cephfs

[root@master mnt]# cat cephfs

hello

可以看到,数据写入到cephfs之后nfs端也是可以看见的

4. 高可用nfs-ganesha

ceph 内部是可以对nfs-ganesha,是通过haproxy+keepalived来做的


    

service_type: ingress

service_id: nfs.1 # 这里写的是nfs的id

placement:

hosts:

- ceph01

- ceph02

count_per_host: 1 # 每个节点部署几个nfs进程

spec:

backend_service: nfs.1 # 后端使用哪个

frontend_port: 20490 # nfs的端口号

monitor_port: 9000 # placement

virtual_ip: 172.16.1.100/24
  • frontend_port: 20490 这里默认是2049,改成20490的原因是我们在部署这个之前已经部署过了nfs,这个端口被nfs占用了,所以得换一个

不仅仅是nfs可以部署高可用,rgw也是可以的。

链接:https://www.cnblogs.com/fsdstudy/p/18254504

(版权归原作者所有,侵删)


浏览 91
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报