Ceph提供nfs服务

ceph,nfs · 浏览次数 : 0

小编点评

本文介绍了如何在Ceph集群上提供NFS服务,包括前期准备、创建NFS服务、NFS导出、客户端挂载以及高可用NFS-Ganesha实现。 1. **前期准备**: - 检查Ceph集群模块,确保nfs模块已启用。 - 检查是否有nfs-ganesha集群,如果没有则创建一个。 2. **创建NFS服务**: - 通过Ceph CLI创建NFS服务,指定集群ID和存储位置。 - 创建完成后,检查集群列表以确认NFS服务已创建。 3. **NFS导出**: - 创建一个cephfs并导出为NFS,配置后端存储。 - 在客户端尝试挂载NFS共享。 4. **客户端挂载**: - 使用简单的授权方式挂载NFS共享。 - 验证数据已正确写入CephFS存储。 5. **高可用NFS-Ganesha**: - 使用HA配置实现NFS服务的冗余和负载均衡。 - 配置HA选项,包括服务类型、服务ID、放置策略等。 总的来说,本文详细阐述了在Ceph集群上部署NFS服务的整个过程,包括其前期准备、服务创建、导出、客户端挂载以及高可用实现。

正文

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服务相似的内容:

Ceph提供nfs服务

目录Ceph提供nfs服务1. 前期准备1.1 检查模块1.2 检查是否有nfs-ganesha集群2. 创建nfs服务2.1 ceph提供的nfs的架构3. nfs导出3.1 创建cephfs3.2 导出3.3 客户端尝试挂载3.4 验证4. 高可用nfs-ganesha Ceph提供nfs服务

Ceph配置与认证授权

目录Ceph配置与认证授权1. 为什么现在不采用修改配置文件的方式了呢?2. Ceph元变量3. 使用命令行修改配置3.1 全部修改(使用服务名)3.2 部分修改(修改进程)3.3 临时生效3.4 配置项3.5 老版本提供的配置文件3. Ceph网络3.1 对现有集群加入cluster networ

k8s使用rbd作为存储

k8s使用rbd作为存储 如果需要使用rbd作为后端存储的话,需要先安装ceph-common 1. ceph集群创建rbd 需要提前在ceph集群上创建pool,然后创建image [root@ceph01 ~]# ceph osd pool create pool01 [root@ceph01

将虚拟机跑在ceph之中

目录openStack对接ceph1. cinder对接ceph1.1 ceph创建存储池1.2 ceph授权1.3 下发ceph文件1.4 修改globals文件1.5 部署cinder1.6 创建卷null2. nova对接ceph2.1 创建卷2.2 更新cinder权限2.3 修改globa

Ceph对象网关,多区域网关

目录Ceph对象网关,多区域网关1. 文件系统与对象存储的区别1.1 对象存储使用场景1.2 对象存储的接口标准1.3 桶(bucket)2. rgw2.1 对象存储认证2.2 对象网关所涉概念2.3 可用区和ceph集群的关系3. 部署对象网关3.1 创建realm3.1.1 列出所有的realm

ceph客户端配置自动挂载存储服务

1. 安装支持ceph的内核模块 可选: centos/ubuntu: yum install -y ceph-common 或 apt install -y ceph-common 2. 拷贝认证密钥 cephadmin@ceph-deploy:~/ceph-cluster$ sudo scp c

Ceph存储池管理

目录Ceph存储池1. Ceph的存储流程1. 数据写入2. 数据读取2. 资源池的配置2.1 资源池创建pgp是什么 (Placement Group for Placement purpose)2.2 绑定池类型关闭3. 对象的管理3.1 上传对象3.2 查看对象3.3 下载对象3.4 删除对象

Ceph 架构以及部署

目录Ceph架构存储类型为什么用到Ceph?1. NFS2. MooseFSMooseFS瓶颈3. GlusterFS4. CephCeph的组件Ceph部署前期准备1.1 修改主机名1.2 关闭防火墙以及selinux1.3 配置hosts1.4 配置时间同步2. 安装cephadm2.1 安装g

每天5分钟复习OpenStack(十三)存储缓存技术Bcache

Ceph作为一个分布式存储,在项目中常见的形态有两者,一种是采用 SSD 或NVME 磁盘做Ceph的日志盘,使用SATA磁盘来做数据盘。这样的好处是比较经济实惠。另一种则是全部采用 SSD 或NVME磁盘,其性能更好,但是其价格比较昂贵。在第一种形态中,我们能像中间件那样加上一层缓存层,从而实现给

[转帖]Ceph学习之路(二)之Ceph的工作原理及流程

Ceph学习之路(二)之Ceph的工作原理及流程 https://www.cnblogs.com/linuxk/p/9414920.html 一、RADOS的对象寻址 Ceph 存储集群从 Ceph 客户端接收数据——不管是来自 Ceph 块设备、 Ceph 对象存储、 Ceph 文件系统、还是基于