您的位置:首页 > 移动开发 > Swift

Swift中映射与冗余

2012-11-06 09:18 716 查看

1.1 文件,虚节点,设备映射关系

Swift系统中存在两种映射关系,对于一个文件,通过hash算法(md5),找到对应的虚节点,虚节点通过映射关系(ring文件中二维数组)找到对应的设备。这样就完成了一个文件存储在设备上的映射。



生成环境中的例子:

1.虚节点到设备多对多的关系



2.文件与虚节点是一对一的关系,



1.2 系统添加设备后分配过程



虚节点与设备的映射关系



设备对应的虚节点

向系统中增加一台新设备,需要执行命令修改builder文件和ring文件,然后把ring文件通过scp命令同步到每台设备上,保证新的系统中每台设备的ring文件相同(即映射关系一致),然后重新启动所有设备上的服务,服务会根据新的映射关系,把需要“移位”的文件,推送到新的位置。此时系统重新达到了平衡。



添加一台设备后的状态



1.3 系统删减设备后分配过程



删除一台设备

删除一台设备,同样通过命令生成新的映射关系,系统会收集被删除的设备的虚节点,然后重新分配。



删除一台设备

1.4 分配策略(映射关系生成的策略)

系统重新分配一个虚节点,首先要保证同一个zone下或者同一个dev下不能有同一个虚节点的副本。然后系统遵守下面的分配原则。

1.设备的需求

2.随机数

3.设备的id.

其中设备的需求 就是根据设置的weight计算出的设备应该被分配的值与实际分配值的差值。

1.5 系统冗余问题

冗余可以保证系统在面临,暂时性的局部故障时,可以不影响服务。Swift对象存储系统一份文件,有三份副本(包含文件本身),上传和下载时,系统设定为如果上传或下载两份成功,则认为上传或下载成功。这是为了防止,一台设备的暂时性故障,导致整个系统的故障,一旦故障的设备恢复后,系统中的replication守护进程,会从其他的设备上同步文件的最新版本,以保证系统的一致性。

1.写文件

2.读文件

3.系统恢复,同步文件。



初始状态



用户更新数据,其中一台设备更新失败,但是其他两台设备更新成功,返回成功。



用户获取数据,其中一台设备获取失败,两台获取成功,通过比对时间戳,最终获取V2



系统恢复后,replication发现版本不一致



replication推送一个V2版本数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  openstack swift