词汇解释
- 什么叫哈希函数
简单的理解就是一种将任意长度的信息压缩映射到固定长度的消息函数 - 扁平结构
对象
- 对象是存储池最小存储单元,默认ceph为4M
- 对象与文件有什么区别
1、对象包含数据和元数据(代表元数据可以不受限制自定义)
2、对象采用扁平的命名空间存储(不使用树状目录结构,基于key/value形式) - 基于全局唯一ID
存储池和PG
- 存储池是个虚拟概念,简单理解为硬盘分区就好了
1、存储池的目的就是为了能提供随取随用
2、不同的存储池可以实现不同的规则策略,如CRUSH规则,OSD规格,副本物理隔离等等 - PG(Placement group)是为了实现存储池的隔离和管理
1、隔离存储池之间的规则策略
2、由于OSD面对百万的数量级,这样在管理上就存在很大的困难,而计算机排序算法就是为了这个效率的问题,排序算法的原理就是把多个对象进行分组,减少匹配次数,而OSD为了减轻工作也要进行分组,也就是PG了
- 第一次映射是静态的,以4M的大小进行切割、编号后,作为哈希函数输入,在均匀的映射到PG上实现负载均衡功能
为什么对象要哈希后再映射?
为了保障对象名的唯一性,而对象名一般都是采用比较长的命令方式,这样就会降低排序的效率,使用哈希后的规定长度字符可以增加排序效率 - 第二次映射是动态的,依然采用哈希函数,对PG的唯一身份表示和引入集群拓扑(为了实现CRUSH算法实现自动故障修复等功能)使用CRUSH规则对象映射进行调整,最终存储池以PG为基本单位进行管理
- 为了维持扁平化寻址空间,PG需要拥有全集群唯一身份标识(PGID),而PGID是基于存储池ID,所以假设存储池ID是1,PG就是1.0,1.1,1.2.。。。
ceph df
查看存储池ID
rados ls -p openstack
查看存储池里的对象
ceph osd map openstack rbd_id.image
查看对象rbd_id.image映射到哪个OSD上
pg 1.1e6f8db0 (1.0)
1e6f8db0 对象哈希结果
PGid为 1.0,1位存储池id,0为PG ID
up ([1,0,2]) 激活的OSD ID
acting ([1,0,2] 第一个为主副本,后面为冗余副本
ceph osd tree
查看osd ID号