【ceph】术语

stack.png

Ceph产生原因

为了解决RAID的瓶颈

Ceph优缺点

在知乎看到一篇文章,对于小白的我来说讲还不错

Ceph基本概念

Monitor(监视器)
  • 通过保存一份集群状态映射来维护整个集群的健康状态。会为每个组件维护映射信息,包括OSD map、MON map、PG map和CRUSH map。所有集群节点都想MON节点汇报状态信息,并分享它们状态中的任何变化,通过Paxos算法保持数据的一致性。MON不会存储数据
  • MON节点数量必须为(2N+1)(N>=1)来解决单点问题,Ceph 总是使用大多数监视器(如: 1 、 2:3 、 3:5 、 4:6 等等)和 Paxos 算法就集群的当前状态达成一致。
OSD(Object Storage Device)

只要应用程序向Ceph集群发送写操作,数据就会被以对象的形式存储在OSD中,这是Ceph集群唯一能存储用户数据的组件,同时用户也可以发送读取命令来读取数据。通常,一个OSD守护进程会被捆绑到集群中的一块物理磁盘上。所以通常情况下,Ceph集群中的物理磁盘的总数,与在磁盘上运行的存储用户数据的OSD守护进程数量是相同的。简单来说就是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程

相关命令
# 查看OSD
ceph osd tree
# 查看osd的配置
ceph -n osd.0 --show-config
# centos 7启动osd
systemctl start ceph-osd.target
systemctl start [email protected]
# 停止[email protected]之后位于/run/ceph下的ceph-osd.0.asok将会消失
MGR(Manager)

