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共享出去,那么用户看到的就是一个全局命名空间了,这个是用本地子目录映射的方式来实现统一命名空间,技术难度小,难点在于跟客户沟通好数据的层级结构,如果客户能够自己随意增加目录,那么更好实现了,随意的将目录分配到两个集群即可,最终能达到满意的效果就行
当然主要还是需要客户能够接受你的方案,海量小文件的情况下,分开到多个集群当然会更好些,并且集群万一崩溃,也是只会影响局部的集群了
总结
我们在利用一些新的技术的时候我们很多时候关注的是他最好的那个点,而这个点有的时候反而阻碍了我们的想法,比如集群,那就是把所有硬盘管理起来,搞成一个集群,那么为什么不能往上再走一层,我用管理的方式把多套集群在管理的层面组合成一个集群池呢?然后从多个集群里面来分配我们需要的资源即可
变更记录
| Why | Who | When |
|---|---|---|
| 创建 | 武汉-运维-磨渣 | 2017-03-29 |
Ceph如何实现文件系统的横向扩展的更多相关文章
- ext3是对ext2文件系统的一个扩展高性能日志文件系统
嵌入式开发者所做的最重要的决定之一就是部署哪种文件系统.有些文件系统性能比较高有些文件系统空间利用率比较高,还有一些文件系统设备故障或者意外断电后恢复数据比较方便. linux文件系统概念 分区 分区 ...
- presto的动态化应用(一):presto节点的横向扩展与伸缩
一.presto动态化概述 近年来,基于hadoop的sql框架层出不穷,presto也是其中的一员.从2012年发展至今,依然保持年轻的活力(版本迭代依然很快),presto的相关介绍,我们就不赘述 ...
- elasticsearch介绍集群,模拟横向扩展节点、节点宕机、改变分片
出处:[http://www.cnblogs.com/dennisit/p/4133131.html] ,防楼主删博,故保留一份! elasticsearch用于构建高可用和可扩展的系统.扩展 ...
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
- SignalR学习笔记(五) 横向扩展之SQL Server
当一个Web应用程序达到一台服务器能力限制,即请求处理数量限制之后,有2种解决方案:纵向扩展和横向扩展. 纵向扩展即用更强的服务器(或虚拟机),或为当前的服务器添加更多的内存,CPU等 横向扩展即添加 ...
- puppet 横向扩展(三)
Table of Contents 1. 概述 2. 实验环境 3. 实验步骤 3.1. 机器B 的配置 3.2. 机器A 的配置 3.3. 测试配置结果 概述 横向扩展实验之三 – 将CA 认证服务 ...
- puppet 横向扩展(二)
Table of Contents 1. 概述 2. 实验环境 3. 实验步骤 3.1. 机器B 的环境 3.1.1. 安装puppetmaster 以及 apache passenger 3.1.2 ...
- puppet 横向扩展(一)
目录 1. 概述 2. 实验环境 3. 实验步骤 3.1. 创建puppetmaster的rack环境 3.2. 配置文件设置 3.3. 补充说明 3.4. 测试配置结果 3.4.1. 默认的负载均衡 ...
- 转mysql横向扩展和纵向扩展
Scale-up(纵向扩展)和Scale-out(横向扩展)的解释 谈到系统的可伸缩性,Scale-up(纵向扩展)和Scale-out(横向扩展)是两个常见的术语,对于初学者来说,很容易搞迷糊这两个 ...
随机推荐
- CentOS 7基础命令介绍
01 CentOS基础命令介绍 重所周知,Linux是一个主要通过命令行来进行管理的操作系统,即通过键盘输入指令来管理系统的相关操作,包括但不限于编辑文件.启动/停止服务等.这和初学者曾经使用的Win ...
- oh my zsh 常用插件
date: "2020-10-18T12:36:00+08:00" title: "oh my zsh 常用插件" tags: ["zsh" ...
- css中伪元素before或after中content的特殊用法attr【转】
[原文]https://segmentfault.com/a/1190000002750033 CSS中主要的伪元素有四个:before/after/first-letter/first-line,在 ...
- docker安装部署neo4j
docker部署neo4j 环境:ubuntu16.04LTS docker安装 详见:菜鸟教程(docker安装) docker国内镜像源配置 第一步,进入阿里云,登陆后点击左侧的镜像加速,生成自己 ...
- 反射(Reflection)
Java学习笔记--反射(Reflection) 关于反射 能够分析类能力的程序称之为反射(Reflection) 反射机制可以用来: 在运行时分析类的能力 在运行时检查对象,例如:编写一个适合所有类 ...
- Anderson《空气动力学基础》5th读书笔记 第5记——推导二维机翼的空气动力学系数
机翼的受力分析图 我们知道,空气对一个物体产生的升力和阻力以及力矩源于作用在整个物体上的压力分布和剪切力分布,所以我们分析上图可知(取单位展长的机翼): 对于上表面: ...
- maven项目导入并运行
idea导入maven工程流程 找到要导入的文件位置 打开导入 选择manve 一直next就好 选择jdk,选择自己的jdk--home就可以 点击finished 等待坐标导入,查看右侧maven ...
- ssh免密登陆 2
应用场景之一:java 程序调用shell脚本,通过ssh 免密登陆数据库服务器,进行数据的抽取打包工作. 免密设置步骤: 1.客户端生成公私钥,在任意目录下执行命令ssh-keygen(一路回车默认 ...
- DiskLruCache和Lrucache缓存bitmap
三级缓存,先在内存Lrucache中查找缓存,没有就去外存DiskLrucache中查找,再没有就下载,Lru不会自动删除,所以要设置最大缓存内存,后台运行Lrucache不会消失,关闭程序Diskl ...
- nio DirectByteBuffer如何回收堆外内存
概述 使用了nio框架的应用,比如服务框架,利用nio建立长连接通信,他们会使用DirectByteBuffer来分配堆外内存,也就是本地直接内存,这个内存的回收不由gc直接维护,我们通常所说的gc, ...