侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Swift中映射与冗余

2022-06-13 星期一 / 0 评论 / 0 点赞 / 125 阅读 / 4219 字

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

. . .

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版本数据

.

广告 广告

评论区