ceph相关note

    xiaoxiao2021-08-14  122

    原链接

    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状态,仍然能正常运行,且保证数据的安全。

    转载请注明原文地址: https://ju.6miu.com/read-676307.html

    最新回复(0)