ceph相关note

原链接

http://blog.csdn.net/litianze99/article/details/51489565

ceph monitor 维护着ceph map的主本, client会从monitor那里获取ceph map的副本。
ceph osd进程会监控自动的状态和其他osd的状态,并把监控的情况报告给monitor。
clients和osds利用crush算法来确定数据的具体位置。
存储到ceph中的数据无论来源哪里,在ceph中都是作为一个object存储,每一个object在文件系统中以一个文件的形式存在,在对象存储设备上。
osd进程在存储磁盘上做读写操作。
ceph中所有的object在一个flat namespace中。
每个object有一个identifier、binary data、和metadata(一直键值对)。
cephfs会利用metadata来存储文件的一些属性,例如:创建者、创建时间、修改时间等等。

可扩展、高可用
为了消除集中化,ceph使用crush算法来定位数据的具体位置;client可以与osd直接交互;osd可以把对象复制到其他节点上,来确保数据的安全;另外ceph也利用监控集群(cluster of monitor)来确保高可用。
crush提供了一个较好的数据管理方法,在集群中crush能为clients和osds很容易的分配工作,来保证大规模,crush利用数据智能主从复制来确保回弹。
client在读写数据之前,必须要到monitor那里获得一个最新的cluster map表。
延迟或者其他的一些错误可能会导致一个或者多个monitor的维护的cluster status 落后于当前最新状态,Paxos就是用来保证monitor之间集群状态一致性的。
ceph集群中osds是能够相互感知的,且osd可以与monitors交互,osd之间也可以交互,同时osd和client也可以直接交互。
osd 的状态,osd的状态up/down表示osd是否运行,能否处理client请求。osd加入到集群后会向monitor汇报自己的状态,如果osd挂掉,不能自己上报自己的状态,
ceph monitor可以周期性的ping osd 进程,来判断osd是否还在运行,ceph也授权其他的osd来判断自己临近的osd是否up,来跟新cluster map,上报它的状态到monitor。
Date Scrubbing:osd进程能够在一个pg中清洗objects;ceph osd能够拿pg中的object metadata和另一个osd pg中的副本metadata进行比较。Scrubbing能够抓补bugs和文件系统错误,(通常每天执行一次)
osd 进程也可以深度清洗数据,即对object做字节对比(通常一周做一次),深度清洗可以发现驱动上的坏的扇区,这是轻度清洗发现不了的。
Replication
像client一样,osd也会使用crush 算法,ceph osd 使用crush 算法来计算object 副本的存放位置。
在一个典型的写数据情境中,client使用crush 算法来计算数据的存放位置,映射object到 pool 和pg中,然后查看crush map 来为pg鉴定主osd,client把数据写到被鉴定的主osd的pg中,
然后primary osd 利用自己的cursh map副本来为数据备份(复制object)选择第二个osd和第三个osd,再备份数据相应的第二osd和第三osd的pg中,直到所有的副本都写结束才响应client。
在ceph系统中定义了pool的概念,它表示对存储数据的逻辑划分。
client从monitor中获取到cluster map 然后把数据写到pools中。池的大小、object的副本数、crush ruleset和pg的数量,决定了数据写的位置。
pools必须提供一下参数:
1.ownership/access to objects
2.the number of placement groups
3.the crush ruleset to use
pool中有pg,crush是动态的映射pgs到osds中的。
object —–map—>pg—–map—->osd
由于pg这个中间层的存在,是ceph可以在新加osd进程或者为osd添加device,可以动态再平衡。
client利用map和crush可以确定使用哪个osd来读写数据。
client定位一个object只需要输入object ID和 pool。ceph存储数据在pool(liverpool)中,当ceph储存object(john),client会通过object name、a hash code、pool中pg数量、和pool name,计算出pg。
1.输入pool id和object id(eg. pool = ‘liverpool’ object-id=’john’)
2.计算object-id的哈希值得 x = hash(john)
3.使用哈希值模pg数量得pg的id y = X % count(pg)(eg. 58)
4.获取给定pool name(liverpool)的id (eg. 4)
5. ceph prepends the pool id to the PG id (eg. 4.58)

crush algorithm 允许client计算object应该存放的位置,使client连接到primary osd 存储和读取数据。
osd会相互检查心跳,并报告给monitor。osd有一个状态过程叫做peering,peering是一个过程,在该过程中存储pg的所有osd中的pg达成一致。
peering 问题是ceph可以自修复的,如果不能自修复,则要人工介入了。
pg状态一致的过程,并不表示pgs有最新的内容。
ceph的对象副本数最好是3份,这样即使集群处于degraded状态,仍然能正常运行,且保证数据的安全。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值