一、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