袁党生博客

  • 主页
  • linux基础
  • SHELL
  • WEB
  • 负载
  • 企业级应用
  • 数据库
  • KVM
  • Docker
  • K8S
  • 监控
  • 存储
  • 博客搭建问题
  1. 首页
  2. 存储
  3. 正文

七、CephFS使用

2024年6月3日 2550点热度 19人点赞 0条评论


本章概述

  • 创建CephFS
  • 验证CephFS
  • 创建普通用户
  • 客户端准备工作
  • 挂载ceph-fs
  • ceph mds高可用
  • 通过 ganesha 将 cephfs 导出为 NFS

前言
  ceph FS 即 ceph filesystem,可以实现文件系统共享功能(符合POSIX标准),客户端通过 ceph 协议挂载并使用 ceph 集群作为数据存储服务器。
  官网链接:https://docs.ceph.com/en/quincy/cephfs/
  Ceph FS 需要运行 Meta Data Services(MDS)服务,其守护进程为 ceph-mds,ceph-mds进程管理在cephFS 上存储的文件相关的元数据,并协调对 ceph 存储集群的访问。
  在linux系统使用ls等操作查看某个目录下文件的时候,会有保存在磁盘上的分区表记录文件的名称、创建日期、大小、inode(使用df -i命令可以查看)及存储位置等元数据信息,cephfs上的数据则是被打散为若干个离散的object进行分布式存储,并没有统一保存文件的元数据,而是将文件的元数据保存到一个单独的存储池metadata pool,但是客户端并不能直接访问metadata pool中的元数据信息,而是在读写数据的时候由MDS(metadata server)进行处理,读数据的时候由MDS从metadata pool加载元数据然后缓存在内存(用于后期快速响应其他客户端的请求)并返回给客户端,写数据的时候由MDS缓存在内存并同步到metadata pool。
  注:ceph的元数据保存在bluestore中,具体查看2.6章节。块存储的元数据随着object一块存储,当客户端挂载存储时,可以直接读取数据的元数据。而cephFS存在两个存储池:数据存储池和元数据存储池,客户端不能挂载两个存储池,因此为了方便读取元数据,cephFS需要启用MDS服务
架构图如下:

cephfs的mds数据结构类似于linux系统的根形目录结构及nginx中的缓存目录分层一样。

7.1 创建CephFS

CephFS创建、挂载以及MDS的创建步骤请参考4.3章节,这里不再重复

7.2 验证CephFS

查看cephfs服务状态,只有一个在线

查看指定的cephfs状态
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status mycephfs

7.3 创建普通用户

创建账户(deploy节点执行)

cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth add client.test02 mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data'            #给普通用户授权,mon读权限,mds读写权限(需要想mds写入元数据),osd读写执行权限

查看账号:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.test02

创建用 keyring 文件,将test02用户信息导入keyring用于验证
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.test02 -o ceph.client.test02.keyring

创建key文件,用于客户端挂载时验证使用
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth print-key client.test02 > test02.key
验证keyring文件

7.4 客户端准备工作

1、在客户端服务器(ceph-client2 172.31.7.152)安装以下安装包

[root@ceph-client2 ~]# yum install epel-release -y
[root@ceph-client2 ~]# yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
[root@ceph-client2 ~]# yum install ceph-common -y

2、同步客户端认证文件
在deploy节点执行命令
scp ceph.conf ceph.client.test02.keyring test02.key root@172.31.7.152:/etc/ceph/
3、在客户端进行验证
查看ceph集群信息:
[root@ceph-client2 ceph]# ceph --user test02 -s

7.5 挂载ceph-fs

客户端挂载有两种方式,一种是内核空间,一种是用户空间,内核空间挂载需要内核支持 ceph 模块,用户空间挂载需要安装 ceph-fuse

7.5.1 内核空间挂载ceph-fs

