ceph文件系统
- ceph基础知识
- ceph系统的核心原理和组件
- 1. 架构和组件
- 1.1 Ceph Monitor (MON)
- 1.2 Ceph OSD (Object Storage Daemon)
- 1.3 Ceph MDS (Metadata Server)
- 1.4 Ceph Client
- 2. 数据存储与分布
- 2.1 CRUSH 算法
- 2.2 数据副本与容错
- 3. 数据一致性
- 4. pg和存储池与osd之间的关系
- 4.1 存储池(Pool)
- 4.2 PG(Placement Group)
- 4.3 OSD(Object Storage Daemon)
- 4.4 总结
- 5. 存储类型与服务
- 5.1 对象存储
- 5.2 块存储(RBD)
- 5.3 文件系统(CephFS)
- ceph的安装和使用
- 1、Ceph RBD (Rados Block Device)
- 2. CephFS (Ceph File System)
- 3. Ceph Object Storage (RADOS Gateway, S3/Swift Compatible)
- 4. Ceph NFS (通过 NFS Ganesha 实现)
ceph_1">ceph基础知识
ceph是一个高度可扩展、分布式的存储系统,旨在提供高性能、高可靠性和高可用性的对象存储、块存储和文件系统。
其设计基于无单点故障的理念,并使用分布式算法来保证数据的高可用性和一致性。
ceph_4">ceph系统的核心原理和组件
1. 架构和组件
Ceph 的架构由多个组件构成,主要包括以下几部分:
1.1 Ceph Monitor (MON)
作用:Ceph Monitor 负责存储和维护整个 Ceph 集群的状态信息,特别是集群的成员信息、存储状态和配置数据等。
它确保集群的一致性,并处理选举和状态更新。
功能:
监控集群健康状态。
维护集群地图(Cluster Map),即谁是集群的成员,数据存储在哪里。
处理故障转移,确保集群成员能正确通信。
特点:通常至少有 3 个 MON 节点以确保高可用性(选举机制确保 MON 的一致性和容错性)
1.2 Ceph OSD (Object Storage Daemon)
作用:Ceph OSD 是 Ceph 存储系统的核心组件,它负责存储数据、处理读写请求、数据复制和恢复。
每个 OSD 节点管理一个或多个硬盘驱动器。
功能:
存储实际的数据和副本。
处理对象级别的数据操作(读取、写入、删除等)。
执行数据副本操作,以确保数据的可靠性。
在节点故障时进行数据恢复。
特点:每个 OSD 节点负责自己硬盘上的数据副本,Ceph 集群中通常会有数百甚至数千个 OSD 节点。
1.3 Ceph MDS (Metadata Server)
作用:Ceph MDS 主要用于 Ceph 文件系统(CephFS),它管理文件系统的元数据,如文件和目录的结构、文件权限等。
MDS 节点的职责是提供高效的元数据服务。
功能:
管理文件系统的元数据(如文件路径、目录结构、文件访问权限等)。
处理客户端对文件系统的请求。
提供高性能的文件操作支持,尤其是并发读写操作。
特点:通常 CephFS 中至少有 1 个 MDS 节点,如果需要高可用性,可以部署多个 MDS 节点。
1.4 Ceph Client
作用:Ceph Client 是 Ceph 系统的接口部分,允许外部应用或用户直接与 Ceph 集群进行交互。
Ceph 支持对象存储、块存储和文件系统接口。
功能:
对象存储:通过 RADOS 接口进行操作,应用直接与 OSD 交互。
块存储:通过 RBD(RADOS Block Device)接口提供块存储支持。
文件系统:通过 CephFS 提供标准的文件系统接口(POSIX 兼容)。
特点:Ceph 客户端可以通过多种协议(如 librados、libradosfs、RBD、NFS)与 Ceph 集群通信。
2. 数据存储与分布
Ceph 使用分布式的数据存储和管理方式,结合一致性哈希、CRUSH 算法以及数据副本机制,确保高可靠性和高性能。
2.1 CRUSH 算法
作用:CRUSH(Controlled Replication Under Scalable Hashing)是 Ceph 的核心数据分布算法,负责将对象分配到集群中的 OSD 节点上。
工作原理:
CRUSH 使用一致性哈希算法来决定数据存储的位置,确保数据可以均匀分布在集群中的多个 OSD 节点上。
它能够动态地将数据重新分布到新的 OSD 节点,支持集群扩展、缩减以及故障恢复。
优点:CRUSH 算法避免了集中式的元数据服务器,提高了数据分布和访问的效率,支持集群的水平扩展。
2.2 数据副本与容错
副本机制:Ceph 会将数据副本存储在多个 OSD 节点上,以保证数据的高可用性和可靠性。默认情况下,Ceph 会为每个对象存储 3 个副本(可配置)。
副本策略:当一个 OSD 节点故障时,数据副本会从其他健康的 OSD 节点恢复。副本的数量可以根据用户的需求调整。
自动故障恢复:Ceph 具有自动故障检测和恢复机制,集群能够在发现节点故障时自动重新分布数据,确保数据的完整性和冗余性。
3. 数据一致性
Ceph 在设计时使用了强一致性的原则来保证数据的一致性,尤其是在分布式环境下的多副本情况。
一致性模型:Ceph 采用了基于 Paxos 协议的分布式一致性模型,确保了不同节点间数据一致性。
数据同步:当 Ceph 对象被写入时,它会保证所有副本一致地更新。这是通过 OSD 节点之间的同步机制来实现的。
4. pg和存储池与osd之间的关系
ChatGPT 说:
ChatGPT
在 Ceph 中,PG(Placement Group)、存储池(Pool)和 OSD(Object Storage Daemon)是核心的概念,
它们在 Ceph 集群中密切相关,共同决定了数据的存储和分布。
4.1 存储池(Pool)
定义:存储池是 Ceph 中用于存储数据对象的容器。每个存储池可以定义不同的数据冗余策略(例如副本数、CRUSH 映射规则等)。
池通常用于区分不同类型的数据,例如一个池用于存储对象数据,另一个池用于存储块设备数据。
功能:
管理和组织数据对象。
定义数据的冗余方式,例如副本数、EC(Erasure Coding)等。
配置 CRUSH 映射规则,以决定数据如何在 OSD 之间分布。
与 PG 和 OSD 的关系:
存储池中的数据会被分割成多个 PG。
存储池的副本策略决定了每个 PG 数据副本的数量和分布位置。
4.2 PG(Placement Group)
定义:PG(Placement Group)是 Ceph 中用于数据分布的基本单位。
它是由一组对象(objects)组成的逻辑集合。每个对象都会被映射到一个或多个 PG 上。
PG 的目的是简化 Ceph 集群的数据管理,避免对每个对象单独管理,同时优化数据的分布和副本管理。
功能:
数据分布:数据对象首先被映射到存储池中的一个 PG 上,然后根据 CRUSH 算法决定将该 PG 分布到哪些 OSD 上。
副本存储:每个 PG 会有多个副本,副本的数量由存储池配置的副本数决定。
分布式存储:PG 是 Ceph 用于数据分布的“逻辑桶”,它将数据平均分布到集群中的 OSD 上。
与存储池和 OSD 的关系:
存储池将数据分割成多个 PG,每个 PG 包含一部分存储池的数据。
每个 PG 会根据 CRUSH 算法被分配到一个或多个 OSD 上。OSD 存储数据的副本(例如,默认的 3 个副本)。
PG 是 OSD 上存储的基础单位,它使得 Ceph 能够实现数据的分布式存储和冗余。
4.3 OSD(Object Storage Daemon)
定义:OSD 是 Ceph 中的存储节点,负责实际存储数据并管理数据的读写、复制、恢复等。
每个 OSD 通常对应一个硬盘(或磁盘分区),它会存储一部分 Ceph 集群中的数据。
功能:
存储数据对象,并为客户端提供存取服务。
负责副本管理:将数据副本分布到不同的 OSD 上,以保证数据的冗余和可用性。
进行数据恢复:当 OSD 节点发生故障时,OSD 会自动从其他 OSD 节点恢复缺失的数据副本。
与 MON(监视器)协调,确保集群的一致性。
与存储池和 PG 的关系:
OSD 是存储池和 PG 的数据实际存储位置。存储池中的数据会根据 CRUSH 映射分配到多个 OSD 上。
每个 OSD 存储着多个 PG,PG 是 OSD 上数据存储的最小单元。
OSD 上存储的副本数据由 PG 管理,PG 通过 CRUSH 算法来确定数据副本的存放位置。
4.4 总结
-
存储池(Pool)
存储池是 Ceph 中管理数据的基本单位,用于组织和配置数据的冗余方式(副本数、CRUSH 映射等)。 -
Placement Group(PG)
存储池中的数据被划分为多个 PG,每个 PG 是数据分布的最小单位。PG 负责决定数据对象的存储位置,
并通过 CRUSH 算法将数据分布到 OSD 上。 -
Object Storage Daemon(OSD)
OSD 是存储数据的实际节点,PG 中的数据会被分布到 OSD 上,存储在 OSD 上的副本使得 Ceph 能够提供容错和高可用性。
OSD 负责存储数据并提供冗余数据副本,确保集群中的数据可靠。
数据流转示例:
客户端请求写入数据。
数据根据存储池的设置被分割成多个对象。
每个对象被映射到一个或多个 PG。
每个 PG 会根据 CRUSH 算法决定存储在哪些 OSD 上。
数据副本在不同的 OSD 上分布和存储,确保数据冗余和容错。
如果 OSD 故障,Ceph 会自动从其他副本恢复数据。
在 Ceph 中,PG(Placement Group)的数量与集群的 OSD 数量密切相关,设置合适的 PG 数量有助于提高集群的性能和可靠性。
你目前有 3 个 OSD,以下是如何设置 PG 数量的建议:
PG 的数量计算公式:
Ceph 推荐使用以下公式来计算每个存储池的 PG 数量:
PG数量 = (OSD数量 × 100) / 存储池副本数
OSD 数量:你集群中的 OSD 数量,在你的情况下是 3。
副本数:存储池的副本数,通常默认为 3(即每个对象有 3 个副本)。
PG的数量计算:
假设你的存储池副本数是 3,则 PG 数量可以计算为:
PG 数量 = (3 × 100) / 3 = 100
所以,按照这个公式,你的存储池应该有 100 个 PG。
关于 PG 数量的注意事项:
PG 数量应该是 2 的幂:为了让 Ceph 集群更加高效和稳定,建议 PG 数量为 2 的幂次方(例如 128、256、512 等)。
这有助于数据分布和负载均衡。
由于你目前有 3 个 OSD,设置 100 个 PG 其实是一个合理的选择,但从性能和最佳实践的角度来看,
建议将 PG 数量设为 128 或 256。这样即便你的集群规模扩大,PG 的数量也能较好地支持扩展。
PG 数量和 OSD 数量的关系:
如果你只有 3 个 OSD,通常不建议设置过多的 PG。根据 Ceph 的官方文档和实践,
PG 数量通常是 OSD 数量的 100 倍左右。
当然,PG 数量也取决于存储池的用途和负载。
对于不同的存储池(例如,RBD、CephFS、对象存储等),你可能会有不同的 PG 设置。
5. 存储类型与服务
Ceph 提供多种不同的存储服务,适应不同的应用场景:
5.1 对象存储
Ceph 通过 RADOS(Reliable Autonomic Distributed Object Store)提供对象存储服务,
支持基于 HTTP(S) 协议的 RESTful API(例如与 S3 兼容的接口)。
数据以对象的形式存储,适用于大量非结构化数据。
5.2 块存储(RBD)
Ceph 提供块存储(RADOS Block Device,RBD)服务,
允许将 Ceph 存储池映射为虚拟块设备(类似于传统的磁盘分区)。
适用于虚拟化环境(如与 KVM、QEMU、OpenStack 集成)中的存储需求。
5.3 文件系统(CephFS)
Ceph 还支持分布式文件系统 CephFS,提供类似 POSIX 文件系统的接口,支持多客户端并发访问。
CephFS 使用 Ceph OSD 和 MDS 节点进行元数据管理和文件存储,适用于需要文件共享和文件级别访问的应用。
ceph_188">ceph的安装和使用
集群
test1 192.168.246.9 mon、osd
test2 192.168.246.10 mon、osd
test3 192.168.246.11 mon、osd
test4 192.168.246.12 客户端
1、主机名映射
cat >> /etc/hosts <<EOF
192.168.246.9 test1
192.168.246.10 test2
192.168.246.11 test3
192.168.246.12 test4
EOF
2、安装docker,客户端除外
apt -y install docker.io
#ceph17---2024.17.2.4新版 依赖于docker、python3、Ivm2
#python3与lvm2,ubuntu 22.04自带
docker -v
3、安装cephadm并初始化单节点集群(主机test1上执行)
cd /optwget https://mirrors.aliyun.com/ceph/debian-17.2.4/pool/main/c/ceph/cephadm_17.2.4-1focal_amd64.deb#解压
dpkg -i cephadm_17.2.4-1focal_amd64.deb
4、开启集群的初始化
cephadm bootstrap --mon-ip 192.168.246.9 --cluster-network 192.168.246.0/24 --allow-fqdn-hostname
-
cephadm bootstrap
这个命令用于启动 Ceph 集群的初始化过程。cephadm 是 Ceph 由客户端工具提供的一种部署和管理 Ceph 集群的工具。
bootstrap 表示通过 Cephadm 启动集群的初始配置。 -
--mon-ip 192.168.246.9
该参数指定了 Ceph Monitor (Mon) 进程的 IP 地址。Monitor 是 Ceph 集群中管理集群状态和健康状况的关键组件。
–mon-ip 用来告诉 Ceph 启动 Monitor 时使用指定的 IP 地址。在这个例子中,192.168.233.10 是 Monitor 节点的 IP 地址。 -
--cluster-network 192.168.246.0/24
该参数指定了集群网络的地址范围。集群网络用于 Ceph 内部节点之间的通信(如 OSD、Monitor 和 MDS 等组件之间的通信)。
通常这个网络与客户端网络是分开的,目的是提高性能和安全性。通过 --cluster-network 参数,
指定了集群网络的子网地址,例如 192.168.246.0/24。 -
--allow-fqdn-hostname
这个参数允许 Cephadm 在主机名中使用 FQDN(Fully Qualified Domain Name,完全合格的域名)。
通常,Ceph 集群会使用主机的 hostname 来标识不同的节点。如果不设置这个参数,Cephadm 可能会要求节点使用 IP 地址而不是域名。
如果设置了这个参数,则可以使用节点的完全合格域名来识别和标识节点。
可视化界面的账号和密码:
Ceph Dashboard is now available at:URL: https://test1:8443/User: adminPassword: 4cjyvsp3cs
浏览器访问192.168.246.9:8443
5、集群和客户端之间免密登录
#test1
ssh-keygen -t rsassh-copy-id root@192.168.246.9ssh-copy-id 192.168.246.10ssh-copy-id 192.168.246.11ssh-copy-id -f -i /etc/ceph/ceph.pub test2ssh-copy-id -f -i /etc/ceph/ceph.pub test3
6、安装ceph的客户端和添加osd
apt -y install ceph-common
#所有节点,包括客户端#test1添加osd
ceph orch host add test2
ceph orch host add test3
ceph orch ls
该命令会列出 Ceph Orchestrator 管理的所有主机信息,包括它们的状态、角色以及其他相关信息
#这里mon 3/5 2m ago 18m count:5 显示计划部署5个mon,但是只有3个,所以我们调整一下
ceph orch apply mon 3
#修改mon的数量3
Scheduled mon update...
ceph orch ls
#指定mon的节点
ceph orch apply mon "u4,u5,u6"
#指定的是主机名
osd做为teph集群的底层的硬盘必须满足两个条件
1、容量必须要大于5G
2、不能对硬盘做任何分区和文件系统
#所有主机添加硬盘#刷新硬盘接口,这样就不用重启了
for host in /sys/class/scsi_host/host*/scan; doecho "- - -" | sudo tee $host
done
#添加osd硬盘:
ceph orch apply osd --all-available-devicesceph orch device lsceph orch daemon add osd test1:/dev/sdb
ceph orch daemon add osd test2:/dev/sdb
ceph orch daemon add osd test3:/dev/sdbceph osd tree #查看osd的状态
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.05846 root default
-3 0.01949 host test1 0 hdd 0.01949 osd.0 up 1.00000 1.00000
-5 0.01949 host test2 1 hdd 0.01949 osd.1 up 1.00000 1.00000
-7 0.01949 host test3 2 hdd 0.01949 osd.2 up 1.00000 1.00000#如何删除对应节点的磁盘
#其次下线对应id磁盘,并停止对应id磁盘的osd进程
ceph osd stop 2
ceph osd out 2
#然后将其从crush映射、auth认证密钥中删除
ceph osd crush rm osd.2
ceph auth del osd.2
#最后从osd中删除
ceph osd rm 2#重新添加上方删除的硬盘
lsblk
dmsetup remove ceph--b82bcf74--52b9--4d61--9893--12b10a801258-osd--block--999ab762--9b86--4881--ad34--63b8b48c16a7
wipefs -af /dev/sdb
ceph orch device zap test1 /dev/sdb --force
ceph orch device ls
ceph orch daemon add osd test1:/dev/sdbceph status
1、Ceph RBD (Rados Block Device)
常用场景:
虚拟化环境:RBD 被广泛用于虚拟化平台(如 OpenStack、KVM、Proxmox)中的虚拟机磁盘存储。
数据库:需要高性能、低延迟的块存储。
高性能应用:对于需要快速随机访问的场景,RBD 是一个不错的选择。
优点:
支持动态扩展,适用于需要高 IOPS(每秒输入输出操作)的应用。
支持快照和克隆功能。
与虚拟化平台高度集成。
缺点:
不如 CephFS 那样直接支持文件系统层级的操作。
使用频率: 在云计算和虚拟化环境中非常常见,尤其是在需要大规模存储虚拟机磁盘或高性能数据存储的场景。
2. CephFS (Ceph File System)
常用场景:
分布式文件存储:CephFS 是一种 POSIX 兼容的分布式文件系统,适用于需要共享文件访问的场景。
大数据存储:适用于大规模数据分析、科研计算等领域。
文件服务器:企业文件存储和共享,尤其是需要高可用性的文件系统。
优点:
POSIX 兼容,易于与现有文件系统(如 NFS、SMB)集成。
支持高可用性和高扩展性。
支持跨节点的数据存储,提供文件级冗余。
缺点:
配置和管理比 RBD 更复杂,尤其在大型集群中。
使用频率: 在需要大规模分布式文件系统的环境中比较常见,尤其是需要共享文件、POSIX 操作、多个客户端并发访问的场景。
3. Ceph Object Storage (RADOS Gateway, S3/Swift Compatible)
常用场景:
云存储:支持与 Amazon S3 和 OpenStack Swift 兼容的对象存储服务,适用于云计算平台的存储后端。
备份和归档:大规模备份系统,适合存储非结构化数据(如图片、视频、文档等)。
大数据存储:适用于需要存储海量数据的场景,如日志管理、大数据分析。
优点:
高可扩展性,适合处理 PB 级别的数据。
支持 S3 和 Swift 协议,可以直接替代传统的对象存储服务。
多租户支持和生命周期管理。
缺点:
对于一些需要块存储(如虚拟化)的场景并不合适。
使用频率: 在需要大规模对象存储,尤其是云存储和备份、归档系统中非常常见。也是大多数使用 Ceph 提供云存储服务的场景。
4. Ceph NFS (通过 NFS Ganesha 实现)
常用场景:
与现有 NFS 环境集成:将 CephFS 作为后端存储,通过 NFS 协议与现有的 NFS 客户端集成。
传统企业环境:很多传统企业仍然依赖 NFS 存储,Ceph NFS 使它们能够利用 Ceph 提供的高可用性和扩展性。
优点:
可以轻松集成到现有的 NFS 基础设施中。
支持多种 NFS 版本(如 NFSv3 和 NFSv4)。
缺点:
需要额外配置和管理 NFS Ganesha 服务。
使用频率: 在传统的 NFS 环境中使用较多,尤其是那些已有 NFS 存储需求的企业或场景。
-
总结
最常用的存储方式
RBD (Rados Block Device):在虚拟化和数据库存储中非常常见,尤其在云平台(如 OpenStack)和大规模虚拟化环境中使用广泛。
CephFS:在大数据和文件存储系统中非常流行,尤其是需要 POSIX 兼容、共享文件访问的场景。
RADOS Gateway:云存储环境中较常见,尤其在对象存储服务(如 S3 兼容存储)中使用广泛。 -
最适合使用场景
虚拟化存储:RBD。
共享文件存储:CephFS。
对象存储(云存储):RADOS Gateway。
因此,RBD 和 CephFS 是最常见的使用方式 -
RBD的存储方式:
创建池
bash
ceph osd pool create rbd1 128 128
rbd1:是你要创建的池的名称。
128:指定池的 pg_num 和 pgp_num,通常可以使用一个较小的值(例如 128),但在生产环境中建议根据 Ceph 集群的规模调整。检查池是否创建成功:
ceph osd pool ls创建 RBD 镜像
现在池已经存在,RBD 镜像:rbd create myrdb1 --size 2G --pool rbd1#这是会提示wraning,给存储池配置类型
root@test1:~/.ssh# ceph osd pool application enable rbd1 rbd
enabled application 'rbd' on pool 'rbd1'
Ceph RBD (RADOS Block Device) 中,镜像 是 Ceph 用来管理块存储设备(例如硬盘或虚拟机磁盘)的一个逻辑单元。
可以将它理解为一个类似虚拟磁盘的概念,它是一个由多个 对象 组成的逻辑块设备。
镜像是操作和管理 RBD 存储的基础,所有的存储操作(如读写、快照、克隆等)都是针对镜像进行的。
镜像的定义与作用:
镜像是 RBD 存储的基本单位:
每个 RBD 镜像在 Ceph 集群中对应一组分布式对象(OSD 存储对象),Ceph 会将这些对象映射成一个逻辑的、可扩展的块设备。
RBD 镜像通过 Ceph 提供的 对象存储接口(如 Ceph OSD)来持久化数据。
镜像是逻辑设备:
镜像提供了一个虚拟的块设备接口,可以挂载到虚拟机、物理机器或其他应用程序中,就像一个普通的硬盘一样。
用户可以将镜像挂载为一个文件系统,或将其作为数据库等应用的存储设备。
镜像操作:
创建镜像:当你在 Ceph 集群中创建一个 RBD 存储时,你实际上是在创建一个镜像。
映射镜像:你可以将镜像映射到本地系统,这样就可以把它当作一个本地磁盘来使用。
快照和克隆:Ceph 允许你为镜像创建快照(保存镜像的某一时刻状态),并基于该快照创建新的克隆镜像。
镜像的快照和克隆是 RBD 中非常常用的功能,特别是在虚拟化和容器化场景中。
镜像的存储结构:
每个镜像的底层是由多个 对象 组成的,这些对象分布在多个 Ceph OSD 上,确保数据的冗余和高可用性。
镜像本身是虚拟的,Ceph 集群会根据需要将数据块分布在多个物理硬盘上
创建镜像:
root@test1:~/.ssh# rbd create myrdb --size 2G --pool rbd1
#磁盘的单位要大写
镜像的大小即是你分配给该 RBD 镜像的物理存储空间。
这个空间由 Ceph 集群的多个对象(通常存储在不同的 OSD 上)来组成。
在客户端操作:
apt -y install ceph ceph-common ceph-fuseroot@test4:~# rbd map myrdb --pool rbd1 #映射#传送配置文件和秘钥文件
root@test1:~# scp /etc/ceph/ceph.conf test4:/etc/ceph/
ceph.conf 100% 231 314.6KB/s 00:00
root@test1:~# scp /etc/ceph/ceph.client.admin.keyring test4:/etc/ceph/
ceph.client.admin.keyring root@test4:~# mkfs.ext4 /dev/rbd0 #创建文件系统root@test4:~# mount /dev/rbd0 /data/ #挂载
root@test4:~# df -hT
文件系统 类型 大小 已用 可用 已用% 挂载点
tmpfs tmpfs 388M 2.0M 386M 1% /run
/dev/mapper/vgubuntu-root ext4 55G 8.7G 44G 17% /
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/sda2 vfat 512M 6.1M 506M 2% /boot/efi
tmpfs tmpfs 388M 104K 387M 1% /run/user/1000
/dev/sr0 iso9660 4.7G 4.7G 0 100% /media/dn/Ubuntu 22.04.4 LTS amd64
tmpfs tmpfs 388M 60K 388M 1% /run/user/0
/dev/rbd0 ext4 2.0G 24K 1.8G 1% /datacephfs的存储方式:确保已创建 cephfs 所需的池
创建 CephFS 需要两个池:数据池和元数据池在test1:
root@test1:~# ceph fs volume create cephfsroot@test1:~# ceph fs volume ls
[{"name": "cephfs"}
]root@u4:/etc/ceph# ceph fs status cephfs
cephfs - 0 clients
======
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS 0 active cephfs.u6.rainys Reqs: 0 /s 10 13 12 0 POOL TYPE USED AVAIL
cephfs.cephfs.meta metadata 96.0k 18.6G
cephfs.cephfs.data data 0 18.6G STANDBY MDS
cephfs.u4.avfjku
MDS version: ceph version 17.2.8 (f817ceb7f187defb1d021d6328fa833eb8e943b3) quincy (stable)#传送配置文件和秘钥文件
root@test1:~# scp /etc/ceph/ceph.conf test4:/etc/ceph/
ceph.conf 100% 231 314.6KB/s 00:00
root@test1:~# scp /etc/ceph/ceph.client.admin.keyring test4:/etc/ceph/
ceph.client.admin.keyring 100% 151 76.0KB/s 00:00 #创建挂载点:
root@test4:/etc/ceph# mkdir /fs
root@test4:/etc/ceph# ceph-fuse /fs/#生成加密的密钥对:
root@test4:/etc/ceph# ceph auth get-key client.admin
AQB6n29nvtWdMRAALOp3dVNVP2VzUnJ59TZYyQ==#挂载使用:
root@test4:/etc/ceph# mount -t ceph 192.168.246.12:6789:/ /fs -o name=admin,secret=AQB6n29nvtWdMRAALOp3dVNVP2VzUnJ59TZYyQ==#启用池删除功能
设置 mon_allow_pool_delete 为 true:
你需要在集群的监视器(MON)中设置 mon_allow_pool_delete 配置项为 true,才能允许池删除。
ceph config set mon mon_allow_pool_delete true#删除池:
ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-itceph的nfs方式:
创建一个nfs服务
ceph orch apply nfs nfs-share创建一个池
ceph osd pool create nfs-poolsroot@test1:~# ceph osd lspools
1 .mgr
3 cephfs.cephfs.meta
4 cephfs.cephfs.data
5 .nfs
6 nfs-pools创建一个高可用nfs分别运行在test2,test3上
ceph orch apply nfs my-nfs nfs-pools --placement="test2,test3"#在ui界面创建:
编辑NFS,
CephFS 路径 根目录即可
伪: /test1#回到客户端:
mount -t ceph 192.168.246.9:6789,192.168.246.10:6789,192.168.246.11:6789:/ /mnt -o name=admin,secret=AQBKPXZnoLy6CxAACYQtZqAOEnKn9SH3QDhAQQ==root@test4:/mnt# df -hT
文件系统 类型 大小 已用 可用 已用% 挂载点
tmpfs tmpfs 388M 2.0M 386M 1% /run
/dev/mapper/vgubuntu-root ext4 55G 8.7G 44G 17% /
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/sda2 vfat 512M 6.1M 506M 2% /boot/efi
tmpfs tmpfs 388M 104K 387M 1% /run/user/1000
/dev/sr0 iso9660 4.7G 4.7G 0 100% /media/dn/Ubuntu 22.04.4 LTS amd64
tmpfs tmpfs 388M 60K 388M 1% /run/user/0
/dev/rbd0 ext4 2.0G 101M 1.7G 6% /data
192.168.233.10:6789:/ ceph 19G 300M 19G 2% /fs
192.168.233.10:6789,192.168.233.20:6789,192.168.233.30:6789:/ ceph 19G 300M 19G 2% /mnt
-
NFS 挂载目录与 CephFS 数据池:
即使数据是通过 NFS 挂载访问的,实际的存储依然是在 CephFS 的数据池(cephfs.cephfs.data)中。
当你将文件保存在 NFS 挂载目录下时,文件实际上是存储在 CephFS 的数据池中,而不仅仅是普通的 NFS 存储。
这就是为什么你看到的数据是 cephfs.cephfs.data,而不是一个纯粹的 NFS 存储池(比如 .nfs)。
Ceph-NFS 网关 的作用是将 NFS 请求映射到 CephFS 上的相应数据,因此,尽管你通过 NFS 访问文件,
但它们依然在 CephFS 的池中存储。 -
CephFS 数据池:CephFS 是 Ceph 提供的一个分布式文件系统,其中数据是存储在专门的池中(例如 cephfs.cephfs.data)。
这是 CephFS 需要用于存储实际文件数据的地方。 -
NFS 存储池:当使用 NFS 网关(如 ceph-nfs)将 CephFS 通过 NFS 协议暴露给客户端时,
数据仍然是存储在 CephFS 的数据池(cephfs.cephfs.data)中,
而不是直接存储在 NFS 存储池(如 nfs-pools)中。
ceph osd pool get rbd1 size #查看副本数ceph df #查看存储的使用情况