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也是可以的。

未经允许不得转载:大白鲨游戏网 » Ceph提供NFS服务