要求内核支持ceph模块
查看内核是否支持ceph
[root@ceph-client2 ~]#lsmod |grep ceph
[root@ceph-client2 ~]#modinfo libceph

7.5.1.1 客户端通过key文件挂载
注意:需要将key文件复制到客户端本地才可以通过这种方式挂载cephfs
在客户端服务器172.31.7.152上
1、创建挂载目录:
mkdir /data
2、挂载cephfs

[root@ceph-client2 ~]# mount -t ceph 172.31.7.121:6789,172.31.7.122:6789,172.31.7.123:6789:/ /data -o name=test02,secretfile=/etc/ceph/test02.key 

参数说明:
172.31.7.121:6789,172.31.7.122:6789,172.31.7.123:6789:/     #是指mon的地址和端口,注意要加上根目录/
/data          #是指挂载目录
-name         #指定普通用户test02
secretfile       #指定key文件路径,即/etc/ceph/test02.key  

3、验证:
查看磁盘情况
df -Th

写入数据
[root@ceph-client2 ceph]#cp /var/log/messages /data
[root@ceph-client2 ceph]#ls /data

7.5.1.2 客户端通过key挂载
注意:如果客户端本地不方便存放key文件(如:在容器内),则可以通过key直接挂载,这里不需要将key文件复制到客户端本地。
1、查看key文件
[root@ceph-client2 ceph]#cat /etc/ceph/test02.key

2、卸载上一步骤的挂载 #如果是第一次挂载,可忽略该步骤
umount /data
3、通过key挂载cephfs

[root@ceph-client2 ~]# mount -t ceph 172.31.7.121:6789,172.31.7.122:6789,172.31.7.123:6789:/ /data -o name=test02,secret=AQCFei9kClBWDxAAwYDZPGefTZjIWV7FytxKOw==

参数说明:
172.31.7.121:6789,172.31.7.122:6789,172.31.7.123:6789:/     #是指mon的地址和端口,注意要加上根目录/
/data          #是指挂载目录
-name         #指定普通用户test02
secret         #指定key,即/etc/ceph/test02.key中的key  

4、验证
查看本地磁盘情况,挂载成功

7.5.1.3 设置开机自动挂载
1、配置/etc/fstab

vim  /etc/fstab
172.31.7.121:6789,172.31.7.122:6789,172.31.7.123:6789:/ /data ceph defaults,name=test02,secretfile=/etc/ceph/test02.key,_netdev 0 0

备注:在/etc/fstab文件配置挂载项时要添加_netdev参数(上面标红部分),表示该设备为网络设,当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败

2、重启设备进行验证 #重启操作只在实验环境进行,生产环境可忽略该步骤
reboot
3、查看挂载

查看文件,message文件还在

7.5.2 用户空间挂载ceph-fs

如果内核本较低而没有 ceph 模块,那么可以安装 ceph-fuse 挂载,但是这种挂载方式磁盘读写性能较差,推荐使用内核模块挂载。
7.5.2.1 客户端准备工作
1、在客户端服务器安装ceph-fuse安装

[root@ceph-client2 ~]# yum install epel-release -y
[root@ceph-client2 ~]# yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
[root@ceph-client2 ~]# yum install ceph-common -y
[root@ceph-client2 ~]# yum install ceph-fuse -y       #安装ceph-fuse安装包

2、同步客户端认证文件
在deploy节点执行命令

scp ceph.conf ceph.client.test02.keyring test02.key root@172.31.7.152:/etc/ceph/

7.5.2.2 ceph-fuse挂载
1、通过 ceph-fuse 挂载 ceph
[root@ceph-client2 ~]# mkdir /data
[root@ceph-client2 ~]# ceph-fuse --name client.test02 -m 172.31.7.121:6789,172.31.7.122:6789,172.31.7.123:6789 /data
2、验证

7.5.2.3 配置开机自启动
1、配置/etc/fstab

