深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作

深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作

ID:8819439

大小:22.70 KB

页数:5页

时间:2018-04-08

深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作_第1页
深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作_第2页
深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作_第3页
深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作_第4页
深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作_第5页
资源描述:

《深入云存储系统swift核心组件:ring数据结构及构建、重平衡操作》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、深入云存储系统Swift核心组件:Ring数据结构及构建、重平衡操作  在上一篇深入云存储系统Swift核心组件:Ring实现原理剖析中,我们分析了Ring的设计原理,深入探讨了Swift如何通过Ring组件来实现冗余的、可扩展的目的。本文旨在分析在实际swift的运行中,如何来构建Ring文件。Ring数据结构  Ring 的数据结构由三个顶层域构成,其中:1.ListofDevices,表示集群中设备的列表;2.PartitionAssignmentList,表示partition到device的指派;3.PartitionShiftValue,表示计

2、算数据hash的移位量。1.ListofDevices  设备列表在Ring类内部被称为devs。在设备列表中的每一项是带有以下键的字典:                                表1:Devs键值说明idinteger在device列表中的索引zoneinteger设备所在的zoneweightfloatdevice与其他device的相对权重。这常常直接与device和其它device的磁盘空间数量的比有关ipstringdevice的服务器IP地址portint服务器进程所使用的TCP端口用来提供该设备的服务请求devicest

3、ring 服务器上device的磁盘名称。例如:sdb1metastring存储设备额外信息的通用字段。该信息并不直接被服务器进程使用,但是在调试时会派上用场。例如,安装的日期和时间和硬件生产商可以存储在这。 2.PartitionAssignmentList  用于存放每个replica与device间映射关系。在Ring类内部被称为_replica2part2dev_id,列表中含有replica数量(3)的array(‘I’),array(‘I’)的长度等于ring的partition数量,在array(‘I’)中的每个值为ListofDevices

4、中的索引id。3.PartitionShiftValue  PartitionShiftValue在Ring类内部称为_part_shift。该值用于转换一个MD5 hash值来计算对于该哈希值的数据所在的partition。使用hash值的前4个字节用于计算。例如,为了计算路径/account/container/object的虚节点,Python代码如下:partition=unpack_from('>I',md5('/account/container/object').digest())[0]>>self._part_shift   其中>表示bi

5、g-endian byteorder,I表示长度为4byte unsignedint   举例:我们以SAIO安装下的ring文件为例,使用python读取/etc/swift/object.ring.gz存放的数据,获得的是以devs、 part_shift、 replica2part2dev_id 为key的dict类数据,其中: devs=[{'device':'sdb1', 'id':0, 'ip':'127.0.0.1', 'meta':'', 'port':6010, 'weight':1.0, 'zone':1},{'device':'sdb

6、2', 'id':1, 'ip':'127.0.0.1', 'meta':'', 'port':6020, 'weight':1.0, 'zone':2},{'device':'sdb3', 'id':2, 'ip':'127.0.0.1', 'meta':'', 'port':6030, 'weight':1.0, 'zone':3},{'device':'sdb4', 'id':3, 'ip':'127.0.0.1', 'meta':'', 'port':6040, 'weight':1.0, 'zone':4}] part_shift=4replic

7、a2part2dev_id=[array(‘I’, [3,2...])array(‘I’, [0, 1...]),array(‘I’, [1, 3...])] 构建Ring文件   假设我们配置了一个4个node组成的集群,分别为node0、node1、node2、node3,在这个集群中,我们为4个存储节点配置了2^18个partition,平均每个存储节点分配65536个partition。  需要使用swift-ring-bulider命令来构建ring文件,关于swift-ring-builder命令的详细用法,在shell下直接敲该命令即可获得提

8、示。这里只涉及构建新Ring文件的方法,需要用到两个相关选项:1.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。