(1)Ceph是一种开源的分布式存储系统,2006年出现,是私有云事实上的标准-OpenStack的默认存储后端。用于在整个集群中存储海量数据。
(2)Ceph是一种软件定义存储,可以运行在几乎所有主流的Linux发行版(比如CentOS和Ubuntu)和其它类UNIX操作系统(典型如FreeBSD)。
(3)Ceph的分布式基因使其可以轻易管理成百上千个节点、PB级及以上存储容量的大规模集群,同时基于计算的扁平寻址设计使得Ceph客户端可以直接和服务端的任意节点通信,从而避免因为存在访问热点而导致性能瓶颈。
(4)Ceph是一个统一存储系统,即支持传统的块、文件存储协议,例如SAN和NAS;也支持对象存储协议,例如S3和Swift。适合于构建可扩展、高性能和可靠的存储解决方案。
(1)可伸缩性:Ceph支持可伸缩的存储架构,能够处理海量数据。通过添加新的存储节点,可以轻松扩展存储容量和性能,以满足不断增长的存储需求。
(2)高性能:Ceph的设计优化了数据访问和传输方式,提供出色的性能。它具有并行访问和分布式数据存储的能力,可以实现高吞吐量和低延迟的数据传输。
(3)高可靠性:Ceph采用分布式冗余数据存储的方式,数据被分散存储在多个节点上,确保数据的可靠性和容灾性。如果一个节点出现故障,数据可以自动恢复和重建。
(4)自动化管理:Ceph具有自我修复和故障转移的功能,当节点出现故障或数据损坏时可以自动检测和修复,减少了管理员的工作负担。
(5)多种数据存储方式:Ceph提供了对象存储、块存储和文件系统等多种数据存储方式,可以满足不同应用场景的存储需求。
(6)灵活性:Ceph可以运行在标准硬件上,并且不依赖于特定的硬件设备或供应商。这使得它可以根据实际需求灵活地部署和扩展,同时降低了成本。
(7)社区支持和开源:作为开源项目,Ceph有一个活跃的社区,提供技术支持和持续的改进。用户可以从社区中获得帮助、交流经验,并参与贡献。
总:Ceph具有高可伸缩性、高性能、高可靠性和灵活性等一系列优点。它适用于大规模和分布式存储的需求,可以提供可靠的、高性能的存储解决方案。
(1)复杂性: Ceph是一个复杂的系统,它由多个组件和子系统组成,需要专业知识和经验来进行部署、配置和管理。
(2)性能调优:虽然Ceph提供了高性能和可伸缩性,但需要进行适当的性能调优和配置才能发挥最佳性能。
(3)网络带宽: 由于Ceph是一个基于网络的分布式存储解决方案,因此它对网络带宽的需求较大。在较低带宽的环境中可能会影响性能表现。
(4)维护成本: 在部署和维护Ceph集群时,需要投入一定的人力资源和时间来监控、维护和处理故障。
(5)学习曲线: 由于Ceph的复杂性,学习曲线较陡峭。新用户可能需要花费时间来熟悉Ceph的架构和工作原理。
(6)数据恢复速度: 在节点故障或数据损坏时,Ceph需要执行数据恢复操作。这可能需要一定的时间和资源,并且会对系统性能产生一定影响。
(7)对现有基础架构的依赖: 部署Ceph可能需要对现有基础架构进行调整和修改,以满足Ceph的要求。
(1)RADOS (Reliable Autonomic Distributed Object Store):RADOS是Ceph的对象存储层,负责存储和管理数据。它由多个存储节点组成,每个节点上运行Ceph OSD(Object Storage Daemon)进程,负责将数据分割成对象,并在集群中分布和复制这些对象。
(2)**Ceph MON (Monitor):**Ceph监视器维护了Ceph集群的状态和映射信息。它们使用Paxos算法协调集群中的各个节点,并提供元数据和配置信息,以确保集群中各个组件的正确运行。
(3)**Ceph MDS (Metadata Server):**Ceph元数据服务器负责管理Ceph文件系统(CephFS)的文件和目录的元数据。它们提供命名空间管理和访问控制,使得分布式文件系统能够支持高效的文件操作。
(4)**Ceph Radosgw (RADOS Gateway):**Ceph Radosgw是一个提供对象存储服务的网关,它可以通过RESTful API兼容S3和Swift协议,为应用程序和用户提供访问Ceph集群的接口。它可以与RADOS一起工作,将对象存储数据暴露给外部应用程序和用户。
(5)**CRUSH (Controlled Replication Under Scalable Hashing):**CRUSH是Ceph使用的一种分布式数据容错算法。CRUSH负责计算和跟踪对象在存储集群中的位置,并以分布式的方式决定数据的存储和副本位置,确保数据的高可用性和容错性。
Ceph的架构设计使其能够自动恢复故障、动态调整和负载均衡数据,同时提供高性能和可伸缩性。这使得Ceph适用于各种存储需求,包括分布式存储、块存储和对象存储等。
(1)Monitor
一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。
(2)OSD
OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
(3)MDS
MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。
(4)Object
Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
(5)PG
PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
(6)RADOS
RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
(7)Libradio
Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
(8)CRUSH
CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
(9)RBD
RBD全称RADOS block device,是Ceph对外提供的块设备服务。
(10)RGW
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
(11)CephFS
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。
在Ceph中,存储过程涉及多个关键组件和步骤,包括数据的划分、分布、复制和访问。以下是Ceph的存储过程的主要步骤:
(1)**数据划分和编码:**首先,Ceph将待存储的数据划分成可配置大小的对象。每个对象都会经过数据编码,以便在分布式环境中提供冗余和容错能力。
(2)**PG映射和Placement Group (PG)选择:**Ceph使用CRUSH算法将PG映射到具体的OSD(Object Storage Daemon)。PG是一组对象的逻辑集合,而OSD是实际存储数据的节点。CRUSH算法通过计算将PG映射到OSD节点,以实现数据的负载均衡和高可用性。
(3)**数据的分布和复制:**一旦PG映射到OSD,Ceph会根据副本策略在所选节点上复制数据。副本策略通常包括指定对象的副本数量和数据复制的方式(例如,多副本或EC编码)。
(4)**数据写入和读取:**当数据需要写入时,客户端将数据写入到PG所映射的OSD节点。数据写入期间,Ceph使用CRUSH算法计算数据的分布和副本存储位置,并在多个OSD上进行并发存储。类似地,数据读取时,Ceph使用CRUSH算法确定从哪些OSD节点恢复数据。
(5)**数据恢复和故障处理:**如果某个OSD节点发生故障或离线,Ceph会自动感知并触发数据恢复流程。使用PG映射和副本机制,Ceph能够从其他可用的OSD节点上获取副本数据,确保数据的高可用性和完整性。
(6)**数据访问和对象存储接口:**Ceph提供了对象存储接口(如RADOS Gateway和S3/Swift协议),允许应用程序和用户通过RESTful API或其他接口访问和操作存储在Ceph集群中的对象。
Ceph集群在存储数据时,都是进行扁平化处理,Object作为集群最小的存储单位。
ceph在对象存储的基础上提供了更加高级的思想。当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph因此引入了placement group (pg) 的概念。一个PG就是一组对象的集合。
[root@controller01 ~]# ceph osd tree | tail -n 5
35 5.45999 osd.35 down 0 1.00000
36 5.45999 osd.36 up 1.00000 1.00000
37 5.45999 osd.37 up 1.00000 1.00000
38 5.45999 osd.38 up 1.00000 1.00000
39 5.45999 osd.39 up 1.00000 1.00000
[root@controller01 ~]#
[root@controller01 ~]# ceph tell osd.39 version
{
"version": "ceph version 0.94.6 (e832001feaf8c176593e0325c8298e3f16dfb403)"
}
[root@controller01 ~]#
ceph health
#查看详细信息
ceph health detail
#显示所有的集群事件
ceph -w
ceph df
ceph status\ ceph -s
watch ceph -s
ceph auth list
#示例
ceph auth list | tail -n9
#部分的版本不支持
ceph features
[root@controller01 ~]# ceph osd tree | tail -n3
37 5.45999 osd.37 up 1.00000 1.00000
38 5.45999 osd.38 up 1.00000 1.00000
39 5.45999 osd.39 up 1.00000 1.00000
[root@controller01 ~]#
[root@controller01 ~]# ceph daemon osd.39 config show|grep osd_objectstore
admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[root@controller01 ~]#
[root@controller01 ~]# ceph pg dump pgs|awk '{print $1,$15}'|grep -v pg | tail -n9
dumped pgs in format plain
3.1b3 [6,18,9]
4.1ab [37,15,24]
2.1ad [10,38,2]
1.1ae [39,3,18]
3.1ac [36,17,27]
4.1aa [1,30,38]
2.1ac [5,36,14]
1.1af [37,28,10]
3.1ad [28,23,32]
ceph mon stat
ceph mon_status
ceph mon dump
ceph quorum_status
ceph osd pool get volumes pg_num
ceph osd pool get volumes pgp_num
ceph osd pool set volumes pg_num 1024
ceph osd pool set volumes size 2
#部分版本可能没有这个命令
ceph daemon osd.xx status
[root@controller01 ~]# ceph osd tree | tail -n3
37 5.45999 osd.37 up 1.00000 1.00000
38 5.45999 osd.38 up 1.00000 1.00000
39 5.45999 osd.39 up 1.00000 1.00000
[root@controller01 ~]# ceph daemon osd.39 status
admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
ceph osd tree
ceph osd dump
(1)方法1:
ceph osd dump |grep -i size
(2)方法2:
ceph df
ceph osd pool POOLS_NAME【ceph df 中的名称】 size
ceph osd pool set $pool-name crush_rule $rulename
ceph osd blacklist ls
ceph osd crush dump
示例:
[root@controller01 ~]# ceph osd crush dump | tail -n9
ceph osd crush rule list
#crush_rule_name是楼上ceph osd crush rule list的结果
ceph osd crush rule dump <crush_rule_name>
#定位该osd所在的主机详细信息
ceph osd find <numeric_osd_id>
[root@controller01 ~]# ceph osd tree | tail -n3
37 5.45999 osd.37 up 1.00000 1.00000
38 5.45999 osd.38 up 1.00000 1.00000
39 5.45999 osd.39 up 1.00000 1.00000
[root@controller01 ~]# ceph osd find 39
{
"osd": 39,
"ip": "1.2.3.37:6828\/67281",
"crush_location": {
"host": "stor05",
"root": "default"
}
}
概念:PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
ceph pg dump 【数据量较大】
#示例:
ceph pg dump | head -n9
ceph pg stat
ceph pg dump_stuck unclean
ceph pg dump_stuck unclean
ceph pg dump_stuck inactive
ceph pg dump_stuck stale
#大量输出
ceph pg dump --format plain
ceph pg <pg-id> mark_unfound_lost revert
ceph mds stat
ceph mds dump
rados lspools
ceph osd pool application disable volumes-app rb
ceph osd pool create test 96 96
ceph osd pool delete images images --yes-i-really-really-mean-it
rados -p metadata ls ——可能没有
#查看pool中的对象——数据量较大
rados -p volumes ls
rados -p volume rm object——删除对象,谨慎操作
rados df
ceph osd stat
ceph osd ls
ceph osd tree
ceph mon dump
ceph osd dump
ceph osd getmap -o osdmap.bin