一文了解Ceph原理以及常见ceph指令

一、Ceph介绍

什么是分布式存储?

与集中式存储相反,分布式存储通常采用存储单元集群的形式。并且具有在集群节点之间进行数据同步协调的机制。其目的是为了通过服务器解决大规模,高并发情况下的Web访问问题。

Ceph是一个统一的、分布式的存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。涉及初衷是成为一个可避免单点故障的分布式文件系统,提供较好的性能、可靠性和可扩展性。通过网络将数据分散存储在多台独立的设备上。
特性:

统一性:支持多种存储的应用形式,如块存储、文件存储、对象存储。

**1、块存储:**存储设备共享给客户端的是一块裸盘,那么该存储设备提供的就是块存储
2、文件存储 :为了解决数据共享,并且保持一致,存储设备中分出一块空间,然后制作文件系统,然后在存储设备中完成挂载,再共享给客户端。

典型代表:FTP 、NFS 为了克服块存储无法共享的问题,所以有了文件存储,在服务器上架设FTP与NFS服务就是文件存储。
3、对象存储 :为了解决多服务器之间共享数据,并且保证一致,没有文件系统的概念,数据的存储分为两部分元数据+内容,客户端通过url地址的方式提交元数据与内容
分布式:

传统集群架构,集群规模增大,mysql数据库的集群规模必然也随之增大,这完全就是集中式的思想带来的弊端。

ceph内部集群的数据共享完全是通过算法算出来,根本不需要数据库这个组件。

ceph缺点:耗费CPU
任何集群追求的三大特点:

1、性能

2、可靠性:没有单点故障

3、可扩展性,未来可以理论上无限扩展集群规模

二、Ceph服务架构

一个Ceph存储集群至少需要一个 Ceph Monitor(监视器)、Ceph Manager(管理器)和 Ceph OSD(对象存储守护进程)

Monitors

Ceph Monitor (ceph-mon) 通过维护包括监视器表(MonMap)、管理表(MGRMap)、OSD表(OSDMap)等组件状态表的保障集群正常运行。ceph-osd 相互之间协调工作时,需要从 ceph-mon 中获取这些表的信息。ceph-mon 还负责管理 ceph-osd 和客户端之间的身份验证。一个Ceph集群为了保证冗余和高可用性通常需要至少三个监视器,它们之间通过Paxos同步数据。
Managers

Ceph Manager(ceph-mgr)负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标、集群报警和系统负载等。ceph-mon 和 ceph-mgr 协调配合共同维持集群稳定。高可用性通常需要至少两个管理器。
OSDS

Ceph OSD(ceph-osd)全称是Object Storage Device,负责包括处理数据复制、恢复、重新平衡在内的实际数据存储工作,并且一个 OSD 检查可以通过检查其他 OSD 的心跳的方式将其他 OSD 的异常状态上报给 MON。一个Ceph集群一般都有很多个OSD。

注:总结起来,MON是Ceph集群的监视器,MDS是CephFS元数据服务器,OSD是实际存储数据的守护进程,而 PG 是用于对象的分布和复制的逻辑分组。这些组件共同协作,以提供高可靠性、高性能和可扩展性的存储服务。

Ceph逻辑组件
Object

Ceph 最底层的存储单元是 Object 对象,每个 Object 包含元数据和原始数据。

PG

PG 全称 Placement Grouops,是一个逻辑的概念,一个 PG 包含多个 OSD。引入 PG 这一层其实是为了更好的分配数据和定位数据。

CRUSH

CRUSH 是 Ceph 使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

文件存储

不管是来自 Ceph 块设备、 Ceph 对象存储、 Ceph 文件系统、还是基于 librados 的自定义存储,将数据存储到 Ceph 集群上的步骤大致相同,大概可以归纳为Ceph客户端将数据存放在存储对象中,存储对象经过Ceph集群处理被发送给了 OSD ,由 OSD 将对象持久化到磁盘上。

三、Ceph常用命令

1、启动一个ceph进程

2、查看机器的监控状态【查看集群健康状态细节】

python 复制代码
ceph health 【detail】

3、查看ceph的实时运行状态(常用)

python 复制代码
ceph -w

4、检查ceph状态信息

python 复制代码
ceph -s

5、查看ceph存储空间

python 复制代码
ceph df

6、查看ceph集群中的认证用户及相关的key

python 复制代码
ceph auth list

7、查看ceph log日志所在的目录

python 复制代码
ceph-conf --name mon.node1 --show-config-value log_file

2、mon

MON(Monitor):MON是Ceph集群的监视器,负责维护Ceph集群的状态和元数据信息。它们定期互相通信以确保集群中各个组件的正确运行。MON还负责存储Ceph Map,它是存储集群的全局拓扑和配置信息,用于帮助客户端和其他组件了解数据在集群中的分布情况。

