Ceph分布式存储

文章目录

  • 一.Ceph分布式存储
  • 二.Ceph的存储过程
  • 三.Ceph的相关命令
    • 1.查看集群的监控
      • 1.1查看OSD版本
      • [1.2 检查集群的健康情况](#1.2 检查集群的健康情况)
      • [1.3 监控集群的时间](#1.3 监控集群的时间)
      • [1.4 查看集群的空间利用率](#1.4 查看集群的空间利用率)
      • [1.5 查看集群的状态](#1.5 查看集群的状态)
      • [1.6 查看集群的实时状态](#1.6 查看集群的实时状态)
      • [1.7 获取秘钥列表](#1.7 获取秘钥列表)
      • [1.8 查看ceph特征](#1.8 查看ceph特征)
      • [1.9 查看osd存储引擎](#1.9 查看osd存储引擎)
      • [1.10 获得所有的PG到OSD的映射](#1.10 获得所有的PG到OSD的映射)
    • [2.检查ceph mon](#2.检查ceph mon)
      • [2.1 查看mon状态的方法](#2.1 查看mon状态的方法)
      • [2.2 mon法定人数状态](#2.2 mon法定人数状态)
      • [2.3 获取PG值](#2.3 获取PG值)
      • [2.4 获取PGP值](#2.4 获取PGP值)
      • [2.5 修改pg数 谨慎操作](#2.5 修改pg数 谨慎操作)
      • [2.6 修改pool的副本数 谨慎操作](#2.6 修改pool的副本数 谨慎操作)
    • [3.监控ceph osd](#3.监控ceph osd)
      • [3.1 查看osd.xx的状态,主要看osdmap版本号](#3.1 查看osd.xx的状态,主要看osdmap版本号)
      • [3.2 查看osd树视图](#3.2 查看osd树视图)
      • [3.3 获取ceph集群和osd的详细信息](#3.3 获取ceph集群和osd的详细信息)
      • [3.4 检查池的副本数](#3.4 检查池的副本数)
      • [3.5 为pool指定规则 谨慎操作](#3.5 为pool指定规则 谨慎操作)
      • [3.6 查看添加到黑名单的客户端](#3.6 查看添加到黑名单的客户端)
    • [4.检查crush map信息](#4.检查crush map信息)
      • [4.1 检查集群的crush map信息](#4.1 检查集群的crush map信息)
      • [4.2 查看crush map 工作集](#4.2 查看crush map 工作集)
      • [4.3 查看一个crush 规则集的详细信息](#4.3 查看一个crush 规则集的详细信息)
      • [4.4 搜索osd和它在crush map中的位置](#4.4 搜索osd和它在crush map中的位置)
    • 5.监控PG
      • [5.1 查看pg组映射(mgp)信息](#5.1 查看pg组映射(mgp)信息)
      • [5.2 获取PG状态](#5.2 获取PG状态)
      • [5.3 查看一个PG的map的详细信息](#5.3 查看一个PG的map的详细信息)
      • [5.4 查看pg中stuck状态](#5.4 查看pg中stuck状态)
      • [5.5 显示集群所有pg统计](#5.5 显示集群所有pg统计)
      • [5.6 恢复一个丢失的pg 谨慎操作](#5.6 恢复一个丢失的pg 谨慎操作)
    • 6.监控MDS
      • [6.1 检查mds的状态](#6.1 检查mds的状态)
      • [6.2 查看元数据服务器的详细信息](#6.2 查看元数据服务器的详细信息)
      • [6.3 查看rados存储池](#6.3 查看rados存储池)
      • [6.4 删除pool的标签------谨慎操作](#6.4 删除pool的标签——谨慎操作)
      • [6.5 创建池------谨慎操作](#6.5 创建池——谨慎操作)
      • [6.6 删除pool------谨慎操作](#6.6 删除pool——谨慎操作)
      • [6.7 使用命令查看池中的对象](#6.7 使用命令查看池中的对象)
      • [6.8 查看集群空间的使用情况](#6.8 查看集群空间的使用情况)
      • [6.9查看osd map 和状态](#6.9查看osd map 和状态)
      • [6.10 查看osd 的ID](#6.10 查看osd 的ID)
      • [6.11 查看OSD的树形图](#6.11 查看OSD的树形图)
      • [6.12 检查集群的monitor map信息](#6.12 检查集群的monitor map信息)
      • [6.13 获取集群的osd map信息](#6.13 获取集群的osd map信息)
      • [6.14 查看osdmap图](#6.14 查看osdmap图)

一.Ceph分布式存储

1.Ceph概念

(1)Ceph是一种开源的分布式存储系统,2006年出现,是私有云事实上的标准-OpenStack默认存储后端。用于在整个集群中存储海量数据。

(2)Ceph是一种软件定义存储,可以运行在几乎所有主流的Linux发行版(比如CentOS和Ubuntu)和其它类UNIX操作系统(典型如FreeBSD)。

(3)Ceph的分布式基因使其可以轻易管理成百上千个节点、PB级及以上存储容量的大规模集群,同时基于计算的扁平寻址设计使得Ceph客户端可以直接和服务端的任意节点通信,从而避免因为存在访问热点而导致性能瓶颈。

(4)Ceph是一个统一存储系统,即支持传统的块、文件存储协议,例如SAN和NAS;也支持对象存储协议,例如S3和Swift。适合于构建可扩展、高性能和可靠的存储解决方案。

2.Ceph的优点

(1)可伸缩性:Ceph支持可伸缩的存储架构,能够处理海量数据。通过添加新的存储节点,可以轻松扩展存储容量和性能,以满足不断增长的存储需求。

(2)高性能:Ceph的设计优化了数据访问和传输方式,提供出色的性能。它具有并行访问和分布式数据存储的能力,可以实现高吞吐量和低延迟的数据传输。

(3)高可靠性:Ceph采用分布式冗余数据存储的方式,数据被分散存储在多个节点上,确保数据的可靠性和容灾性。如果一个节点出现故障,数据可以自动恢复和重建。

(4)自动化管理:Ceph具有自我修复和故障转移的功能,当节点出现故障或数据损坏时可以自动检测和修复,减少了管理员的工作负担。

(5)多种数据存储方式:Ceph提供了对象存储、块存储和文件系统等多种数据存储方式,可以满足不同应用场景的存储需求。

(6)灵活性:Ceph可以运行在标准硬件上,并且不依赖于特定的硬件设备或供应商。这使得它可以根据实际需求灵活地部署和扩展,同时降低了成本。

(7)社区支持和开源:作为开源项目,Ceph有一个活跃的社区,提供技术支持和持续的改进。用户可以从社区中获得帮助、交流经验,并参与贡献。

总:Ceph具有高可伸缩性、高性能、高可靠性和灵活性等一系列优点。它适用于大规模和分布式存储的需求,可以提供可靠的、高性能的存储解决方案。

3.Ceph的缺点

(1)复杂性: Ceph是一个复杂的系统,它由多个组件和子系统组成,需要专业知识和经验来进行部署、配置和管理。

(2)性能调优:虽然Ceph提供了高性能和可伸缩性,但需要进行适当的性能调优和配置才能发挥最佳性能。

(3)网络带宽: 由于Ceph是一个基于网络的分布式存储解决方案,因此它对网络带宽的需求较大。在较低带宽的环境中可能会影响性能表现。

(4)维护成本: 在部署和维护Ceph集群时,需要投入一定的人力资源和时间来监控、维护和处理故障。

(5)学习曲线: 由于Ceph的复杂性,学习曲线较陡峭。新用户可能需要花费时间来熟悉Ceph的架构和工作原理。

(6)数据恢复速度: 在节点故障或数据损坏时,Ceph需要执行数据恢复操作。这可能需要一定的时间和资源,并且会对系统性能产生一定影响。

(7)对现有基础架构的依赖: 部署Ceph可能需要对现有基础架构进行调整和修改,以满足Ceph的要求。

4.Ceph架构

4.1 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适用于各种存储需求,包括分布式存储、块存储和对象存储等。

4.2 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中,存储过程涉及多个关键组件和步骤,包括数据的划分、分布、复制和访问。以下是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就是一组对象的集合。

三.Ceph的相关命令

1.查看集群的监控

1.1查看OSD版本

[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 ~]# 

1.2 检查集群的健康情况

ceph health
#查看详细信息
ceph health detail 

1.3 监控集群的时间

#显示所有的集群事件
ceph -w

1.4 查看集群的空间利用率

ceph df

1.5 查看集群的状态

ceph status\ ceph -s

1.6 查看集群的实时状态

watch ceph -s

1.7 获取秘钥列表

ceph auth list
#示例
ceph auth list | tail -n9

1.8 查看ceph特征

#部分的版本不支持
ceph features 

1.9 查看osd存储引擎

[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 ~]#

1.10 获得所有的PG到OSD的映射

[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]

2.检查ceph mon

2.1 查看mon状态的方法

ceph mon stat
ceph mon_status
ceph mon dump

2.2 mon法定人数状态

ceph quorum_status

2.3 获取PG值

ceph osd pool get volumes pg_num

2.4 获取PGP值

ceph osd pool get volumes pgp_num

2.5 修改pg数 谨慎操作

ceph osd pool set volumes pg_num 1024

2.6 修改pool的副本数 谨慎操作

ceph osd pool set volumes size 2

3.监控ceph osd

3.1 查看osd.xx的状态,主要看osdmap版本号

#部分版本可能没有这个命令
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

3.2 查看osd树视图

ceph osd tree

3.3 获取ceph集群和osd的详细信息

ceph osd dump

3.4 检查池的副本数

(1)方法1:

ceph osd dump |grep -i size

(2)方法2:

ceph df
ceph osd pool POOLS_NAME【ceph df 中的名称】 size

3.5 为pool指定规则 谨慎操作

ceph osd pool set $pool-name crush_rule $rulename

3.6 查看添加到黑名单的客户端

ceph osd blacklist ls

4.检查crush map信息

4.1 检查集群的crush map信息

ceph osd crush dump

示例:
[root@controller01 ~]# ceph osd crush dump | tail -n9

4.2 查看crush map 工作集

ceph osd crush rule list

4.3 查看一个crush 规则集的详细信息

#crush_rule_name是楼上ceph osd crush rule list的结果
ceph osd crush rule dump <crush_rule_name>

4.4 搜索osd和它在crush map中的位置

#定位该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"
    }
}

5.监控PG

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

5.1 查看pg组映射(mgp)信息

ceph pg dump 【数据量较大】
#示例:
ceph pg dump | head -n9

5.2 获取PG状态

ceph pg stat

5.3 查看一个PG的map的详细信息

ceph pg dump_stuck unclean

5.4 查看pg中stuck状态

ceph pg dump_stuck unclean
ceph pg dump_stuck inactive
ceph pg dump_stuck stale

5.5 显示集群所有pg统计

#大量输出
ceph pg dump --format plain 

5.6 恢复一个丢失的pg 谨慎操作

ceph pg <pg-id> mark_unfound_lost revert 

6.监控MDS

6.1 检查mds的状态

ceph mds stat

6.2 查看元数据服务器的详细信息

ceph mds dump

6.3 查看rados存储池

rados lspools

6.4 删除pool的标签------谨慎操作

ceph osd pool application disable volumes-app rb 

6.5 创建池------谨慎操作

ceph osd pool create test 96 96 

6.6 删除pool------谨慎操作

ceph osd pool delete images images --yes-i-really-really-mean-it

6.7 使用命令查看池中的对象

rados -p metadata ls ------可能没有
#查看pool中的对象------数据量较大
rados -p volumes ls
rados -p volume rm object------删除对象,谨慎操作

6.8 查看集群空间的使用情况

rados df

6.9查看osd map 和状态

ceph osd stat

6.10 查看osd 的ID

ceph osd ls

6.11 查看OSD的树形图

ceph osd tree

6.12 检查集群的monitor map信息

ceph mon dump

6.13 获取集群的osd map信息

ceph osd dump

6.14 查看osdmap图

ceph osd getmap -o osdmap.bin
相关推荐
天乐敲代码1 小时前
Etcd静态分布式集群搭建
数据库·分布式·etcd
光纤传感技术研究2 小时前
分布式光纤传感|分布式光纤测温|线型光纤感温火灾探测器DTS|DTS|DAS|BOTDA的行业16年的总结【2024年】
分布式·dts·光纤传感器·botda·光纤传感技术
dbcat官方2 小时前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构
明达技术4 小时前
分布式 IO 模块助力冲压机械臂产线实现智能控制
分布式
溟洵5 小时前
【C++】异步(并发)实现 线程池 ---附源码+实现步骤(future、async、promise、package_task、任务池原理和框架)
服务器·网络·c++·分布式·后端
weisian15118 小时前
Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)
redis·分布式·缓存
不能只会打代码19 小时前
Java并发编程框架之综合案例—— 分布式日志分析系统(七)
java·开发语言·分布式·java并发框架
Elastic 中国社区官方博客19 小时前
如何通过 Kafka 将数据导入 Elasticsearch
大数据·数据库·分布式·elasticsearch·搜索引擎·kafka·全文检索
怡雪~19 小时前
k8s使用ceph
ceph·容器·kubernetes