前言:

ceph是一个高性能、可自我管理和可伸缩的分布式存储系统,通过单一系统提供了对象存储、块存储和文件系统三大接口,在云计算领域应用广泛。

ceph创新地引入了crush算法,客户端通过crush算法便能计算出目标osd,摆脱了中心元数据节点的依赖,随着集群规模的增大,并不会影响crush算法的性能,这也是ceph的一大优点。

通过添加磁盘扩容集群时,ceph能自动完成数据迁移,达到集群数据动态平衡,这又是ceph的一大优点,但今天要聊的不是如何扩容,而是如何做到扩容而不产生数据迁移。

 

ceph如何做到添加新osd而不产生数据迁移

ceph采用存储池保存数据,通过crush rule指定osd(一个物理磁盘对应一个osd)集合,存储池通过关联一个crush rule便指定了osd的范围。crush rule涉及的osd来自于osd tree,ceph扩容就是添加新osd到osd tree中,ceph默认有一个名为default的osd tree。osd tree新增加了osd,所以数据要迁移到新的osd,达到数据平衡。那么只要新添加的osd不出现在原来的osd tree,数据就不会产生迁移。这就要新建一个osd tree来管理新添加的osd了,接下来就看看如何新添加一个osd tree。

 

重命名default osd tree

通过ceph osd tree可查看现有的osd tree情况:

 

如果是通过ceph-deploy、ceph-ansible等工具部署ceph,osd默认是添加到叫default的osd tree中,所以可以重命名原来叫default的osd tree,再新建一个叫default的osd tree,这样新添加的osd就自动添加到default中了。

首先第一步是重命名原来的default osd tree,指令为:

ceph osd crush rename-bucket default 新名称
1.
重命名default不会影响已经关联的crush rule,因为osd tree的id不会随着重命名而改变,crush rule通过id标识osd tree。

重命名原来类型为host的bucket,指令为:

ceph osd crush rename-bucket 旧名称 新名称
1.

新建osd tree

添加root类型的bucket:

ceph osd crush add-bucket default root
1.
新建一个类型为root名叫default的bucket(ceph将机房、主机、磁盘这些都统称为bucket)。

把现有的主机添加到default下,指令为:

ceph osd crush add-bucket host名称 host
1.
把所以host类型的bucket添加到default下,指令为:

ceph osd crush move host名称 root=default
1.
这样便完成default osd tree的新建了:

 

这样新添加的osd就会添加到default下面了,原来的old_default不会受到新osd的影响,crush_rule的osd集合不会发生变化,数据自然不会发生迁移了。

 

结束语

ceph做到扩容而不产生数据迁移的方法有多种,新建osd tree只是其中一种,你学会了吗?

以上就是关于今天的全部内容,下期将给大家带来《简述关于runC之运行容器》,敬请期待~

-----------------------------------
©著作权归作者所有:来自51CTO博客作者mj谈云技术的原创作品,请联系作者获取转载授权,否则将追究法律责任
ceph如何做到添加新osd而不产生数据迁移
https://blog.51cto.com/u_15343792/5092529

发表评论

邮箱地址不会被公开。 必填项已用*标注