存储设备的DDP功能详解
http://blog.csdn.net/u013394982/article/details/18259015
DDP功能,即Dynamic Disk Pool,它是除了现有的RAID0,1,10,5,6这些传统RAID磁盘组以外的,非常有效的存储管理技术。它可以极大地简化对于闲置空间,闲置存储资源的管理,当然对于现有RAID组,它也简化了管理工作。
在讨论DDP功能之前,我们需要理解以下两个基本的概念:
1。D-Piece:D-Piece是在一块物理硬盘上开出的一段连续的,大小为512MB的存储空间。其中,每个D-Piece包含了4096个存储段,通过计算:512MB/4096=128kb,即每个存储段就是128kb大小。在一个虚拟的存储池中,一个存储的volume是由分布在不同的10个物理硬盘上的D-Piece所组成。
2。D-Stripe:它是由10个分布在不同的物理硬盘上的D-Piece所组成的,大小为4GB。在D-Stripe内,存储数据是以类似于RAID6的条带和校验方式存储的,也就是说如果10个D-Piece组成一个Stripe的话,那么Piece的组织方式就是传统的8+2方式,8个Piece(4GB大小)是存储数据的,1个Piece保存校验信息,最后一个Piece保存RAID定义的Q值。
从虚拟磁盘和LUN的维度来理解,DDP就是一个虚拟磁盘池,这个池是由很多个按照用户需求来定义生成的4GB大小的D-Stripe组成的。
如图所示,如果一个DDP包含了12块物理硬盘,其中的任意10块物理盘中的D-Piece可以组成一个D-Stripe用于存储数据。这里需要注意的一点是D-Piece和D-Stripe是近似平均分配在12块硬盘上的,但是视实际使用情况和数据存储量来看,有可能会有一些出入。当系统管理员完成了对于DDP的存储的配置之后,就像传统的RAID6配置一样,存储就会创建相应的D-Piece和D-Stripe。这时候在应用侧,就会看见一个虚拟磁盘被创建了。这个虚拟磁盘的容量是由N个D-Stripe所组成,例如我需要一个大小为32GB的空间,那么包含在这个虚拟磁盘中的D-Stripe数量为 N(D-Stripe)= 定义空间大小/4GB。
例如:一个容量为500GB的虚拟磁盘,会包含500GB/4GB个,即125个D-Stripe,对于一个虚拟磁盘,数据的占用空间会从D-Piece的最低的LBA地址开始使用。
一个DDP磁盘池中,可以包含多个虚拟磁盘,当然在一套存储系统,也允许包含多个DDP磁盘池。对于系统管理员的需求,也可以把传统的RAID磁盘组和DDP磁盘池二者结合来使用。
和传统的RAID组类似,DDP可以通过DCE特性(动态扩容),动态增加硬盘的方式来对存储系统进行扩容,目前可以支持的最大动态扩容量为12块物理硬盘。当DCE功能初始化之后,保存在现有的D-Piece上的数据会有一小部分被迁移到新扩容的磁盘上来。
DDP的另一个优势是区别于传统意义上的RAID原理,它并没有专门指定的热备磁盘,这样当某一块硬盘存在失效风险的时候,它能提供一个所谓的“集成保护能力”这样不仅可以简化存储设备的管理,也能极大地提高重建的性能,节省时间。当DDP中的磁盘有失效的状态发生,类似于RAID6的重建机制是保存在D-Stripe中的,在重建的过程中,它可以保证在任意一块物理磁盘中不会保存同一个D-Stripe上的两个D-Piece。独立的D-Piece机制可以最小化LBA地址范围。
如图所示:6号盘失效,随后,之前保留在这块物理硬盘上的D-Piece数据会在其他的可用硬盘上进行重建。因为是由多块盘在进行写入操作,所以实际的重建时间要大大小于传统的RAID重建时间。当有多块盘失效之后,系统会优先重建那些包含丢失了两个D-Piece的D-Stripe所在的硬盘,以减少数据丢失的风险。当关键数据被重建之后,系统会继续将其他失效的数据进行修复,保证数据的持续可用。从控制器的资源分配角度来看,DDP提供了两种用户可以自由定义的重建优先级配置:
1。降级重建,只有失去一个D-Piece数据的物理硬盘会重建,失去两个的会暂时不可用。这个优先级默认为“高”
2。关键重建,重建失去两个D-Piece数据的物理硬盘,这个优先级默认为“最高”对于超大规模的磁盘池,如果有两块物理硬盘失效,这种情况发生的概率会随着磁盘数量的增大而降低,如之前讨论的内容,按照优先级的配置,关键重建仅仅会持续很小的一个时间窗口,使得数据可用,然后会非常快的进行降级重建,也就是说超大规模的磁盘池场景下,DDP可以保证一定的容错性。
例如,假设我们有一个192块物理硬盘组成的存储系统,当有两块物理硬盘失效之后,在1分钟之内,即可完成关键重建工作,在这1分钟之后,系统都是可以提供容错的工作状态的。从数学角度来看,这样规模的一个存储系统,仅仅有5.2%的概率会发生降级重建,关键重建场景发生的概率仅仅有0.52%,这意味着仅仅有5.2GB的数据会在关键场景下进行重建。
从图中可以看到,对比传统重建方式的持续时间的对比。对比传统的RAID组的工作模式,DDP大大简化了管理工作,从根本上说,对于存储系统的规划,系统管理员仅仅需要做一件事情,就是决定存储系统的硬盘数量。
当然,DDP功能也有一些限制,例如:
1。在虚拟磁盘中的数据段大小是128kb,这是固定的,不可以修改。
2。不支持动态的RAID组迁移功能
3。预读的冗余校验功能是不能基于虚拟磁盘来使用的。
4。DDP的最大容量是64TB
5。不支持SSD硬盘
存储设备的DDP功能详解的更多相关文章
- MySQL日志功能详解
MySQL日志功能详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询日志 它是用来保存所有跟查询相关的日志,这种日志类型默认是关闭状态的,因为MySQL的用户有很多,如果 ...
- 【转】 /etc/fstab功能详解
[转] /etc/fstab功能详解 最近去客户现场时,遇到 了一个关于挂载文件/etc/fstab文件的问题,就写了一下/etc/fstab文件的作用一个文件中各个参数的含义.供大家参考有不正确的地 ...
- .NET ORM框架 SqlSuagr4.0 功能详解与实践【开源】
SqlSugar 4.0 ORM框架的优势 为了未来能够更好的支持多库分布式的存储,并行计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库. 源码下载: https://gith ...
- Fiddler抓取https请求 & Fiddler抓包工具常用功能详解
Fiddler抓取https请求 & Fiddler抓包工具常用功能详解 先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...
- Linux命令-自动挂载文件/etc/fstab功能详解
Linux命令-自动挂载文件etcfstab功能详解 一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系 ...
- python通过socket实现多个连接并实现ssh功能详解
python通过socket实现多个连接并实现ssh功能详解 一.前言 上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户 ...
- 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]
博客园 首页 新随笔 联系 订阅 管理 随笔 - 322 文章 - 0 评论 - 19 Linux命令-自动挂载文件/etc/fstab功能详解[转] 一./etc/fstab文件的作用 ...
- iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例
使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现 2.纯代 ...
- SVN功能详解
SVN功能详解 TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. ...
随机推荐
- MySQL性能优化方法一:缓存参数优化
原文链接:http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter 数据库属于 IO 密集型的应用程序,其主要职责就是数 ...
- 小程序引入多个e-charts
小程序引入e-charts图表 这里是狗尾草第一次发表掘金文章,日后望各位大佬多多支持~ 前言:运营助手,见名知意,没有图表数据的展示,看上去是有多空白.因此,俺们UI做了很好的交互,一个页面来了4个 ...
- 出于迁移项目的考虑,GitHub 中 Fork 出来的项目,如何与原项目断开 Fork 关系?
如果需要为 GitHub 上的项目做贡献,我们通常会 Fork 到自己的名称空间下.在推送代码之后添加 pull request 时,GitHub 会自动为我们跨仓库建立 pull request 的 ...
- Redis安装和主要功能简介
Redis安装和主要功能简介 Redis(https://redis.io/), 是一个内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 安装Redis 我很少在开发机中直接装各种数 ...
- hiho1622 有趣的子区间(YY)
题目链接:http://hihocoder.com/problemset/problem/1622?sid=1230113 #1622 : 有趣的子区间 时间限制:10000ms 单点时限:1000m ...
- YUV和RGB之间的转换方法
yCbCr<-->rgb Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16 Cb Cr R) G) - 0.392*(Cb'-128) B) 参考: htt ...
- .gitignore忽略git版本库中的文件(夹)
# 忽略*.o和*.a文件 *.[oa] # 忽略*.b和*.B文件,my.b除外 *.[bB] !my.b # 忽略dbg文件和dbg目录 dbg # 只忽略dbg目录,不忽略dbg文件 dbg/ ...
- Javascript 在严格模式下不允许删除变量或对象
如下代码,运行后在浏览器中会报错. <script> "use strict"; var x = 3.14; delete x; </script>
- MessageRPC
项目地址 : https://github.com/kelin-xycs/MessageRPC MessageRPC 一个 用 C# 实现的 使用 Message 的 RPC MessageRPC ...
- slf4j-api、slf4j-log4j12、log4j 之间是什么关系?
slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade.Facade:门面,更底层一点说就是接口.他允许用户以自己的喜好,在工程中通过slf4j ...