1、查看mon的状态信息

python 复制代码
ceph mon stat

输出信息:

e5: 5 mons at {ceph01=[v2:10.30.129.85:3300/0,v1:10.30.129.85:6789/0],ceph02=[v2:10.30.129.86:3300/0,v1:10.30.129.86:6789/0],ceph03=[v2:10.30.129.87:3300/0,v1:10.30.129.87:6789/0],ceph04=[v2:10.30.129.83:3300/0,v1:10.30.129.83:6789/0],ceph05=[v2:10.30.129.84:3300/0,v1:10.30.129.84:6789/0]}, election epoch 26, leader 0 ceph01, quorum 0,1,2,3,4 ceph01,ceph02,ceph03,ceph04,ceph05

2、查看mon的选举状态

python 复制代码
ceph quorum_status

3、查看mon的映射信息

python 复制代码
ceph mon dump

4、删除一个mon节点

python 复制代码
ceph mon remove node1

5、获得一个正在运行的mon map,为二进制mon.bin

python 复制代码
ceph mon getmap -o mon.bin

3、mds

MDS(Metadata Server):MDS是Ceph文件系统(CephFS)的元数据服务器。它负责存储并维护CephFS中文件系统的目录和文件元数据信息。MDS使得多个客户端可以同时访问CephFS,并提供了高度可扩展的文件系统服务。

1、查看msd状态

python 复制代码
ceph mds stat

输出结果:

cephfs-1/1/1 up  {0=openstack1=up:active}

2、查看msd的映射信息

python 复制代码
ceph mds dump

3、删除一个mds节点

python 复制代码
ceph  mds rm 0 mds.node1

4、osd

OSD(Object Storage Daemon):OSD是Ceph存储集群的核心组件,也是实际存储数据的地方。每个OSD是一个存储节点,由一个守护进程管理。它负责接收、存储和处理RADOS对象存储的实际数据。OSD还负责数据的复制、回复、恢复和平衡等功能,以确保数据的高可用性和可靠性。

1、查看ceph osd运行状态

python 复制代码
ceph osd stat

2、查看osd映射信息

python 复制代码
ceph osd dump

3、查看osd的目录树

python 复制代码
ceph osd tree

4、查看osd各硬盘使用率

python 复制代码
ceph osd df

5、查看osd延时

python 复制代码
ceph osd perf

5、PG组

PG(Placement Group):PG是一组对象的逻辑分组,用于将数据在OSD节点之间进行分布和复制。PG是Ceph中数据存储和复制的基本单元。PG 使用 CRUSH 算法决定对象在存储集群中的位置和复制策略。

PG所表达的是对象的分布和副本放置规则,通过将对象分布在多个OSD节点上,确保数据的可靠性和性能。

1、查看pg组的映射信息

python 复制代码
ceph pg dump

2、查看一个PG的map

python 复制代码
ceph pg map 2.c

6、pool

1、查看ceph集群中的pool数量

python 复制代码
ceph osd lspools

2、在ceph集群中创建一个pool

python 复制代码
ceph osd pool create jiayuan 100            #这里的100指的是PG组

3、为一个ceph pool配置配额

python 复制代码
ceph osd pool set-quota data max_objects 10000

4、在集群中删除一个pool

python 复制代码
ceph osd pool delete testpool testpool  --yes-i-really-really-mean-it  #集群名字需要重复两次

备注:删除pool需要在配置文件ceph.conf中 [mon]添加mon allow pool delete = true并重启mon服务, 如:

python 复制代码
systemctl restart ceph-mon.target

5、显示集群中pool的详细信息

python 复制代码
rados df

8、查看data池的pg数量

python 复制代码
ceph osd pool get volumes pg_num
相关推荐
weixin_453965001 小时前
[单master节点k8s部署]31.ceph分布式存储(二)
分布式·ceph·kubernetes
人生匆匆4 天前
bluefs _flush_range allocated: osd用空间但是显示ceph_bluefs_db_used_bytes is 100%
数据库·ceph·servlet
听说唐僧不吃肉4 天前
Ceph篇之OSD磁盘的删除与添加
ceph
放手啊4 天前
CEPH的写入流程
ceph
liuy52775 天前
ceph rgw 桶分片之reshard
前端·ceph
大隐隐于野5 天前
Ceph RocksDB 深度调优
ceph·rocksdb
lldhsds6 天前
Kubernetes云原生存储解决方案之 Rook Ceph实践探究
ceph·云原生·kubernetes
it技术分享just_free8 天前
kubernetes K8S 挂载分布式存储 ceph
运维·分布式·ceph·云原生·容器·kubernetes·k8s
ZZDICT15 天前
Ceph 基本架构(一)
ceph
行走的山峰17 天前
ceph之osd扩容和缩容
ceph