OpenStack Swift Account Reaper

翻译Swift官方文档 Account Reaper介绍,Swift中acconut的删除使用了那些策略和方法,看了这篇文档相信会有帮助。

 

The Account Reaper 账户收割器

账户收割器在后台移除被删除账户的数据。

一个账户被被标记为删除通过一个reseller发出的DELETE请求在账户的存储URL。这个简单的将值DELETE放到表account_stat中的状态栏在账户数据库中(和副本),指明这个账户的数据应该在稍后被删除。

通常下不会设置保留时间和复原。假设reseller实现了这些特性,只要调用DELETE在账户上一次就真的会得到账户的数据被移除。然而,为了保护Swift集群账户从一个不正常的或者是错误的删除请求。你可以设置delay_reaping值在[account-reaper]部分在account-erver.conf去延迟真是的数据删除。在这时,这没有时间的工具删除一个账户;必须直接更新账户数据库副本,设置状态栏位空字符串,然后更新put_timestamp 大于delete_timestamp。(在TODO列表正在写一个工具去执行这项任务,较好的通过一个ReST 调用)。

账户收割器运行在每一个账户服务器然后不定期的扫描服务器内被标记为删除的的账户数据库。它只会触发账户,服务器是主要的节点,为了让账户服务器不是所有的都尝试去做同样的工作在同一个时刻。使用多个服务器删除一个账户可能提升删除的速度。但是需要协调他们不去重复劳动。数据删除时的速度并没有过多的担心,因为大账户没有被频繁的删除。

账号的删除过程是相等直接的。账户中的每一个容器,每一个对象被删除然后容器被删除。所有删除请求失败不会停止整个的删除过程,但是会导正这个那个过程最终失败(例如,如果一个对象删除超时,容器将不会被删除,因此账户也不会被删除)。整个处理过程既是失败也要继续执行,以便于它不会因为麻烦的问题而打断恢复集群空间。账户收割器将持续的尝试删除账户直到最终变成空,数据库在db_replicator中收回,最终移除数据库文件。

History

起初,一个简单的完全通过外部调用来删除账户的方法被考虑,因为它不需要改变这个系统。所有的数据将会被简单的删除在同一种方式,在真实的用户,通过公用的ReST的API,然而,负面的是它将使用代理资源和记录所有的信息,尽管可能不需要那么做。因此,它需要一个专用的服务器或者是两台,只是为了发起删除的请求。

一个完全自下而上的途径也被考虑,对象和容器的服务器将不定期的扫描数据,它们掌握和检查是否账户已经被删除了,如果是这样的话,就移除数据。好处是对回收的速度没有影响在代理和日志,但是坏处将近100%的扫描导致没有目的的活动造成大量的I/O负载。

一个容器服务器中心途径也被考虑过,账户务器可以标记所有的容器来为删除,然后容器服务器将删除对象在每一个容器和它们自己。这对于有大量账户的容器很有益处,但是有负面的是由相当大的负载峰值。这个过程可能将会慢下来去缓和这个负载峰值,但是快速回收的益处将消失然后会留下更复杂的过程。因此,扫描所有被标记为删除的容器当大多数的不会被视为是浪费的。 db_replicator可以做这份工作同时执行它的复制扫描,但是它将不得不产生和记录删除过程,啃起来不必要的复复杂性。

最后,账户服务器中心法看起来是最佳的。

你可能感兴趣的:(OpenStack Swift Account Reaper)