Ceph Manager守护程序(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的Ceph Manager Dashboard和 REST API。高可用性通常至少需要两个管理节点。

PG(placement group)
  • 是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略
  • 简单点说就是相同PG内的对象都会放到相同的硬盘上
  • PG是Ceph的核心概念,服务端数据均衡和恢复的最小粒度就是PG
PGP

PGP是存储池PG的OSD分布组合个数

  • PGP起到对PG进行归置的作用
  • PGP的取值应该与PG相同,在PG的值增大的同时,也要增大PGP的值以保持二者的值相同
  • 当一个POOL的PG增大后,Ceph并不会开始进行rebalancing,只有在PGP的值增大后,PG才会开始迁移至其他的OSD上,并且开始rebalancing

PG_num&PGP_num

  • 一个推荐配置是每OSD对应50-100个PG。如果数据规模增大,在集群扩容的同时PG数量也需要调整。CRUSH会管理PG的重新分配。
  • 每个pool应该分配多少个PG,与OSD的数量、复制份数、pool数量有关,有个计算公式在:pgs = (total_number_of_OSD * 100)/max_replication/pool_count;
  • 结算的结果往上取靠近2的N次方的值。比如总共OSD数量是160,复制份数3,pool数量也是3,那么按上述公式计算出的结果是1777.7。取跟它接近的2的N次方是2048,那么每个pool分配的PG数量就是2048;
  • pg_num 与 pgp_num 必须一致;
  • 新增/缩减 pool 后所有 pool 的 pg_num与 pgp_num 都需要调整;
Pool

Pool是对存储的逻辑划分,用户把数据都放到pool里,默认情况下,ceph storage cluster中有data pool,rbd pool,metadata pool。在ceph的部署中为相似的数据创建一个pool来存放数据是很普遍的。例如当把ceph作为opentack的后端时,需要创建若干pools;当把ceph作为cloudstack的后端时,需要创建若干pools,用途不同创建的pool的数量和名称也是不同的。

  • Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略
  • 支持两种类型:副本(replicated)和 纠删码( Erasure Code)
相关命令
# 查看pool
ceph osd lspools
rados lspools
ceph osd dump | grep -i pool
# 创建pool
ceph osd pool create {pool-name} {pg-num} {pgp-num} 
# 重命名pool
ceph osd pool rename oldname newname
# 删除pool之前得先配置
vi /etc/ceph/ceph.conf
[mon] 
mon allow pool delete = true
然后重启systemctl restart ceph-mon.target
否则会报错
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool

ceph osd pool rm {pool-name} {pool-name} --yes-i-really-really-mean-it
# 查看副本数
ceph osd pool get {pool-name} size
# 设置副本数
ceph osd pool set {pool-name} size {pool-replicas}
# 设置允许最大object数量为100 取消配额限制只需要把对应值设为0即可
ceph osd pool set-quota {pool-name} max_objects 100
# 设置允许容量限制为10GB 取消配额限制只需要把对应值设为0即可
ceph osd pool set-quota {pool-name} max_bytes $((10 * 1024 * 1024 * 1024))
# 批量造数据
rados -p {pool-name} bench {秒数} write --no-cleanup
# 查看pool统计信息
rados df
# 存入对象到pool
echo "test data" > test.txt
rados put {object-name} test.txt --pool={pool-name}
# 查看pool中的对象
rados -p {pool-name} ls
# 删除pool中的对象
rados rm {object-name} --pool={pool-name}
# 查看object对应的pg和osd
ceph osd map {pool-name} {object-name}
Namespace(命名空间)

池中对象的一个逻辑组织,池中的对象可以关联到该命名空间中。户访问的pool可以关联到一个池中,这样用户所做的读写尽在该命名空间中有效。Pool中写在命名空间中的数据只有对该命名空间有访问权限的用户才可以访问。
命名空间对与使用librados写数据的应用是很有用的,但是像block device client,object storage client和filesystem 暂时还不支持该特性。

ceph客户端数据写入流程

文件被切分成object->object映射到PG(通过计算hash值)->PG映射到OSD set(通过Crush算法)

RADOS(Reliable Autoonomic Distributed Object Store) 可靠的自治的分布式对象存储

Ceph集群的基础,由于在Ceph中所有数据是以对象形式存储,RADOS负责保存这些对象。RADOS层可以确保数据始终一致。

librados可靠的自治的分布式对象存储lib库

为其它语言提供了访问RADOS的接口,都基于librados封装了原生接口,除了以上3种存储接口,还可以直接使用librados的原生接口直接和RADOS通信

原生接口的优点是是它直接和和应用代码集成,操作文件很方便;但它的问题是它不会主动为上传的数据分片,一个1G的大对象上传,落到Ceph的存储磁盘上就是1G的文件,而CephFS、RBD、RGW三个接口是具有分片功能(即:条带化 file-striping)

RBD(RADOS block device)RADOS块设备

RBD是通过librbd库对应用提供块存储,主要面向云平台的虚拟机提供虚拟磁盘
RBD类似传统的SAN存储,提供数据块级别的访问

RGW(RADOS gateway)RADOS网关接口

Ceph对象存储服务提供了REST风格的API ,它有与Amazon S3和OpenStack Swift 兼容的接口。也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展

CephFS Ceph文件系统

提供了一个使用Ceph存储集群存储用户数据的与POSIX兼容的文件系统

MDS(Metadata Server)

Ceph元数据服务器(MDS ceph-mds)代表Ceph文件系统存储元数据(即,Ceph块设备和Ceph对象存储不使用MDS)。Ceph的元数据服务器允许POSIX文件系统的用户来执行基本的命令(如 ls,find没有放置在一个Ceph存储集群的巨大负担,等等)。

CRUSH

Ceph 客户端和 OSD 守护进程都用 CRUSH 算法来计算对象的位置信息,而不是依赖于一个中心化的查询表。与以往方法相比, CRUSH 的数据管理机制更好,它很干脆地把工作分配给集群内的所有客户端和 OSD 来处理,因此具有极大的伸缩性。 CRUSH 用智能数据复制确保弹性,更能适应超大规模存储。

CephX

为识别用户并防止中间人攻击, Ceph 用 cephx 认证系统来认证用户和守护进程。
cephx 协议不解决传输加密(如 SSL/TLS )、或者存储加密问题。
Cephx 用共享密钥来认证,即客户端和监视器集群各自都有客户端密钥的副本。这样的认证协议使参与双方不用展现密钥就能相互认证,就是说集群确信用户拥有密钥、而且用户相信集群有密钥的副本。

参考资料

http://docs.ceph.com/docs/master/glossary/
https://www.cnblogs.com/me115/p/6366374.html
https://zhuanlan.zhihu.com/p/37508524
http://www.cnblogs.com/weichao01/p/9532794.html
https://wangtuo1224.github.io/2018/10/19/ceph-basic1/

你可能感兴趣的:(【ceph】术语)