Ceph如何实现文件系统的横向扩展

前言

在跟一个朋友聊天的时候,聊到一个技术问题,他们的一个环境上面小文件巨多,是我目前知道的集群里面规模算非常大的了,但是目前有个问题,一方面会进行一倍的硬件的扩容,而文件的数量也在剧烈的增长着,所以有没有什么办法来 缓解这个增长的压力 当时也没想到太多的办法,只是觉得这么用下去风险太大

后来在思考了一段时间后,大概有了一个想法,这个就要看是否能把方案做下去,如果是我自己在用的集群,而非客户,我会这么去用的

方案介绍

方案一

也就是默认的方案,一般来说就是一个主MDS,然后几个备用MDS,整个一个挂载点,全局混用的空间

存在问题:

  • 扩容以后,有大量的数据迁移
  • 所有的元数据请求,只有一个MDS服务,到了巨型数据的时候,可能出现卡顿或MDS卡掉的问题

优点:

  • 全局统一命名空间

方案二:

采用分存储池的结构,也就是将集群内的目录树分配到整个集群的多个相互独立的空间里面

存在问题:

  • 同样是所有的元数据请求,只有一个MDS服务,到了巨型数据的时候,可能出现卡顿或MDS卡掉的问题

优点:

  • 全局统一命名空间下面对应目录到不同的存储池当中,在进行扩容的时候,不会影响原有的数据,基本是没有迁移数据

方案三:

物理分存储池的结构并没有解决元数据压力过大的问题,而元数据的处理能力并非横向扩展的,而文件数量和集群规模都是在横向增长,所以必然是一个瓶颈点

这个方案其实很简单,相当于方案二的扩展,我们在方案二中进行了物理存储池的分离,然后把空间映射到子目录,来实现数据的分离,既然规模能够大到分物理空间,那么我们可以考虑部署多套集群,并且来真正的实现了数据处理能力的横向扩展,因为MDS,可以是多个的了,那么比较重要的问题就是统一命名空间的问题了,怎么实现,这个也简单,主要是跟客户沟通好,让客户接受提出的方案

我们在一些商业系统上面可以看到一些限制,比如单卷的大小最大支持多大,在这里我们需要跟客户沟通好,无限的扩展,会带来一些压力的风险,有方案能够解决这种问题,而这种数据量在之前是没有太多的案例可借鉴的,所以需要人为控制一个目录的最大空间,也就是单套集群的大小,下面举例来说明下

假设我们的空间一期规模为2P,二期规模要4P,三期规模6P 那么我们的命名空间上就分离出三个逻辑空间,也就是对应三套集群

弄清楚客户的存储的目录结构,一般来说客户并不太关心目录的设计,如果能够引导的情况下,可以引导客户,我们需要弄清楚目录可变化的那个点在哪里,举例说明,假如客户的数据可以去按年进行分类的话,数据就可以是

2014
2015 
2016
2017

这样的增长趋势,并且数据量之前的肯定已知,未来可大概估计,并且集群准备存储多少年的数据,也是可大概预估的,那么这个环境我们就先认为到2017的数据我们放在集群一内,2017年以后的数据放在集群二内,那么挂载点是这样的

192.168.10.101:/2014
192.168.10.101:/2015
192.168.10.101:/2016
192.168.10.101:/2017

192.168.10.102:/2018
192.168.10.102:/2019
192.168.10.102:/2020
192.168.10.102:/2021

挂载到本地的服务的机器上 本地创建好目录

/share/2014
/share/2015
/share/2016
/share/2017
/share/2018
/share/2019
/share/2020
/share/2021

然后把上面的集群挂载点按名称挂载到本地的这些目录上面

本地的共享就把/share共享出去,那么用户看到的就是一个全局命名空间了,这个是用本地子目录映射的方式来实现统一命名空间,技术难度小,难点在于跟客户沟通好数据的层级结构,如果客户能够自己随意增加目录,那么更好实现了,随意的将目录分配到两个集群即可,最终能达到满意的效果就行

当然主要还是需要客户能够接受你的方案,海量小文件的情况下,分开到多个集群当然会更好些,并且集群万一崩溃,也是只会影响局部的集群了

总结

我们在利用一些新的技术的时候我们很多时候关注的是他最好的那个点,而这个点有的时候反而阻碍了我们的想法,比如集群,那就是把所有硬盘管理起来,搞成一个集群,那么为什么不能往上再走一层,我用管理的方式把多套集群在管理的层面组合成一个集群池呢?然后从多个集群里面来分配我们需要的资源即可

原文发布于微信公众号 - 磨磨谈(momotan1987)

原文发表时间:2017-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏日暮星辰

Cloudflare 1.1.1.1公共DNS上线Cloudflare Public DNS

31620
来自专栏编程

大型分布式服务器架构原理解析

作为技术人员,我们都知道:几乎所有的项目,都是由简单到复杂,从单一服务器到集群服务器进行开发。但又有多少人知道这其中的技术原理呢?其实,这并不是那么深奥难懂。那...

46990
来自专栏Python爬虫实战

Python爬虫之三:抓取猫眼电影TOP100

运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具:Chrome浏览器

10410
来自专栏DevOps时代的专栏

持续集成和几种工作流

学习有关在软件开发周期中采用持续集成的收益,以及如何使用 jenkins 和 maven 插件去实现。 在一个典型组织中,一个定义明确的 SDLC 实践通常具有...

35690
来自专栏企鹅号快讯

分布式设计与开发-宏观概述

分布式可繁也可以简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多...

22080
来自专栏情醉中国风

基于云安全环境的最佳实践

无论您是打算使用托管服务来处理你们组织的云安全,还是决定创建管理自己的安全项目,至少,将所需的所有信息汇总起来就可能是一项复杂的任务了。为了解决这个问题,我们想...

24290
来自专栏云计算D1net

云自动缩放启动不需要的资源

自动缩放服务能够帮助管理人员识别未充分使用的资源,从而减少公共云成本。了解负载平衡和标记功能是如何最大限度发挥这些优势的。 可扩展性是公共云的基石。但是,正如在...

34340
来自专栏云计算D1net

混合云和多云管理不再难:基础架构即代码来帮忙

随着运维流程变得越来越灵活,IT团队面临着越来越大的复杂度。当应用动态改变时,可以使用敏捷或者持续应用开发。但是当IT资源本身动态变化的时候怎么办呢多云和混合云...

41870
来自专栏源哥的专栏

在线客服技术详解(未完待续)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespac...

40540
来自专栏大数据架构师专家

docker 搭建本地私有仓库

可以看到报错了,提示我们必须使用https,但是此处我们暂时不想做https,该如何解决呢?

13110

扫码关注云+社区

领取腾讯云代金券