crush算法
Ⅰ ceph 强一致性 原子性怎么去测试
ceph 强一致性 原子性怎么去测试
一般这类测试系统设备,都会有一个MSA报告,里面的P/TV、R/T指标要小于某个值(一般是10%),反映这套系统测试结果的可重复性、一致性。此报告参考的标准是ISO/TS 16949:2002。像之前我们用的的致远电子的电机测试系统,就带了个MSA报告,我们验收时要用于参考的。
Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案,转而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。Crush算法有相当强大的扩展性,理论上支持数千个存储节点。
Ⅱ Linux里面ceph是什么
Linux里面ceph
Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。
Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。
Ⅲ 如何基于 Ceph 构建高性能块存储服务
Ceph是一个分布式存储系统,支持对象文件快接口,设计目标是:
• 所有组件横向扩展
• 没有单点故障
• 可以在普通厂商硬件使用
• 所有机制都能自我管理
• 开源
分布式存储的应用场景相对于其存储接口,现在流行分为三种:
1.对象存储: 也就是通常意义的键值存储,其接口就是简单的GET,PUT,DEL和其他扩展,如七牛、又拍,Swift,S3等。
2.块存储: 这种接口通常以QEMUDriver或者KernelMole的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RDB(RDB是Ceph面向块存储的接口)。
3、文件存储: 通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GFS,HDFS这种非POSIX接口的类文件存储接口归入此类。
提到存储的种类就不得不提到另外一个话题:存储不能做统一化吗?因为必须要有多个不同的软件栈去管理不同的存储设备:SSD,SATA等。
Ceph就此提出了不同观点,RADOS提供了基础的存储设备的管理、数据控制流访问的管理,提供的是一个可靠持久的数据存储平台,基于其上,我们可以实现多个不同的接口户来实现面向不同需求的对接,比如对象存储我们有一个单独的库实现去满足不同的存储需要,比如我们块存储是通过RDP来实现。
统一存储并不意味着所有存储都的同一个接口,同一个实现,同一个软件栈,它其实只是使用了同一个设备管理的生命周期和数据访问的有效控制,它提供了一个相对合理,非常适合运维的,利于成本,利于软件可靠性控制的的机制去保证我们的存储的可靠。
举一个例子,大部分存储厂商甚至网络厂商都有一个自己的核心软件栈,如文件系内核。基于其上演化出各种不同的产品线。如果厂商要追求各个产品线的极致是不是就应该每个产品完全独立来追求极致,但事实上一个核心的底层技术栈需要高质量的代码、完备的测试和长期的使用。在Ceph这里,一个分布式系统的并发IO、分布式恢复、数据端到端校验等等关键实现是唯一实现,成熟的系统系统在这些实现上需要经过一定量级和时间的考验,这才是Ceph所谓的统一存储,而不是其他的接口堆叠式开发。
【Ceph和其他开源分布式存储、其他商用存储的区别之处在哪?】
众所周知,很多传统厂商如日立、富士通等存储大厂也采用了Ceph作为它们存储硬件的载体,Ceph能提供企业级的存储服务一定有它的优势,才能让传统的存储厂商弃而采用开源的存储方案。
1、中心化系统我们认为它在数据控制系统方面做的较好,在迁移运维方面提供较好的实现,但却有元数据的瓶颈。在访问数据时需要经过元数据服务器的查询再去寻找相应的数据服务器会在大规模扩展时遇到性能瓶颈问题。
2、全分布式系统虽然提供较好的数据访问能力,能高效处理客户端的LO请求,但是却没有提供一个非常好的数据控制的实现,比如故障处理能力不足,数据恢复的困难,如果跳出中心化的元数据存储系统它没办法做到强一致性的数据恢复。
弹性的数据分布策略和物理拓扑输入实现了高可用性和高持久性,Ceph的高性能重构还体现在利用CRush算法对数进行约束,避免数据分布到所有的集群的一个节点上,利用Ceph设计并提供的一个由CRush算法来支持一个高自由化的存储集群的设计,实现高可靠性,高持久性,高性能。
Ⅳ ceph的crush算法究竟是怎么样的
CRUSH算法通过每个设备的权重来计算数据对象的分布。对象分布是由cluster map和data distribution policy决定的。cluster map描述了可用存储资源和层级结构(比如有多少个机架,每个机架上有多少个服务器,每个服务器上有多少个磁盘)。data distribution policy由placement rules组成。rule决定了每个数据对象有多少个副本,这些副本存储的限制条件(比如3个副本放在不同的机架中)。
CRUSH算出x到一组OSD集合(OSD是对象存储设备):
(osd0, osd1, osd2 … osdn) = CRUSH(x)
CRUSH利用多参数HASH函数,HASH函数中的参数包括x,使得从x到OSD集合是确定性的和独立的。CRUSH只使用了cluster map、placement rules、x。CRUSH是伪随机算法,相似输入的结果之间没有相关性。
Ⅳ 如何在ceph中找出存放的数据
CRUSH算法通过每个设备的权重来计算数据对象的分布。对象分布是由cluster map和data distribution policy决定的。cluster map描述了可用存储资源和层级结构(比如有多少个机架,每个机架上有多少个服务器,每个服务器上有多少个磁盘)。data distribution policy由placement rules组成。rule决定了每个数据对象有多少个副本,这些副本存储的限制条件(比如3个副本放在不同的机架中)。CRUSH算出x到一组OSD集合(OSD是对象存储设备):(osd0, osd1, osd2 … osdn) = CRUSH(x)CRUSH利用多参数HASH函数,HASH函数中的参数包括x,使得从x到OSD集合是确定性的和独立的。CRUSH只使用了cluster map、placement rules、x。CRUSH是伪随机算法,相似输入的结果之间没有相关性。
Ⅵ 一般大家都会选择哪款 SDS 一体机
建议客户选择SDS的时候,首先需要问一下自己两个问题:1、主要应用场景是什么?2、最关注的前三位的技术指标是什么?而且还要清楚SDS发展在什么阶段(目前SDS还处在社会主义的初级阶段),把预期和现实拉得近一些,有些过高的要求在这个阶段SDS还不能提供。
关于SDS技术评价通常包括以下7个维度:可靠性、稳定性、扩展性、功能、性能、易用性、兼容性。
针对SDS块存储前三位技术指标维度为:
三大应用场景都把可靠性和稳定性排在了前两位,之所以这样排列因为存储是IT系统的基石。所谓的可靠性就是局部故障不会导致数据丢失和业务中断,这一点理所应当排在第一位;稳定性是指不会因为局部故障造成性能大幅抖动,给业务响应造成影响,比如说看个小电影中途老卡谁受得了。
说到这有人会问,这两点对于传统阵列是必须和默认的要求?我想说,传统阵列都是昂贵、专用的硬件堆起来,发生硬件故障的概率很低,而SDS大都部署在廉价的标准x86服务器上,x86服务器发生硬件故障的概率要高很多;并且SDS都是分布式系统,要管理几十台、乃至成千上万台x86服务器上,这样发生硬件故障的概率会呈数量级的上升。如何保证大规模分布式系统的可靠性和稳定性也正是SDS首要解决的难点。
Amazon的S3系统由上百万台服务器组成,每分钟都会有很多设备下线和上线,能保证这样大规模集群的可靠性和稳定性,应该没几个厂家有这样的技术吧?
另外还别忘了,SDS还处在“社会主义初级阶段”并不是拿出来一个厂家就能保证几千台服务器的SDS系统可靠和稳定的。
VSI和VDI环境通常规模很大,而且规模增长的速度也较快,所以把扩展性放在了第三位。对于数据库应用,性能是毋容置疑非常重要的一个指标,所以排在了第三位。
眼见未必为实,测试中的那些“猫腻”
终于想清楚我要的SDS长什么样了,忽然又想起一件大事“谁家的产品能达到我的要求呢?”
一个最直接的办法就是拿测试来说吧(测试还是蛮麻烦的一件事,准备测试环境、编写测试规范、查看测试结果……)。或许还有一个偷懒的办法,就是“你们有和我的需求差不多的案例吗?我去问问那家企业用的咋样啊”,但耳听为虚眼见为实,听一面之词总是不踏实。
相比之下测试是一个较为让人放心的办法,但如果你不熟悉SDS的水,同样有些坑你也发现不了,嘿嘿。
好了,下面这一段就是从测试和技术构架角度帮助客户判断关键技术指标优劣。
1、B域、C域,1/3节点损坏和RTO为0
可靠性在SDS上主要体现在两个方面,当集群中磁盘或节点发生故障时,数据会不会丢失?业务会不会中断?中断的时长是多少?
这里有两个指标需要关注:1、容错度,2、故障恢复时间。
先说一下容错度这个指标。
因为主流的SDS都采用副本技术,以三副本为例,丢失1份数据,应该还有2份数据存在,数据不会丢,也就是容错度为1/3个节点。但如果超过1/3的节点同时down机,集群还能工作吗?这个不一定所有厂家都能做到。
很多SDS的容错域都是提前配置好的。以3副本9个节点为例,通常会配置3个容错域ABC、每个容错域各3个节点,每个容错域保存独立的副本数据。例如当以一个容错域A的3台机器都故障时,还有两2个副本存在,数据不会丢失,业务照常运行,这就是通常所说的能容忍1/3节点宕机。这样的要求大多数厂家都能做到,但如果同时B域或者C域也有机器down机呢?这时候多半会出现两副本都丢失情况,系统异常了。
故障恢复时间这个指标也很关键。当系统中发生节点宕机,故障恢复的时间当然越快越好了,最高的要求是故障恢复时间等于0。要实现这个指标很不容易,因为当SDS系统中节点发生故障时,要恢复这个故障,需要做很多事:第一步,发现这个故障;第二步,选出一个节点接替故障节点,并进行数据重构;第三步,重新刷新寻址空间,让客户机能获取数据位置的变化。每一步都需要时间花费,特别对大规模集群来讲,想把故障恢复时间控制得很小更是难上加难。宣称故障恢复时间为零的SDS厂家并不多。
所以故障恢复时间的数量级是衡量一个SDS可靠性等级的一个非常重要的因子。用户可以根据前端业务对故障恢复时间的敏感程度,设立相应的要求标准。
2、Ceph性能抖动的问题
对于SDS来讲,它的稳定性主要关注点在:当系统发生磁盘/节点故障,恢复数据而产生数据迁移时,前端的性能表现是否稳定。
在前面可靠性段落中谈到了,SDS故障恢复有三个步骤,每一步处理不好都会影响性能表现。特别是数据重构和重新寻址这两个环节,会对性能稳定性造成很大的影响。
例如着名的开源产品Ceph,不止一个客户反映当系统中出现节点宕机的情况下,性能下降和波动很厉害,对业务影响很大。只所以出现这个问题首先是和它元数据管理和寻址的方式(Crush算法)有关,即在节点动荡时,元数据(其实是ceph内部保存的资源列表)发生变化,从而导致数据的地址发生变化,最终导致大量的没有必要的数据迁移,规模越大,这个问题暴露的越明显。其次是它数据迁移采用整盘拷贝的方式,会有无效迁移导致的网络带宽的拥挤。
还有一个坑透露一下,有些SDS系统在拔盘或者宕节点时,可以不发生数据重构,当磁盘或者节点重新上线或归位时才重构。因此,稳定性测试时最好观察一下,磁盘或者节点归位后的表现。甚至建议,用频繁的节点上/下线来测试它的稳定性,因为节点抖动还是会时常发生的。
3、VSAN的局限
扩展性很难测试,因为你要准备几百台、上千台的服务器环境是不可能,除非你是土豪,那怎么办?没办法,看构架吧。市场上主流SDS分为有中央元数据管理节点的非对称构架和无中央管理节点的全对称构架两大类,前者相比后者扩展性受限。简单的理解就是“非对称构架”中好比有个指挥官,一个指挥官能管的人比较有限的。“全对称构架”中是没有指挥官的,全凭自觉性,像是一大堆人在干活,一个病了,无需向领导请假,会有另外一个人立马自动接替他的工作。举例证明:VSAN是有中央管理节点的,它官方宣称的单集群支持最大节点数64个;鹏云网络的ZettaStor是无中央节点的,能支持万级的节点数量。因此从具体实例上也能看出,构架决定了其扩展能力。
4、SSD缓冲击穿
目前闪存技术发展得很快,性能比传统磁介质硬盘高了几个数量级,正是因为闪存技术的发展也给SDS造就了可以在性能上PK传统阵列的基础。
如果你很有钱的话完全可以用SSD做主存。但目前SSD价格还较贵,性价比较高的方式是用SSD做缓存,通常一个存储节点上配个几百GB-1TB的SSD做缓存。SSD缓存对性能的贡献在小数据量时会表现的非常好,一旦数据量足够大,SSD被穿透,那就实打实地看落盘(写到硬盘持久化层)的性能表现了。如果你的系统数据量很小,SSD缓存的容量足够你支持业务峰值,那可以多些关注SDS缓存加速的性能表现。如果你的系统数据量很大,那SSD会长时间被穿透,那你就重点一下落盘的性能表现了。
目前SDS厂家在SSD缓存利用效率上,水平都差不太多,没有太多很独到的算法出现。倒是落盘这个环节,因为选择的技术路线不同,表现不一。有的就是差不多发挥原有磁盘的性能,甚至还低;有的利用一些IO算法,把普通磁盘的性能表现提升几倍,像鹏云网络的ZettaStor在落盘时采用了“变随机为半顺序”的IO优化算法,把随机IO裸盘的速度提升了3-5倍。鹏云网络之所以能做这样的IO优化,因为ZettaStor是完全自主开发的。采用开源方案的厂家要实现起来估计会很难,这是要动到其核心文件系统层的。
有些厂家在性能测试时会用很小的卷、很小的数据去测试,看上去IOPS会很高,但真实环境不会是这么小的负载,所以一旦多创建些大卷,进行长时间大数据量的性能测试,SSD被写穿透时,性能立马一落千丈,凤凰变乌鸡了。
不记得那位大咖说过一句话,“不谈延迟的性能测试都是耍流氓”。
看一个系统的延迟小不小,一个是实测,另外从构架上也能看出些端倪。就是看一下它的IO路径是否够短。例如,直接写裸磁盘的总比经过文件系统层转换再写裸磁盘的IO路径短很多吧,这就是为什么Ceph想降低延迟很难的原因所在。众所周知,Ceph的块存储不是直接访问裸磁盘的,而是通过文件系统把裸磁盘转换成块设备给应用的。
Ⅶ 云存储工程师的技能树是怎样的
1. 分块思想。分布式的基本思想就是分而治之,几乎所有的分布式存储系统都会对一个文件切成一个一个的块(block)。
2. 数据分布算法。分布式存储系统需要把所有分割的块对象存储到不同的机器中,这些块应该如何分布使得既能保证数据均匀,又能使节点增加或者减少时尽量减少数据迁移,即数据分布算法,比如crush算法、一致性hash算法等。以前遇到一个面试题大概意思是说有N个文件需要保存到M台机器中,存储策略是什么,最简单的算法就是对文件求hash取模,这样既能保证数据均衡分布,又能高效索引(再去求hash取模就找到了文件存储位置),万一我增加个存储节点该怎么办呢。
3. 冗余副本。一个文件被分割成了若干块后被分布在不同的机器上,万一网络故障或者某台机器挂了,文件就访问不了了,为了保证可用性和可靠性,通常都是通过冗余副本来实现,即一个块会复制成多个相同的块副本(通常3副本),并分布在不同的机器上,这样即使某个块所在的机器访问不了了,也能通过其它块读取。这些副本同样需要考虑如何分布的问题,尽量不要在同一个故障域中。
4. 纠删码。采用以上副本的方式保护数据,缺点是需要占用多倍的存储空间来提供冗余,成本太高,你也可以考虑使用纠删码的数据保护方法,能够使用较少的冗余存储空间提供一样的可靠性等级,当然读写性能要下降些,典型时间换空间的例子。
5. 数据同步和一致性。每个块都被分割成了多个副本,这些副本如何保证一致性,读写效率和一致性之间如何权衡,了解CAP理论和NWR策略,各种一致性模型,比如最终一致性、强一致性等。
6.数据索引。一个文件被分割成块并分布在不同的机器,如何重新找到这些块组装成原来的文件。你可以用一个专门的服务来维护和存储文件和块之间的映射关系(HDFS namenode),也可以通过计算的方法找到这些映射关系(Ceph crushmap)。
7.其它。比如网络通信、RPC、序列化等。
8.块存储、文件系统存储、对象存储区别。
Ⅷ 有谁了解《Candy Crush》的方块落下的算法
核心算法: 这里把游戏的关键设计放在三个盒子和一个坐标上: 大盒子:一个两维数组,记录着方块点阵的开与关(把游戏的舞台想象 成一个点阵),在下面也把这个东西称为地图 两个5*5小盒子:两维数组,一个盛放着正在下落的方块,一个盛放在 下一个下落的