nfs-ganesha导出cephfs为nfs

本文档详细介绍了如何通过NFS-Ganesha将CephFS导出为NFS,包括安装、配置、使用步骤及常见问题。在配置NFS-Ganesha时,需注意设置`Squash=no_root_squash`以允许客户端以root身份操作。遇到NFS挂载后无法创建文件的问题,可通过调整配置解决。此外,还讨论了NFS-Ganesha的高可用性实现策略,并提及了如何利用API管理和配置NFS-Ganesha。文章最后提到了CephFS配额的设置以及NFS-Ganesha在不同场景下的应用。

1. 概述

cephfs直接使用不变,需要安装较多的依赖,相对来说nfs更加通用。
FSAL_CEPH 调用 libcephfs2 将 NFS 转义为 Cephfs 协议再存入到 Ceph 中,通过这种途径来实现cephfs导出为NFS

2. 前提条件

  • 有一个cephfs集群
  • 安装 nfs-ganesha nfs-ganesha-ceph libcephfs2
  • nfs-ganesha服务需要能连接到ceph的public网络
  • 安装nfs必要软件 rpcbind nfs-utils

3. 版本说明

  • nfs-ceph 2.8 nautilus

4. 安装

4.1. 配置yum源

cat /etc/yum.repos.d/storage.repo

[nfsganesha]
name=nfsganesha
baseurl=https://mirrors.cloud.tencent.com/ceph/nfs-ganesha/rpm-V2.8-stable/nautilus/x86_64/
gpgcheck=0
enable=1
yum clean all
yum repolist

4.2. 安装软件

yum install nfs-ganesha nfs-ganesha-ceph libcephfs2 -y

5. 配置

配置文件 /etc/ganesha/ganesha.conf

EXPORT
{
        Export_ID=1;
        # cephfs的目录
        Path = /;
        # nfs-ganesha挂载的目录
        Pseudo = /cephfs;
        Access_Type = RW;
        protocols = 3, 4;
        transports = "UDP", "TCP";
        Squash = no_root_squash;
        FSAL {
                # 访问ceph用户对应的secretkey  
                secret_access_key = "AQDk18FgMo7NABAA4ufuz3O6/0lE4vsVgHs1yQ==";  
                # 访问ceph的用户  
                user_id = "admin";  
                name = "CEPH";  
                # cephfs 的fsname  
                filesystem = "cephfs";  
        }        
}
LOG {                         
        Facility {
                name = FILE;  
                destination = "/var/log/ganesha/ganesha.log";  
                enable = active;  
        }
}

启动服务

systemctl enable nfs-ganesha nfs-utils rpcbind 
systemctl start nfs-ganesha nfs-utils rpcbind

6. 使用

mkdir /opt/ganesha
mount -t nfs 172.16.2.237:/cephfs  /opt/ganesha**

查看挂载

df
# output
172.16.2.237:/cephfs 6576680960 96047104 6480633856    2% /opt/ganesha

进入挂载点就可以进行文件系统操作了

性能测试结果见, 小集群下性能差距非常小 https://docs.qq.com/doc/DR3RlaGh2ZXpqV1pT

7. 部署问题

7.1. nfs挂载之后无法创建文件、文件夹

touch  aax
touch: 无法创建"aax": 权限不够

解决方式参照 https://github.com/ceph/ceph-ansible/issues/5300

在 ganesha的配置中添加 Squash = no_root_squash; 重启服务即可

这个配置项是nfs的配置项,客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!

8. 剩下的问题

  • 如何调用api使得nfs-ganesha生成配置且重新加载
    ceph中的实现是将nfs-ganesha的配置存储为ceph的对象,新建修改删除操作的都是ceph上的对象

    需要注意⚠️: 创建nfs-ganesha配置之后还需另外在cephfs上创建对应的目录;删除nfs-ganesha配置之后cephfs对应的目录也不会手动删除,如需清理则需另外操作删除

  • nfs-ganesha如何对指定目录做quota
    早期ceph版本在nfs-ganesha配置 client_quota = true 即可,后来社区把这个参数取消了,强制使用cephfs的quota,所以设置好cephfs的quota,在nfs-ganesha不用做什么即可达到目的

  • nfs-ganesha如何实现高可用
    nfs-ganesha 本身是个无状态服务,当前有以下几种方式实现高可用

    • pacemaker + corosync
    • ctds + lvs
    • haproxy
    • keepalived
    • k8s service+pod

    既然可以用k8s service来实现,是否也可以通过简单的ha+keepalived来实现(待验证)

9. 参考文档

Ceph是一个可靠的、数据自动重均衡、自动恢复的SDS(软件定义存储)分布式存储系统,功能主要有三大块:块存储、对象存储、文件系统。Ceph不但是提供了统一存储,并且同时还充分利用了客户端的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。不管是私有云还是公有云,随着云架构的发展,Ceph 成为了OpenStack、Proxmox标配的后端存储,不光如此,就连目前最火的容器编排 Kubernetes 持久存储也都支持 Ceph ,让 Ceph 成为当前主流的存储系统,而对 Ceph 存储的学习也就变的刻不容缓。 该课程属于比较基础的 Ceph 存储课程,旨在让大家能快速上手对 Ceph 集群的部署以及操作,主要讲解以下几个方面: 1.     架构的介绍2.     集群的多种部署方式3.     块存储部署,客户端使用及快照、克隆和镜像4.     对象存储的部署及简单使用5.     Ceph FS 文件系统的部署、客户端使用及导出NFS6.     集群的操作和管理,包括服务,集群扩展,缩减和集群维护7.     Ceph 基础知识的介绍,包括集群map,PG和身份验证8.     Ceph 集群的监控
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值