ceph的ceph crush map算法究竟是怎么样的

ceph的数据存储之路(3) ----- pg选择osd的过程(crush 算法)
ceph的数据存储之路(3) ----- pg选择osd的过程(crush 算法)
&&&&&&&0. 学会使用解析ceph的cluster map工具:
ceph&osd&getcrushmap&-o&crush.map
crushtool&-d&crush.map&&&&crush.txt
&&&&&&&&这时将一个ceph集群的 cluster map导入到crush.txt的文件中,这时可以cat这个文件看一下文件中保存了哪些内容,帮助理解下面的内容
&1. 说明:这里首先要说明的是& 一个object要保存三个副本,也就是要保存到三个osd上,当前的ceph集群可以存在N个osd节点,那么怎么来记录这个object保存到哪里了? 这里就要讲述这个伪随机的选择osd过程-----crush。&&&&&&&&
pg 到OSD的映射的过程算法叫做crush 算法,这个算法是一个伪随机的过程,他可以从所有的OSD中,随机性选择一个OSD集合,但是同一个PG每次随机选择的结果是不变的,也就是映射的OSD集合是固定的。
2. crush 因子:
OSDMap管理当前ceph中所有的OSD,OSDMap规定了crush算法的一个范围,在这个范围中选择OSD结合。那么影响crush算法结果的有两种因素,一个就是OSDMap的结构,另外一个就是crush rule。
OSDMap其实就是一个树形的结构,叶子节点是device(也就是osd),其他的节点称为bucket节点,这些bucket都是虚构的节点,可以根据物理结构进行抽象,当然树形结构只有一个最终的根节点称之为root节点,中间虚拟的bucket节点可以是数据中心抽象、机房抽象、机架抽象、主机抽象等如图。
图1-4& osd组成的逻辑树形结构
上图中红色框内的节点都是bucket节点,这些节点都是根据实际情况进行抽象得来的。其实也就是实际中整个物理拓扑结构。这个拓扑里的每个节点都有一个权重值,这个权重值等于所有子节点的权重之和,叶子节点的重量由osd的容量决定,一般设定1T的权重为1。这个权重值在crush算法中也有很重要的地位。
3.bucket类型解释:
对于bucket节点不只是虚设的节点,bucket同样有type。bucket的type有四种类型结构,uniform、list、tree、straw。这四种bucket有着不同的特性,bucket的type设定同样也影响着crush算法。
3.1 uniform 类型:先来介绍下uniform bucket如何来定位数据在哪个子节点的过程。
图1-5 uniform 定位子节点过程
先来说明一下uniform的要素。bucket的所有子节点都保存在item[]数组之中。perm_x 是记录这次随机排布时 x的值,perm[]是在perm_x时候对item随机排列后的结果。r则是选择第几个副本。
定位子节点过程。这时我们重新来看uniform定位子节点的过程。根据输入的x值判断是否为perm_x,如果不是,则需要重新排列perm[]数组,并且记录perm_x=x。如果x==perm_x时,这时算R = r%size,算后得到R,最后返回 perm[R]。
uniform bucket 适用的情况:
a.适用于所有子节点权重相同的情况。因为uniform的bucket在选择子节点时是不考虑权重的问题,全部随机选择。所以在权重上不会进行特别的照顾,为了公平起见最好是相同的权重节点。
b.适用于子节点变化概率小的情况。当子节点的数量进行变化时,size发生改变,在随机组合perm数组时,即使x相同,则perm数组需要完全重新排列,也就意味着已经保存在子节点的数据要全部发生重排,造成很多数据的迁移。所以uniform不适合子节点变化的bucket,否则会产生大量已经保存的数据发生移动,所有的item上的数据都可能会发生相互之间的移动。
3.2 list 类型:list bucket的形成过程。list& bucket 不是真的将所有的item都穿成一个链表,bucket的item仍然保存在item数组之中。这时的list bucket 每个item 不仅要保存的权重(根据容量换算而来)weight,还要记录前所有节点的重量之和sum_weight如图,list bucket的每个item的权重可以不相同,也不需要按顺序排列。
图1-6 list bucket 形成过程
list bucket定位数据在子节点的方法。从head开始,会逐个的查找子节点是否保存数据。
&&&&& 如何判断当前子节点是否保存了数据呢?首先取了一个节点之后,根据x,r 和item的id 进行crush_hash得到一个w值。这个值与sum_weight之积,最后这个w再向右移16位,最后判断这个值与weight的大小,如果小于weight时,则选择当前的这个item,否则进行查找下一个item。
图1-7 list bucket 定位数据过程
list bucket使用的情况:
a.适用于集群拓展类型。当增加item时,会产生最优的数据移动。因为在list bucket中增加一个item节点时,都会增加到head部,这时其他节点的sum_weight都不会发生变化,只需要将old_head 上的sum_weight和weight之和添加到new_head的sum_weight就好了。这样时其他item之间不需要进行数据移动,其他的item上的数据 只需要和 head上比较就好,如果算的w值小于head的weight,则需要移动到head上,否则还保存在原来的item上。这样就获得了最优最少的数据移动。
b.list bucket存在一个缺点,就是在查找item节点时,只能顺序查找 时间复杂度为O(n)。
3.3 tree 类型:tree bucket 会借助一个叫做node_weight[ ]的数组来进行帮助搜索定位item。首先是node_weight[ ]的形成,nodeweight[ ]中不仅包含了item,而且增加了很多中间节点,item都作为叶子节点。父节点的重量等于左右子节点的重量之和,递归到根节点如下图。
图1-8 tree bucket的形成过程
tree bucket的搜索过程,通过一定的方法形成node tree。这tree的查找从根节点开始直到找到叶子节点。当前节点的重量weight使用crush_hash(x,r)修正后,与左节点的重量left_weight比较,如果比左节点轻 则继续遍历左节点,否则遍历右节点如下图。所以该类型的bucket适合于查找的,对于变动的集群就没那么合适了。
图1-9 tree bucket选择过程
3.4 straw类型:这种类型是一种抽签类型的bucket,他选择子节点是公平的,straw和uniform的区别在于,straw算法考虑了子节点的权重,所以是最公平的bucket类型。
图 1-10 straw bucket的形成过程
straw bucket首先根据每个节点的重量生成的straw,最后组成straw[] 数组。在straw定位副本的过程中,每一个定位都需要遍历所有的item,长度draw = crush(x,r,item_id)*straw[i]。找出那个最长的,最后选择这个最长,定位到副本。
4. crush rule介绍:
crush rule主要有3个重点:a.从OSDMap中的哪个节点开始查找,b.使用那个节点作为故障隔离域,c.定位副本的搜索模式(广度优先 or 深度优先)。
&rule&replicated_ruleset&&&&&&&&&&&&&&&&&&&&&&&&&&&&#规则集的命名,创建pool时可以指定rule集{&&&&ruleset&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#rules集的编号,顺序编即可&&&&type&replicated&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#定义pool类型为replicated(还有esurecode模式)&&&&min_size&1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#pool中最小指定的副本数量不能小1\
max_size&10&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#pool中最大指定的副本数量不能大于10&&&&
step&take&default&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#定义pg查找副本的入口点
&step&chooseleaf&&firstn&&0&&type&&host&&&&&&&&&#选叶子节点、深度优先、隔离host&&&&step&emit&&&&&&&&#结束}
pg 选择osd的过程,首先要知道在rules中 指明从osdmap中哪个节点开始查找,入口点默认为default也就是root节点,然后隔离域为host节点(也就是同一个host下面不能选择两个子节点)。由default到3个host的选择过程,这里由default根据节点的bucket类型选择下一个子节点,由子节点再根据本身的类型继续选择,知道选择到host,然后在host下选择一个osd。
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。7381人阅读
OpenStack Non-Networking(50)
Ceph的基石CRUSH算法与一致性哈希( by quqi99 )
作者:张华& 发表于:
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
http://blog.csdn.net/quqi99 )
&&&&&&&&& Swift和amzon的分布式存储就使用了一致性哈希算法,一致性哈希算法可见我的另一篇博客:http://blog.csdn.net/quqi99/article/details/7438258
&&&&&&&&& 这里有一篇讲Ceph的CRUSH算法的文章&& ,但是没有把CRUSH和一致性哈希算法有什么区别说清楚。搜了一下,这篇文章《Ceph: A Scalable, High-Performance Distributed File System,
& 有一段话如下:
&&&&&&& CRUSH resembles&. While consistent hashing would use a flat server list to hash onto, CRUSH utilizes a server
node hierarchy (shelves, racks, rows) instead and enables the user to specify policies such as &Put replicas onto different shelves than the primary&.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:984366次
积分:12170
积分:12170
排名:第670名
原创:260篇
转载:10篇
评论:274条
(8)(6)(4)(2)(8)(4)(3)(3)(3)(4)(7)(4)(1)(2)(1)(4)(6)(5)(1)(2)(1)(3)(3)(7)(2)(6)(7)(7)(1)(3)(8)(7)(13)(6)(1)(2)(3)(1)(9)(3)(2)(1)(1)(4)(2)(6)(2)(1)(1)(2)(5)(2)(4)(1)(1)(1)(2)(2)(4)(5)(5)(5)(6)(1)(1)(4)(1)(1)(2)(3)(1)(1)(1)(3)(4)(1)(4)(4)(4)(7)IBM Bluemix
点击按钮,开始云上的开发!
developerWorks 社区
对于以基础架构即服务形式部署和设计云计算产品的公司而言,数据复制和存储机制仍然是确保为客户提供完整性和服务连续性的实际前提条件。云计算提供了一种模型,其中数据的位置没有其他基础架构模型中那么重要(比如在一些模型中,公司直接拥有昂贵的存储硬件)。Ceph 是一个开源、统一、分布式的存储系统,提供了一种便捷方式来部署包含商用硬件、低成本且可大规模扩展的存储平台。了解如何创建一个 Ceph 集群(从单一点实现对象、块和文件存储)、Ceph 的算法和复制机制,以及如何将它与您的云数据架构和模型相集成。作者提出了一种将 Ceph 集群集成到 OpenStack 生态系统中的简单而又强大的方法。
, 云计算顾问
Razique Mahroua 在一家专注于云解决方案的托管公司担任系统管理员和顾问,目前正参与多个开源项目,是官方的 OpenStack 文档核心团队的一员。他拥有广泛的经验,从云解决方案、实现(IaaS、PaaS)和副产品(比如数据集群),到网络高可用性和数据完整性。他目前正在帮助多家公司寻找围绕云解决方案的最佳实践
Ceph 是一个符合 POSIX (Portable Operating System for UNIX®)、开源的分布式存储系统,依据 GNU 次通用公共许可而运行。该项目最初由 Sage Weill 于 2007 年开发,该项目的理念是提出一个没有任何单点故障的集群,确保能够跨集群节点进行永久数据复制。与在任何经典的分布式文件系统中一样,放入集群中的文件是条带化的,依据一种称为 Ceph Controlled Replication Under Scalable Hashing (CRUSH) 的伪随机的数据分布算法放入集群节点中。
Ceph 是一种有趣的存储替代方案,这得益于它实现的一些概念,比如元数据分区,以及一种复制或放置组策略(将一系列对象聚合到一个分组中,然后将该分组映射到一系列对象存储后台进程 (OSD))。
这些特性支持自动扩展、恢复和自主管理集群,因为他们使用以下绑定(在不同的级别上)提供了与您的 Ceph 集群的交互方式:
Reliable Autonomic Distributed Object Store (RADOS) 网关是一种 RESTful 接口,您的应用程序可与其通信,以便将对象直接存储在集群中。
librados 库是一种访问 RADOS 的便利方式,它支持 PHP、Ruby、Java™、Python 和 C/C++ 编程语言。
Ceph 的 RADOS 块设备 (RBD) 是一个完全分布式的块设备,它使用一个 Linux® 内核和一个 Quick EMUlator (QEMU)/基于内核的虚拟机 (KVM) 驱动程序。
原生 CephFS 是一个分布式文件系统,全面支持 Filesystem in Userspace (FUSE)。
中所示,Ceph 生态系统可分解为 5 个组成部分:
librados 库RADOS 网关RBDCephFS集群中的各种节点图 1. Ceph 生态系统Ceph 生态系统原生支持许多与其交互的方式,这使得在已运行的基础架构中集成它变得既轻松又便捷,即使它执行的是一个在统一项目文件中提供块和对象存储功能的复杂任务。
接下来我们来看一下组成 Ceph 的各个部分以及它们在 Ceph 中分别扮演的角色。
RADOS 对象存储 表明 RADOS 对象存储是存储集群的基础。对于通过众多客户端或网关(RADOSGW、RBD 或 CephFS)执行的每个操作,数据会进入 RADOS 或者可以从中读取数据。图 2 显示了 RADOS 集群,它包含两个后台守护进程:Ceph 对象存储后台进程 (OSD) 和维护集群映射的主要副本的 Ceph 监视器。
图 2. The RADOS 对象存储集群映射描述了对象块的物理位置,以及一个将设备聚合到物理位置的 “桶” 列表。该映射由 Ceph 的高级放置算法控制,该算法在物理位置上建模逻辑位置。图 3 描绘了集群内的 “池”,即存储对象的逻辑分区。每个池被动态映射到 OSD。
图 3. RADOS 位置分组现在让我们看看第一组后台进程 OSD,然后再看看监视器,最后看看属于 CephFS 分布式文件系统的 Ceph 元数据服务器。
OSDOSD 是访问文件系统并向其中写入数据的后台进程,它提供了通过集群网络访问文件系统的能力。要让集群正常运行,Ceph 开发人员建议使用 XFS(Silicon Graphics 日志文件系统)或 B 树文件系统 (Btrfs) 作为用于对象存储的文件系统。也可使用第 4 代扩展文件系统 (ext4),但它未提供 XFS 和 Btrfs 为 Ceph 提供的功能。
在本示例中,XFS 部署在所有存储节点上。图 4 演示了 Ceph OSD 如何与物理存储交互。
图 4. RADOS OSD监视器在 RADOS 集群中,Ceph 监视器后台进程 (ceph-mon) 位于 OSD 旁边。监视器是一些后台进程,客户端通过与这些后台进程进行通信来操作存储在集群中的数据。这是 Ceph 提出的一种创新方法:无需联系一个管理数据集群访问的集中的元数据服务器,这些轻量型后台进程向客户端提供集群映射,并处理与外部应用程序的所有通信。ceph-mon 还管理集群中的数据一致性。监视器根据 Paxos 协商协议来进行操作,运行至少 3 个 ceph-mon 实例是您的集群设置的前提条件。
图 5 给出了客户端通过监视器后台进程与集群交互的图像。
图 5. RADOS 监视器元数据服务器Ceph 使用的最后一个堆栈是 Ceph 元数据服务器,它通过 ceph-mds 后台进程公开,该后台进程存储了 CephFS 的元数据。该元数据与您在其他文件系统中看到的元数据相同,这些元数据包括文件所有者、时间戳、权限等。元数据后台进程公开了一个符合 POSIX 的分布式文件系统,并将元数据存储在 RADOS 中。
请注意,元数据服务器本身并没有为客户端提供文件;这消除了集群中的任何单点故障。
图 6 显示了 ceph-mds 在使用 CephFS 时所扮演的角色。
图 6. Ceph 元数据服务器CRUSH 算法Ceph CRUSH(Controlled Replication Under Scalable Hashing)是一个负责集群中的数据放置和检索的算法。存储客户端和 OSD 都使用 CRUSH 算法来执行数据放置和分布计算,没有依赖于可能会在集群中引入单点故障的中央查找表。通过这种方式,CRUSH 减轻了集群工作负载,将工作分配给客户端和集群中的 OSD。
考虑到该算法的性质,数据位置可由客户端本身明确地计算,这能够消除维护集群对象的高度可用的位置映射的需求。换句话说,您的集群需要的负载比经典集群要少一些。
拓扑结构和基础架构感知是 CRUSH 的另一个创新功能。从逻辑上讲,OSD 嵌套在一个组件分层结构中,比如机架或交换机,这使得根据客户端亲和度来隔离故障硬件区域或分区成为可能。CRUSH 映射描述了 OSD 和客户端计算的对象位置;它由轻量型的节点监视器(ceph-mon 后台进程)维护,该进程的惟一工作就是在基础架构更改时调整和传播该映射。这种类型的可扩展模型与经典的数据集群模型是相反的:客户端通常仅请求数据,而集群执行所有复杂的位置计算。最后,元数据由元数据服务器处理并由客户端访问。
下一节提供在正运行的 OpenStack 云中的 CephFS 使用和集成的示例。第一部分介绍如何将 CephFS 部署为您实例的共享存储;第二部分介绍 Glance 镜像服务在 RADOS 中原生地放置和检索镜像的方式。
使用 CephFS 作为云中的共享实例存储得益于 Ceph 的众多网关,您可以通过许多方式轻松地集成 Ceph 集群。例如:您可以使用 Ceph 作为使用原生 CephFS 的实例目录的后端。或者支持您的 Glance 镜像存储库(Ceph 现在集成为 Glance 的一个管道)。甚至使用 Ceph 作为您的永久性卷后端的强大而又可靠的基础(也可以实现原生集成)。
Ceph 社区在该技术的透明集成上取得了巨大成就,这使得 Ceph 不仅能够保护您的云数据,还能够提供类似的管理解决方案,为管理员提供了设计创造性的实现的机会,但又不会牺牲性能和遇到潜在的不稳定性,因为 Ceph 的设计不允许出现单点故障。
本节描述了两种类型的实现:使用 CephFS 作为您的实例的后端以及 Ceph 与 Glance 的原生集成。对于本文,我假设您已有两个专用于 OpenStack 实例的服务器,并且两个服务器都能够挂载和同时访问 CephFS 磁盘。我还假设您已经有一个健康的、正在运行的 Ceph 集群。我的设置基于 Ubuntu Server Precise 12.04,但 CephFS 可用于许多 Linux 平台。
可在两个计算节点上运行以下命令,安装 CephFS 需要的组件如下:
sudo aptitude install ceph-fs-common ceph-fuse所有依赖包都已安装。您需要一个 Ceph 管理员密钥(用于测试之用途),我使用了管理员帐户,但在生产环境中应创建一个专门的用户。要获取密钥,可运行以下命令:
sudo ceph-authtool --print-key /etc/ceph/keyring.admin
AQDVGc5P0LXzIhAA5C020gbdrgypSFGUpG2cqQ要停止节点上的计算服务,可运行以下命令:sudo service nova- sudo service libvirt-bin stop将您的实例目录的内容复制到 CephFS 中,然后将它挂载到 nova-compute 所使用的位置:
sudo mount -t ceph <<ip-of-ceph-mon1:6789,ip-of-ceph-mon-X:6789:/ \
/mnt/ -o name=admin,secret=AQDVGc5P0LXzIhAA5C020gbdrgypSFGUpG2cqQ==如果对基础镜像使用 QEMU Copy On Write (Qcow2) 格式,那么可以使用以下命令:
mkdir /mnt/_base && for i in $( ls /var/lib/nova/instances/_base/); \
do sudo qemu-img covert -O qcow2 $i /mnt/_base/$i; done
sudo cp -r /var/lib/nova/instances/instance-* /mnt现在可卸载 (/mnt) 并将 CephFS 卷重新挂载到正确的位置上:
sudo mount -t ceph <<ip-of-ceph-mon1:6789,ip-of-ceph-mon-X:6789:/ \
/var/lib/nova/instances/ -o name=admin,secret=AQDVGc5P0LXzIhAA5C020gbdrgypSFGUpG2cqQ==
sudo chown nova. /var/lib/nova/ \
service libvirt- service nova-compute start瞧!您目前在两个计算节点之间已经拥有高度可用的共享存储,并且已经使得一些特性(比如迁移)或高可用性恢复场景成为可能。
下一节将介绍如何启动从第一个计算节点到第二个计算节点的迁移。
实时迁移您的实例现在您已拥有实例的共享存储,可在节点之间启动一次实时迁移。如果希望减轻一个计算节点上的负载,迁移非常有用。一定要按照相关过程来启用实时迁移(请参见 ,获取该信息的链接)。使用 Nova 列表获取您的实例 ID 并发起实时迁移:
nova live-migration 0a2419bf--98d4-98ef66c43d43 compute-node-B经过一两秒后,这些实例应会在第二个计算节点上运行。接下来看看您基础架构中的 Ceph 的另一个集成案例。
RADOS-Glance 集成Glance 是一个镜像服务,能够对其镜像使用多个后端存储系统。编辑 /etc/glance/glance-api.conf 并更新以下配置选项,以便在 Glance 与 RADOS 之间实现集成:
default_store = rbd
rbd_store_user =
ceph-glance rbd_store_pool = glance-images接下来,创建一个 Ceph 池和用户:sudo rados mkpool glance-
sudo ceph-authtool --create-keyring /etc/ceph/openstack/glance.keyring
sudo ceph-authtool --gen-key --name client.ceph-glance --cap mon 'allow r' \
--cap osd 'allow rwx pool=glance-images' /etc/ceph/openstack/glance.keyring
sudo ceph auth add client.ceph-glance -i /etc/ceph/openstack/rbd.
sudo chown glance:glance /etc/glance/rbd.keyring重新启动 Glance 服务:cd /et/init.d; for i in $( ls glance-* ); do
sudo service $ done您现在可以上传将在您的 Ceph 集群中直接分发和放置的镜像了!
结束语我介绍了一个 Ceph 集群并描述了集群中的每个组件的作用。Ceph 提出的创新性方法不仅使建模高度可用并且可靠的存储架构成为可能,而且还支持轻松扩展您的基础架构。
Ceph 是一个活跃的项目,它已经非常成熟,被视为分布式存储解决方案的可靠选择。对于寻找高效而又完备的解决方案来管理数据的公司而言,该项目是一个创造性的答案:从保护到扩展存储产品,组织可以利用 Ceph 所公开的大量库和网关,为其客户提供新的产品和管理其数据的新方式。
参考资料 以下资源可扩充您关于此主题的知识:
Sage Weil 撰写的 “” 介绍了 Ceph 的目标和特性。M. Tim Jones 撰写的 “” 详细探讨了 Ceph 架构,介绍了概念和底层机制。 可帮助您为云配置实时迁移。白皮书 “” 详细剖析了 CRUSH 数据分布算法。该文章为 PDF 格式。忘记其他任何事也不要忘记 Jim O'Reilly 所说的 “Ceph 在一个统一系统中独特地实现了对象、块和文件存储”(来自他的专栏 “”,Enterprise Conversations,2013 年 2 月)。
M. Tim Jones 撰写的 “” 介绍了使用 OpenStack 相比其他基础架构即服务解决方案的优势。访问 。
在 developerWorks ,发现和分享构建其云部署项目的开发人员的应用程序和服务知识和经验。
:观看演示,从为初学者准备的产品安装,到为经验丰富的开发人员准备的高级功能。
以下资源可帮助您完成本文中的任务:
提供了您学习和发现 Ceph 和它的组件所需的所有资源和材料。 是关于 OpenStack 项目系列的信息、社区项目行文、文档以及与 OpenStack 相关的所有其他信息的惟一来源。获取 ,开始部署您的第一个分布式存储系统。从官方 Ubuntu 网站下载 ,这是 Ubuntu 服务器发行版。访问 。
以最适合您的方式 :下载产品试用版,在线试用产品,在云环境中使用产品,或者在
中花几小时学习如何高效地实现面向服务的架构。
在 IBM developerWorks 社区中 、共享或探索 Ceph。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
为灾难恢复构建应用,赢取现金大奖。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Cloud computingArticleID=941327ArticleTitle=将 Ceph 存储集群集成到 OpenStack 云中publish-date=君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
ceph crush算法介绍
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 ceph osd crush add 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信