(3)PG -> OSD映射。如果这种算法是某种固定映射的哈希算法,则意味着一个object将被固定映射在一组OSD上,当其中一个或多个OSD损坏时,object无法被自动迁移至其他OSD上(因为映射函数不允许),当系统为了扩容新增了OSD时,object也无法被re-balance到新的OSD上(同样因为映射函数不允许)。这三个OSD具有各自不同的序号,序号最靠前的那个OSD就是这一组中的Primary OSD,而后两个则依次是Secondary OSD和Tertiary OSD。
ceph工作原理和安装一、概述1. CRUSH算法。cd /ceph下载yum源,下载地址如下http://download.ceph.com/rpm-firefly/el6/noarch/在node1~4上把上面的网址设置为yum源yum install –y ceph到管理主机上的/ceph目录操作,创建一个新集群,并设置node1为mon节点ceph-deploy new node1执行完毕后,可以看到/ceph目录中生成了三个文件,其中有一个配置文件可以做各种参数优化,据说ceph的优化参数接近1000项。
另外一点ceph客户端读写数据直接与存储设备(osd) 交互。Rados集群是ceph的存储核心。如图,rados集群中分为以下角色:mdss、osds、mons. Osd 对象存储设备,可以理解为一块硬盘+osd 管理进程,负责接受客户端的读写、osd间数据检验(srub)、数据恢复(recovery)、心跳检测等。Mons 主要解决分布式系统的状态一致性问题,维护集群内节点关系图(mon-map osd-map mds-map pg-map)的一致性,包括osd的添加、删除的状态更新。# ceph -s.
【转载】Why Ceph and how to use Ceph | 云里雾里。Rados本身就是一个对象存储接口,它自身维护了一个集群状态和实现了数据分发的要求,我们通常也讲Rados称为Ceph Cluster,因为其上的存储接口如CephFS都是基于其上的接口实现而已。2. ceph-fuse: 通过ceph-fuse可以从用户态空间挂载CephFS如”ceph-fuse -m 192.168.0.1:6789 /home/username/cephfs”3. libcephfs.so: 通过libcephfs可以替代HDFS来支持不同Hadoop乃至HBase。
解析Ceph和9000分布式存储 Ceph是呼声很高的开源分布式的SDS产品存储系统。搭建一台Ceph系统至少需要1个Ceph Monitor和2个Ceph OSD逻辑角色,而Ceph Metadata server仅仅是运行CephFS时存储文件元数据。在Ceph存储系统中,Ceph Metadata Daemon 提供了元数据服务器,而Ceph Object Storage Daemon 提供了数据和元数据的实际存储。虽然说Ceph在NAS功能上比较欠缺,但目前Ceph发展的策略是从Block、Object到FilesyStem。
海量小文件存储与Ceph实践。我们在Filestore存储引擎基础上对小文件存储设计了优化方案并进行实现,方案主要思路如下:将若干小文件合并存储在RADOS系统的一个对象(object)中,<小文件的名字、小文件在对象中的offset及小文件size>组成kv对,作为相应对象的扩展属性(或者omap,本文以扩展属性表述,ceph都使用kv数据库实现,如leveldb)进行存储,如下图所示,对象的扩展属性数据与对象数据存储在同一块盘上;
ceph排除了这个瓶颈,cepp的OSD和ceph客户端都清楚知道集群架构,每个OSD都知道集群中其他的OSD。第一个OSD,osd.25作为Primary,如果该OSD失效后,第二个OSD,osd.32成为Primary,并且osd.25将从up set中移除。一旦ceph客户端将数据分割成条带单元并且将条带单元映射到object,ceph的CRUSH算法在object存储到磁盘文件之前,映射object到PG,PG映射到ceph OSD。ceph文件系统服务包含了与ceph存储集群一起部署的ceph元数据服务器。
理解 Ceph:一个开源的分布式存储平台。Ceph存储集群运行在商用机上,为了确保集群中数据的分布式存储和良好的可扩展性,Ceph运用了著名的CRUSH(Controllled Replication Under Scalable Hashing)算法。OSD DaemonCeph MonitorCeph OSD Daemon.Ceph Monitor也是一种Ceph OSD Daemon,它主要负责管理全部集群。当你运行一个Ceph集群时,你就会需要Ceph Monitor每天帮你检查集群的健康情况和状态。Ceph Object storage。
ceph-deploy osd HOST:DISK[:JOURNAL]ceph-deploy osd prepare 数据盘:日志盘ceph-deploy osd prepare --zap-disk objStor02:/dev/sdd:/dev/sdb.每个 [stripe_unit] 的连续字节会被连续地保存到同一个对象中,client 写满 stripe unit 大小的数据后,接着去下一个 object 中写下一个 stripe unit 大小的数据。2. stripe_unit 为 object size 的四分之一,也就是说每个 object 包含 4 个 stripe。
因此,本文将对Ceph在OpenStack中的价值进行简要介绍,并且对Ceph和Swift进行对比。具体到Ceph而言,其最为符合软件定义存储的特性无疑是,Ceph的存储类型是可以通过软件方式定义的。同时,由于Ceph自身对于OSD硬件平台的特殊假设,以及由此导致的优化空间,则在成本合理的前提下,开发更加适用于Ceph OSD的定制硬件平台(类似于micro-server或者IP硬盘等),并突出存储的高密度、低功耗、高可维护性等特点,也可能成为一种选择。
这一层包括了三个部分:RADOS GW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System),其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。RADOS GW提供的API抽象层次更高,但功能则不如librados强大。这一层就是不同场景下对于Ceph各个应用接口的各种应用方式,例如基于librados直接开发的对象存储应用,基于RADOS GW开发的对象存储应用,基于RBD实现的云硬盘等等。
块存储,文件存储,对象存储的层次关系应用的角度聊过了,我们再看看这三种存储的一些技术细节,首先看看在系统层级的分布。当然对象存储通常不需要专业的存储设备,前面那些LV/VG/PV层也可以统统不要,直接在硬盘上做本地文件系统,之后再做成OSD,这种才是对象存储的标准模式,对象存储的硬件设备通常就用大盘位的服务器。块存储的数据结构是数组,而文件存储是二叉树(B,B-,B ,B*各种树),对象存储基本上都是哈希表。
1、`ceph osd tree` 查看osd【5,4,6】其中一个所在的节点2、`ssh ceph-nodeN`,进入该节点 #osd.5所在的node节点3、`df -h | grep -i ceph-5`找出该osd.5的物理存储位置 ,ceph-5是指osd.54、`cd /var/lib/ceph/osd/ceph-5/current`进入osd.5所在的物理存储文件夹5、`ls -l |grep -i 6.31`找出和PG(6.31)相关的文件夹6、`cd 6.31_head`进入该PG文件夹7、`ls -l `就可以看到我们存储的testobject数据的详细信息。
预留会同时考虑Primary OSD和Replica OSD,Primary OSD通过local_reserver来预留,Replica OSD通过remote_reserver来预留,默认每个AsyncReserver同一个时刻只允许一个PG进行恢复。当osd_scrub_begin_hour小于osd_scrub_end_hour时,允许时间段为[osd_scrub_begin_hour, osd_scrub_end_hour];当osd_scrub_begin_hour大于osd_scrub_end_hour时,允许的时间段为[osd_scrub_begin_hour, 24]和[0, osd_scrub_end_hour]两部分。
CRUSH算法介绍。首先,select有2种操作方式:choose firstn: 深度优先选择出n个类型为t的子bucket,只到bucket为止chooseleaf: 先选择出n个类型为t的bucket,再在每个bucket下选择一个OSD设备。而在设置Placement Rule时,可以指定采用哪种bucket随机选择算法,即属于哪种bucket. 这里首先介绍一个重要的Hash函数,因为该函数在多个bucket选择算法中都用到了,但作用各不相同:hash(PG_ID, r, bucket_id)Bucket选择算法。
在《ceph基于pglog的一致性协议》一文中分析了ceph的一致性协议,从中我们得知在osd重启、存储机重启等场景下基于pglog的恢复的时候,在peering的时候会根据pglog来构建出missing列表,然后在恢复时根据missing列表逐个进行恢复,恢复的粒度是整个对象大小(默认4MB,有可能有的对象不足4MB,就按对象大小),即使只修改了一个4KB,也需要将4MB的对象拷贝过来,这样100个io就会达到400MB的带宽,对网络及磁盘产生较大的影响。
理解 OpenStack + Ceph (2):Ceph 的物理和逻辑结构 [Ceph Architecture](1)Ceph client 通过 CRUSH 算法计算出存放 object 的 PG 的 ID:客户端输入 pool ID 和 object ID (比如 pool = “liverpool” and object-id = “john”)ceph 对 object ID 做 hashceph 对该 hash 值取 PG 总数的模,得到 PG ID (比如 58)ceph 或者 pool ID (比如 “liverpool” = 4)ceph 将 pool ID 和 PG ID 组合在一起(比如 4.58)
op_wq(this, g_conf->osd_op_thread_timeout, &op_tp)涉及的操作类型包括:CEPH_MSG_OSD_OP(client op) , MSG_OSD_SUBOP(for replication etc.) ,MSG_OSD_SUBOPREPLY。OSD *osd;: ThreadPool::WorkQueue<PG>("OSD::OpWQ", ti, ti*10, tp), osd(o) {}OpWQ主要操作osd->op_queue,即deque<OpSequencer*> op_queue;OpWQ的 void _process(PG *pg) 到 osd->dequeue_op(pg);中的代码如下:if (op->get_type() == CEPH_MSG_OSD_OP) {
所有存储在Ceph的Object也都带有snap_seq,而每个Object会有一个Head版本的,也可能会存在一组Snapshot objects,不管是Head版本还是snapshot object都会带有snap_seq,那么接下来我们看librbd是如何利用该字段创建Snapshot的。每个Snapshot都掌握者一个snap_seq,Image可以看成一个Head Version的Snapshot,每次IO操作对会带上snap_seq发送给Ceph OSD,Ceph OSD会查询该IO操作涉及的object的snap_seq情况。
Redhat Ceph存储之“深入理解Ceph架构”在典型的写操作场景下,Ceph客户端使用CRUSH算法计算对象所在的PG ID以及Acting Set列表中的主OSD,当客户端将对象写到主OSD时,主OSD会查看这个对象应该存储的副本个数(例如,osd_pool_default_size = n),然后主OSD根据对象ID、存储池名称、集群映射关系这些信息再根据CRUSH算法来计算出Acting Set列表中的从属OSD(译者注: 除列表中第一个OSD外,其它的都是从属OSD)。
Ceph源码目录架构 简介。ceph.spec.in:Ceph打包的spec文件。[tools]:Ceph中的各种工具的实现:cephfs、rados、rbd、rbd-nbd、ceph-authtool、ceph-conf、ceph-kvstore-tool、ceph-monstore-tool、ceph-objectstore-tool、crushtool、monmaptool、osdmaptool.上图中的每一个模块对应Ceph的src目录下的一个目录,还有部分目录没有体现在该图中,这些通常是一些辅助性质的目录,详细情况可以参考《Ceph源代码目录结构详解》。
Ceph V10.2.0 Jewel正式版本发布。chown -R ceph:ceph /var/lib/ceph.此操作受Jewel监控器(Jewel monitor)的限制,因此,需使用如下的升级步骤:1.在monitor主机上更新Ceph2.重启所有的ceph-mon守护进程3.在所有的OSD主机上更新Ceph4.停止所有的ceph-osd守护进程5.将所有的OSD标记为down,所用的执行命令类似于:ceph osd down seq 0 10006.启动所有的ceph-osd守护进程7.升级并重启余下的守护进程(ceph-mds, radosgw)
Rados(conffile = ''/root/ceph/ceph-0.94.2/src/ceph.conf'') File "/usr/lib/python2.7/rados.py", line 215, in __init__ self.librados = CDLL(library_path if library_path is not None else ''librados.so.2'') File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__ self._handle = _dlopen(self._name, mode)OSError: librados.so.2: cannot open shared object file: No such file or directory.
Ceph 是一个运行在通用硬件平台上的、拥有高度扩展能力的软件定义存储开源项目。ceph osd pool create poolname test_pool \ ceph osd erasure-code-profile set {name} \ ceph osd pool create ecpool PG_NUM PGP_NUM erasure ecprofle参考文献:http://ceph.com/http://www.slideshare.net/Inktank_Ceph/webinar-getting-started-with-ceph.http://www.slideshare.net/Inktank_Ceph/webinar-advance-ceph-features.
“Ceph浅析”系列之七——关于Ceph的若干想法。7.3 Ceph与软件定义存储。具体到Ceph而言,其最为符合软件定义存储的特性无疑是,Ceph的存储类型是可以通过软件方式定义的。同时,由于Ceph自身对于OSD硬件平台的特殊假设,以及由此导致的优化空间,则在成本合理的前提下,开发更加适用于Ceph OSD的定制硬件平台(类似于micro-server或者IP硬盘等),并突出存储的高密度、低功耗、高可维护性等特点,也可能成为一种选择。
这里,我们直接在Monitor节点node1上安装ceph-deploy,然后通过ceph-deploy在node1上部署Monitor,在node2和node3节点上部署OSD,最后,在node4上部署Ceph网关rgw。ceph-deploy purgedata {ceph-node} [{ceph-node}]ceph-deploy forgetkeys.# ssh node2# sudo mkdir /var/local/osd0# chown ceph:ceph /var/local/osd0# exit# ssh node3# sudo mkdir /var/local/osd1# chown ceph:ceph /var/local/osd1# exit准备OSD.
2)接着做第二次快照,更新元数据,然后对obj1、obj2、obj3都进行写入,对于obj1,为快照2生成obj1-snap2对象,但是对于obj2就有所不同,因为obj2是做了第二次快照后才要进行修改,也就是说第一次快照和第二次快照之间这个对象的数据没有改变,因此只需要拷贝一次就行了,有两种做法,一种是为较老的快照生成快照对象(这里就是snap1),另外一种做法就是为最新的快照生成快照对象(即snap2)。