[root@ceph-client2 ~]# vim /etc/fstab       #由于指定了ceph.conf配置文件的路径,mon的ip地址可以从配置文件获取,因此这里可以不写mon的地址,直接写为none即可
none  /data  fuse.ceph  ceph.id=test02,ceph.conf=/etc/ceph/ceph.conf,\_netdev,defaults 0 0

2、重启服务器并验证
reboot
重启后查看磁盘挂载情况

7.6 ceph mds高可用

  ceph mds(metadata server)作为ceph的访问入口,需要实现高性能即数据备份功能,二MDS支持多MDS结构,甚至还能实现类似于redis cluster的多主从结构,以实现MDS服务的高性能和高可用。假设启动4个MDS进程,设置最大max_mds为2,这时候有2个MDS成为主节点,另外的2个MDS作为备份节点。
参考链接:https://docs.ceph.com/en/latest/cephfs/add-remove-mds/

架构逻辑说明:
  默认情况下,mds主备节点没有绑定关系,当主节点宕机后,备节点从metadata pool加载元数据,然后接管主节点。
  上图显示的MDS结构中,mds1绑定mds3,mds1为主,对应mds为备;mds2绑定mds4,mds2为主,对应mds4为备;备节点会实时从主节点同步元数据,当主节点宕机后,备节点会立即接管,这样一来会大大缩短数据恢复时间,将业务影响降到最低。
  但这样配置存在资源浪费,即两个备节点服务器的资源平时不会被使用,只有主节点故障时才会使用(MDS故障率很低)。为了使资源充分利用,可以直接配置mds为4个主节点,但是如果某个主节点故障,会导致mds节点的变化迁移,需将主节点修复后重新同步元数据。

架构图:

  设置每个主节点的备份 MDS,也就是如果此主节点当前的 MDS 出现问题马上切换到另个MDS。设置备份的方法有很多,常用选项如下:(以下配置如果要添加,需要在mds节点进行添加)

    mds_standby_replay:值为 true 或 false,true 表示开启 replay 模式,这种模式下主 MDS内的数据将实时与从 MDS 同步,如果主节点宕机,从节点可以快速的切换。如果为 false 只有宕机的时候才去同步数据,这样会有一段时间的中断。
    mds_standby_for_name:设置当前 MDS 进程只用于备份指定名称的 MDS(即指定该节点的主节点是谁),配置时指定主的进程名(即主节点服务器的主机名)。
    mds_standby_for_rank:设置当前 MDS 进程只用于备份于哪个 Rank(上级节点),通常为 Rank 编号。另外在存在多个 CephFS 文件系统中,还可以使用 mds_standby_for_fscid 参数来为指定不同的文件系统。
    mds_standby_for_fscid:指定 CephFS 文件系统 ID,需要联合 mds_standby_for_rank 生效,如果设置 mds_standby_for_rank,那么就是用于指定文件系统的指定 Rank,如果没有设置,就是指定文件系统的所有 Rank。

7.6.1 环境准备

在4.3.1章节演示时,已经在mgr1上安装了mds服务

而mds需要两主两备,因此还需要在3个节点上安装mds服务。分别在mg2(172.31.7.125)、mon2(172.31.7.122)、mon(172.31.7.123)3节点安装mds服务

7.6.2 添加mds服务器

将 ceph-mgr2 和 ceph-mon2 和 ceph-mon3 作为 mds 服务角色添加至 ceph 集群,最后实两主两备的 mds 高可用和高性能结构。
1、三台主机分别安装ceph-mds 服务
root@ceph-mgr2:~# apt install ceph-mds
root@ceph-mon2:~# apt install ceph-mds
root@ceph-mon3:~# apt install ceph-mds
2、在deploy节点添加mds服务器
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon3
注意:添加节点时,如果deploy节点上的配置文件存在更新,是最新的配置,mon节点上的配置不是最新的,会添加不成功,可以使用--overwrite-conf配置进行覆盖。
3、验证 mds 服务器当前状态:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph mds stat

