ceph在品高云中的实践
ceph简介
ceph是业界目前人气最高的开源存储项目之一,关于其定义在官网是这样的:“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”
翻译一下就是:Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统。这里面有两个重点,一是分布式的,关于这点我的理解是指其无中心解构和无理论上限系统规模,体现着扩展性与大规模,早在2013年,其在Dreamhost公司最大部署规模已达3PB;二是统一的,关于存储我们明白一般有三种功能即对象存储、块存储和文件存储,而这三种功能在ceph上都可以做统一的交付,所以它几乎可以覆盖了绝大部分企业对存储的需求。
整体架构
从下向上看,我们基本可以把ceph分为三个层次(不包括上层应用),分别是:
1)RADOS(Reliable, Autonomic, Distributed Object Store)即可靠的、自动化的、分布式的对象存储,顾名思义,这是一个基础的对象存储系统,也就是说所有用户写入的数据最终是落在这里的;
2)LIBRADOS 基础库,这一层可以理解是对RADOS进行封装和抽象,并向上层直接提供API,以便用户可以直接对RADOS进行开发,而其也支持多种开发语言,例如C/C++/Java/Python/Ruby和PHP等,需要说明的是因为RADOS是一个对象存储系统,因此librados实现的API也只是针对对象存储功能;
3)高层应用接口,这一层分为三个部分:RADOSGW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System),其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口,关于其介绍可以直接参见图中介绍,总而言之这三者就是向外提供对象存储、块存储和文件存储三种存储的接口.
RADOS运行说明
了解了基础架构后我们不难发现,RADOS其实是ceph的核心,而RADOS其实有两个重要组件分别是OSD和monitor,还有一个可选组件MDS,其中OSD数量一般很多(ceph官方推荐每个OSD对应一个SATA盘),是用来完成数据存储和维护的,monitor则是若干个负责完成系统状态检测和维护的组件。
这里是一张对象写入的过程图,在图中每个笑脸代表一个对象,在开始写入时Client端会跟Monitors通信,获取Cluster Maps信息,然后通过CRUSH算法算出每个Object存储的OSD位置,直接与OSD通信,写入Object数据。也就是说只要有当前集群的拓扑结构,ceph的客户端就能直接计算出文件的存储位置,直接跟OSD 通信获取文件而不在需要询问文件位置,从而避免了单点。另外ceph采用了无Master设计,对象的复制,集群的扩容,数据的迁移,故障的检测和处理等功能由OSD提供, 既避免了单点失败,又提升了集群扩展性,这也为ceph的稳定高质提供了底层条件。
三个特性
在开头我们说“Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统”,其实这里面隐含了三个特性:
1)高扩展性:ceph可以针对OSD和Monitor集群的动态可扩容,每当有新的OSD加入后,Monitor集群会通过两层Map机制(pool, object) -> (pool, PG) -> OSD set)来有效的隔离了集群扩容对上层client的影响,总之底层OSD的扩展对于上层client来说是完全明晰的;
2)高可靠性:针对安全问题,Ceph会在集群中存储同一数据的多个副本,用户也可以通过自定义副本数,来保证在某些设备故障后数据还可用,对于副本存储的逻辑关系,可以在ceph中进行设置,达到不同主机、不同机架、甚至不同机房的互备效果,除此之外,Ceph能自动探测到OSD/Monitor的故障,并自行恢复,有效减少了单设备节点的稳定性对集群的影响。
3)高性能:Ceph中通过文件切分和CRUSH算法,保证数据chunk分布基本均衡,同时Ceph的无元数据信息的设计(CephFS除外),保证了Client可以根据cluster map,通过固定算法确定数据的位置信息,避免了单个元数据节点的性能瓶颈,可以提供非常高的并行化IO性能,其原因是Client端数据经过切分为Objects后,可以同时与多个OSDs交互,写入数据。
ceph在品高云中的实践
ceph在品高云是作为云底层资源池分布式存储的地位存在的,针对RADOSGW、 RBD和Ceph FS 三种都会有很好的支持,而就目前技术成熟度来看,其中块存储RBD是最为成熟的并且也是使用率最高的,以下是ceph作为一个存储类型在品高云中的使用截图
在详情中可以针对名称、Monitor、存储调度标记等进行修改,并且可以将云平台的用户同步到ceph RADOSGW的用户接口中;
当我们需要创建一个实例或者存储卷的时候,可以直接选择将其创建在ceph存储上,这里使用的其实就是ceph的RBD块存储服务;
当然,对于ceph FS的使用则是可以将一个文件目录直接进行挂载,然后可以在其中存储文件,以下是在一台品高云主机中部署ceph FS的截图;
ceph调优
Ceph是一个复杂的系统,官方的默认配置能保证系统基本运行,但不一定能贴合用户实际需求,达到最大化用户物理系统性能的要求,所幸Ceph提供了很多的配置参数来允许用户订制自己的分布式存储系统,这意味着在赋予用户这个便利性的同时,用户可以自行调优。
我们对ceph物理机的配置建议大致如下:
1). 200G+内存(保证良好的系统运行状态)
2). 32核Intel Xeon处理器(保证良好的系统运行状态)
3). 1:5的SSD和SATA配比,SSD分区做Journal,SATA盘做OSD(实践产生的最高性价比)
3). PCIE的存储卡提供超高性能存储Pool (性能更高)
4). 万兆网卡提供Ceph的Cluster Network通信(满足分布式存储之间的通信需求)
5). 千兆网卡提供Ceph的Public Network通信(保证性能同时降低成本)
并且结合我们的研发测试与实践,形成了适合品高云的ceph调优经验,基本有以下几个方面:
1). BIOS设置
2). Linux及磁盘参数调优
3). XFS相关参数调优
4). filestore调整
5). journal性能优化
6). osd相关参数调优
7). crushmap优化,给osd划分合理的pools,故障域切分,降低数据丢失概率
8). RADOSGW的接口功能增加,适应云平台需求
ceph监控
ceph是一个具备自我修复功能的高稳定平台,但这不能降低其作为一个完善的存储系统监控的必要性,因为我们不能长期依靠人工来发现问题,所以针对ceph品高云也有一套完善的监控系统。
首页有针对存储状态、容量、版本信息、同步状况、存储读写的监控信息;
并且可以针对Monitor、osd、MDS、POOL以及PG等进程组件进行监控,一旦发现问题,可以及时排查处理。
总而言之,ceph是一个大型分布式存储系统,品高云对其的研究优化将是一个持续的过程,借助在众多客户中的部署实践和需求改善,ceph在品高云的运行状态将会越来越完善。
ceph在品高云中的实践的更多相关文章
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- 05-雷海林-mysql备份原理与在TDSQL中的实践
05-雷海林-mysql备份原理与在TDSQL中的实践 下载地址: http://files.cnblogs.com/files/MYSQLZOUQI/05-%E9%9B%B7%E6%B5%B7%E6 ...
- 关于Jaccard相似度在竞品分析中的一点思考
上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,跟大家分享一下(项目场景用的类似的场景) 项目场景:分析一个产品的竞品,譬如app的竞品.网站的竞品 ...
- 一致性Hash算法在数据库分表中的实践
最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...
- Jaccard相似度在竞品分析中的应用
上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,效果针对上一版提升了5%左右,跟大家分享一下(项目场景用的类似的场景) 项目场景:分析一个产品的竞品 ...
- 华为云对Kubernetes在Serverless Container产品落地中的实践经验
华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...
- React 与 Redux 在生产环境中的实践总结
React 与 Redux 在生产环境中的实践总结 前段时间使用 React 与 Redux 重构了我们360netlab 的 开放数据平台.现将其中一些技术实践经验总结如下: Universal 渲 ...
- immutable.js 在React、Redux中的实践以及常用API简介
immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark : https://yq.aliyu ...
- Immutable.js 以及在 react+redux 项目中的实践
来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...
随机推荐
- jquery 函数大全
jquery函数大全转载 Attribute:$(”p”).addClass(css中定义的样式类型); 给某个元素添加样式$(”img”).attr({src:”test.jpg”,alt:”te ...
- JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
前 言 絮叨絮叨 这里是JS基础知识集中讲解的第三篇,也是最后一篇,三篇JS的基础,大多是知识的罗列,并没有涉及更难得东西,干货满满!看完这一篇后,相信许多正在像我一样正处于初级阶段的同学, ...
- 团队作业8——Beta 阶段冲刺4th day
团队作业8--Beta 阶段冲刺4rd day 一.当天站立式会议 二.每个人的工作 (1)昨天已完成的工作(具体在表格中) 添加了支付功能,并且对支付功能进行了测试 (2)今天计划完成的工作(具 ...
- 201521123113《Java程序设计》第8周学习总结
1. 本周学习总结 2. 书面作业 本次作业题集集合 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 remove函数中,开始我的写法是 for(int i=0;i<list.s ...
- 201521123069 《Java程序设计》 第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 《JAVA程序设计》第10周学习总结
1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中fin ...
- 201521123092《java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 201521123015 《Java程序设计》第10周学习总结
1. 本章学习总结 你对于本章知识的学习总结 2. 书面作业 一.inally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 答: 4-2中 ...
- s:textarea 标签不能改变大小的解决方案
在s标签写的form中,无法利用rows="50" cols="75"来改变s:textarea大小,cssClass也不管用时: 直接用普通的textarea ...
- Python循环列表删除元素问题
有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到, 比如以下代码 a=[1,2,3,4,5,6]print(a) for i in a: if i==3 or i== ...