Replicator – 拷贝对象,确保系统的最终一致性(Replicate objects and make a system in a consistent state);恢复磁盘和网络错误(Recover disk failure, network outages situation)
Updater – 更新元数据(Update metadata),从容器和账户元数据高负载导致的问题上恢复(Recover failure caused by container, account metadata high load)
Auditor – 删除问题账户,容器和对象,然后从别的服务器上拷贝过来(Delete problematic account, container or objects and replicate from other server);恢复数据库和文件数据错误(Recover dbs or files which have bit rot problem.
通过将对象存放在不同物理位置上的 Region 内,可以进一步增强数据的可用性。其基本原则是:对于 N 份 replica 和 M 个 region,每个 region 中的 replica 数目为 N/M 的整数,剩余的 replica 在 M 个region 中随机选择。以 N = 3, M = 2 为例,一个 region 中有 1 个 replica,另一个 region 中有两个 replica,如下图所示:
对于一个 PUT 操作来说,Proxy server 只会将 replica 写入它所在的 region 中的 node,远端 region 中的 replica 由 replicator 写入。因此,Swift 的算法应该尽量保证 proxy server 所在的 region 中的 replica 份数相对多一些,这也称为 replica 的 proxy server 亲和性。
显然,跨 region 的数据复制加重了对网络带宽的要求。
两种形式的 Region:
(1)远端 region 实时写入 replica
(2)远端 region 的 replica 异步写入
4.3.3 Storage Polices (存储策略)
上面的描述中,一个Swift 集群只支持一套 Ring 配置,这意味着整个机器的配置是唯一的。类似 Ceph 中 pool 的定义,Swift 在 2.0 版本(包含在 OpenStack Juno 版本中)中,添加了一个非常大的功能:Storage policy。在新的实现中,一个 Swift 可以由多套 Ring 配置,每套 Ring 的配置可以不相同。比如,Ring 1 保存 3 份对象拷贝,Ring 2 保存 2 份对象拷贝。几个特点:
Openstack Swift 原理、架构与API介绍_HeyManLeader的博客-CSDN博客_swift架构
OpenStack Swift学习笔记_i_chips的博客-CSDN博客_openstack swift
OpenStack对象存储:Swift架构详解_西门仙忍的博客-CSDN博客_swift对象存储架构
OpenStack_Swift源码分析——Ring基本原理及一致性Hash算法_猪-哥-靓的博客-CSDN博客_ring算法
理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features] - SammyLiu - 博客园