4、验证 ceph 集群当前 状态(当前ceph集群mds为一主三从)

7.6.3 获取当前文件系统状态

可以获取mds配置,即max_mds参数,值为1,说明只有一个主

7.6.4 设置处于激活状态 mds 的数量

目前有四个 mds 服务器,但是有一个主三个备,可以优化一下部署架构,设置为为两主两备。
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs set mycephfs max_mds 2
查看mds状态,有两主两备
主节点为:ceph-mgr1、ceph-mon3
备节点为:ceph-mg2、ceph-mon2

注意:此时虽然有两主两备,但是主备之间并未绑定,因此备节点还不会从主节点实时同步元数据

7.6.5 MDS 高可用优化(MDS主备绑定)

  目前的状态是 ceph-mgr1 和 ceph-mon3 分别是 active 状态,ceph-mon2 和 ceph-mgr2分别处于 standby 状态,现在可以将 ceph-mgr2 设置为 ceph-mgr1 的 standby,将ceph-mon2 设置为 ceph-mon3 的 standby,以实现每个主都有一个固定备份角色的结构(主备绑定的场景只适用于两主两备的情况)

则修改配置文件如下:

cephadmin@ceph-deploy:~/ceph-cluster$ vim ceph.conf      #标红部分内容为新增配置
[global]
fsid = 991e359f-f722-487a-a94d-c0344e4852c3
public_network = 172.31.7.0/24
cluster_network = 192.168.7.0/24
mon_initial_members = ceph-mon1
mon_host = 172.31.7.121
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

mon clock drift allowed = 2
mon clock drift warn backoff = 30

[mds.ceph-mgr1]
mds_standby_for_name = ceph-mgr2  #指定mgr1的主为mgr2,当mgr2作为主节点是,其备节点为mgr1
mds_standby_replay = true       #开启实时同步

[mds.ceph-mon3]
mds_standby_for_name = ceph-mon2  #指定mon3的主为mon2,当mon3作为主节点是,其备节点为mon2
mds_standby_replay = true

[mds.ceph-mgr2]
mds_standby_for_name = ceph-mgr1  #指定mgr2的主为mgr1,当mgr1作为主节点是,其备节点为mgr2
mds_standby_replay = true

[mds.ceph-mon2]
mds_standby_for_name = ceph-mon3  #指定mon2的主为mon3,当mon2作为主节点是,其备节点为mon3
mds_standby_replay = true

注意:
  为了防止服务重启或者服务器重启导致主备节点角色(主备角色)发生变化导致服务不可用,在配置文件中将绑定的两个主备节点指定互为主备,这样一来无论两个节点角色如何变化,配置文件都可用。

  目前情况下,mgr1和mon3为主,在配置文件中指定其备节点分别是mgr2和mon2。除此之外,还指定了当mgr1和mon3为备节点时,它的主为mgr2和mon2,这样一来,主备节点绑定以后,无论两个节点的主备角色如何切换,都不会影响mds服务。(这样配置的原因是:mds服务重启以后,绑定的两个节点主备角色可能会发生变化)

7.6.6 分发配置文件并重启 mds 服务

1、在deploy节点分发配置文件保证各 mds 服务重启有效
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon3
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr1
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr2
2、在mds四个节点分别重启mds服务,使配置文件生效
[root@ceph-mon2 ~]# systemctl restart ceph-mds@ceph-mon2.service
[root@ceph-mon3 ~]# systemctl restart ceph-mds@ceph-mon3.service
[root@ceph-mgr2 ~]# systemctl restart ceph-mds@ceph-mgr2.service
[root@ceph-mgr1 ~]# systemctl restart ceph-mds@ceph-mgr1.service

7.6.7 验证集群高可用状态

注意:新版本ceph,主节点mds服务故障后,可能会出现非绑定关闭的节点去接管主的情况
1、查看mds服务主备关系
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status
可以看到mg1和mgr2的主备角色发生了变化,即mgr2为主,mgr1为备,但配置文件中两个节点互为绑定,即便主备角色发生变化,也不影响mds服务

2、查看 active 和 standby 对应关系:

7.7 通过 ganesha 将 cephfs 导出为 NFS

使用场景:老的集群使用的是nfs协议,修改集群配置比较麻烦,将cephfs转换为nfs,但这种方式只适合读写量较小的场景,其读写性能比ceph的读写性能差很多,因此推荐直接挂载cephfs
通过 ganesha 将 cephfs 通过 NFS 协议共享使用。
https://www.server-world.info/en/note?os=Ubuntu_20.04&p=ceph15&f=8
架构图:

假设在mgr1节点172.31.7.124上进行配置,需要在mgr节点准备ceph.conf、用户的认证文件(要求用户对存储池有读写权限,这里以admin用户为例)

7.7.1 服务端配置

在 mgr 1节点172.31.7.124配置,需要提前在mgr1上准备好 ceph.conf 和 ceph.client.admin.keyring 认证文件。
1、在deploy节点把ceph.conf、admin用户的认证文件传给mgr节点
cephadmin@ceph-deploy:~/ceph-cluster$ scp ceph.conf ceph.client.admin.keyring root@172.31.7.124:/etc/ceph/
2、在mgr1节点172.31.7.124上安装nfs-ganesha-ceph包
root@ceph-mgr1:~# apt install nfs-ganesha-ceph
3、修改ganesha的配置文件(将配置文件中原有内容删除,直接把以下内容粘贴进去即可)
vim /etc/ganesha/ganesha.conf

# create new
NFS_CORE_PARAM {
    # disable NLM
    Enable_NLM = false;
    # disable RQUOTA (not suported on CephFS)
    Enable_RQUOTA = false;
    # NFS protocol(NFS协议版本)
    Protocols = 4;        #如果想用NFS3协议版本,可改为3
}
EXPORT_DEFAULTS {
    # default access mode(默认访问模式)
    Access_Type = RW;         #设置为读写权限,客户端具有读写权限
}
EXPORT {
    # uniq ID(导出时的id,可自定义,如果有多个,不能重复)
    Export_Id = 1;
    # mount path of CephFS(cephfs导出的路径)
    Path = "/";           #设置为ceph的根目录
    FSAL {
    name = CEPH;
    # hostname or IP address of this Node(当前节点的主机名或ip地址)
    hostname="172.31.6.104";
    }
    # setting for root Squash(设置权限)
    Squash="No_root_squash";      #,No_root_squash是指不做权限映射,哪个用户写的文件属主就是谁
    # NFSv4 Pseudo path(导出以后的挂载点)
    Pseudo="/magedu";     #把cephfs根目录导出为NFS的/magedu目录
    # allowed security options
    SecType = "sys";
}
LOG {
    # default log level
    Default_Log_Level = WARN;
}

4、重启ganesha服务并设置为开机自启动
root@ceph-mgr1:~# systemctl restart nfs-ganesha
root@ceph-mgr1:~# systemctl enable nfs-ganesha
5、查看ganesha服务是否正常启动
(1)查看服务状态
root@ceph-mgr1:~# systemctl status nfs-ganesha

(2)查看ganesha日志
tail -f /var/log/ganesha/ganesha.log #没有报错,说明启动正常

7.7.2 客户端挂载测试

在客户端服务器172.31.7.155上进行挂载(该节点为ubuntu系统)
1、安装nfs-common包(如果不安装,可能会不识别nfs)
root@ubuntu:~# apt install nfs-common
2、进行挂载
mkdir /data
mount -t nfs 172.31.7.124:/magedu /data #这里的/magedu是指配置文件中指定的nfs挂载路径
3、查看磁盘情况

标签: ceph
最后更新:2024年6月3日

袁党生

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 linux学习. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备18039507号-1