什么是 AltaVault 驱逐过程?
适用于
- AltaVault
- AVA400
- AVA800
- AVA-V
解答
- AltaVault 具有本地磁盘缓存、在对备份数据进行编码并随后复制到云时接收备份数据。
- 驱逐过程负责维护磁盘缓存(数据存储库)上的一些可用空间,并使其无法完全填满。
- 部署的规模通常是这样的:新的数据输入速率将在大约 30 天内(默认值)旋转磁盘高速缓存、从而可以快速解码(读取)最近编码的(写入)备份作业。
- 此本地缓存功能是 AltaVault 的主要优势之一,可确保最新备份的恢复时间目标 (RTO) 较低。
- EVICter 过程使用三个水印:
- 逐出阈值( evicter.maxpctused ):
- 这是设备要维护的利用率百分比。
- 如果利用率超过此值,则 evicter 将开始删除带文件,直到它低于特定百分比。
- 逐出警报( evicter.maxpctused + evicter.alarmwindow ):
- 这是将发出警报的利用率百分比,表示本地磁盘缓存的利用率过高。
- 逐出已上行( evicter.upperbound ):
- 这是 SteelStore 为防止物理磁盘完全填满而停止接受写入请求的利用率百分比。
- 在此级别上、文件系统将向前端协议 (OST/SMB/NFS) 返回“文件系统上没有空间”错误。
- 逐出阈值( evicter.maxpctused ):
- 发生这种情况时,将会看到类似于以下内容的日志消息。
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [megamount/vnode.ERR] (30318) encode failed: no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [megamount/vnode.ERR] (31432) encode failed: no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [write_cache.ERR] (30318) flush failed: no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [megamount/vnode.ERR] (30318) failed to commit write: no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [write_cache.ERR] (30318) destructor flush failed :no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [encoder.ERR] (30318) Encoder 0x299e71018 destructor, aborting
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [write_cache.ERR] (31432) flush failed: no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [megamount/vnode.ERR] (31432) failed to commit write: no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [write_cache.ERR] (31432) destructor flush failed :no space on filesystem
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [encoder.ERR] (31432) Encoder 0x28f726798 destructor, aborting
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [megastore.NOTICE] (30318) aborting transaction 149/14340392 (29 resources)
Apr 2 02:34:01 ss3030-dmz-nk2 rfsd[8609]: [megastore.NOTICE] (31432) aborting transaction 149/14349236 (1668 resources)
Apr 2 02:34:02 ss3030-dmz-nk2 rfsd[8609]: [megastore.NOTICE] (30318) transaction 149/14340392 aborted
Apr 2 02:34:02 ss3030-dmz-nk2 rfsd[8609]: [megamount/vnode.ERR] (30318) error flushing write cache no space on filesystem
- 请注意当前磁盘高速缓存利用率为已用百分比( evicter.pctused )、它是一个测量值、而不是可配置参数。
其他信息
已知有两种情况会导致系统只读并打印上述错误消息:
- 写入 AltaVault/SteelStore 的新数据的速率超过了 EVICER 释放空间的速率。
- 将 EVICter 阈值降低到较低的值有助于为备份提供更多的可用空间,但只有在活动时间较低时、较慢的移动 EVICter 才能将数据采集到编码器所接收的数据。
- 如果分配给的值
evicter.maxpctused
大于evicter.upperbound
,则会导致设备在利用率达到阈值之前进入只读模式,设备将在此阈值中进行转换并开始释放空间。- 这实际上会使电子数据中心锁定。
- 适当的值将取决于本地磁盘缓存的大小,较小的设备将具有更保守的值。
- 运行以下命令以查看系统转储中的 evicter 参数:
$ grep evicter stats_megastore
evicter.alarmwindow: 3
evicter.maxpctused: 90
evicter.pctused: 88
evicter.upperbound: 95
- 输出比上面所见的要大;但是,这些是重要的参数。
- 它们也可以在中找到
output/rfsd.xml
、这是running config
RFSD 服务的“”。
<evicter
max_local_capacity="0"
max_used_pct="90"
upper_bound_pct="95"
evicter_num_threads="512"
/>
- 这些值也会在
collect_stats/rfsctl-a.log
文件和归档文件中每 60 秒记录一次:
$ egrep "TIMESTAMP|evicter.pctused" collect_stats/rfsctl-a.log | less
TIMESTAMP: 2015-04-14 12:21:00
evicter.pctused: 88
TIMESTAMP: 2015-04-14 12:22:00
evicter.pctused: 88
TIMESTAMP: 2015-04-14 12:23:00
evicter.pctused: 88
TIMESTAMP: 2015-04-14 12:24:00
evicter.pctused: 88
TIMESTAMP: 2015-04-14 12:25:00
evicter.pctused: 88
- 运行以下命令以在 Live SteelStore 上显示 EVICter 参数(该服务必须正在运行):
av730-rtp # rfsctl exec gc
evicter.alarmwindow: 3
evicter.maxpctused: 90
evicter.pctused: 88
evicter.upperbound: 95
- 同样,为了简洁起见,某些参数已被禁止。
云数据验证和“云数据警报不一致”
- 删除带之前、 EVICter 将使用存储在云对象中的值检查带的 MD5 求和。
- 云不计算 MD5 求和、而只是返回元数据值、因此我们不确认云带的完整性、而是确认修订。
- 可以更改带并排队以重新上载到云中,此检查可确保云中的副本与本地带匹配。
- 我们不想删除尚未复制到云的带。
- 如果 MD5 校验失败、则会发出警报“云数据不一致”。
- 我们在发送空(空)响应或旧数据的云供应商方面有一些经验。
- Evicter 可以暂停复制。
- 如果 evicter 未收到针对头请求的提示响应、而是云带对象,则它将暂时暂停复制。
示例:
Sep 28 03:01:20 steelstore01 rfsd[6599]: [evicter.INFO] (8921) Evicter will pause replication
Sep 28 03:01:41 steelstore01 rfsd[6599]: [evicter.INFO] (8921) Evicter will resume replication
平均被逐年龄
- EVICter 会跟踪已删除的带的存留期,此统计数据是确定本地磁盘缓存是否太小以及旋转速度是否太快的好方法。
- 此统计数据还会影响 RTO 、因为从云下载数据时、还原时间比平均被逐出时间更长的文件可能会更慢。
- 平均被逐年龄可在报告下的 Webui 查看。
$ /support/bin/stats_evicted.py
timestamp evicted_bytes evicted_age
Jul 01 04:38 3.1 GB 48 day
Jul 01 04:39 3.8 GB 48 day
Jul 01 04:40 3.6 GB 48 day
Jul 01 04:41 3.3 GB 48 day
<snip>
Jul 01 07:18 4.3 GB 47 day
Jul 01 07:19 2.6 GB 47 day
Jul 01 07:20 2.5 GB 47 day
Jul 01 07:21 2.3 GB 47 day
Min: 47 day, Max: 48 day, Avg: 48 day, StdDev: 4 hour
- 如果平均被逐出年龄小于 30 天(可调整),则平均被逐出年龄报警将触发。有关详细信息,请参阅 KB20223993 。
- SteelStore 下的 WebUI 中的该值:报告 > 优化 > 驱逐; AltaVault :报告 > 驱逐,但在 5 分钟视图之外的图形可能不准确,因为可以通过聚合将值取去平均值。
- 例如, SteelStore 每
average_eviction_age
5 秒计算一次。不运行 Evicter 的期间将记录为 0 。
AVG_Galled_age | 0 | 0 | 30 天 | 30 天 | 30 天 | 30 天 | 0 | 0 | 0 | 0 | 0 | 0 |
抽样间隔 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 | 5 秒 |
- 随着数据传输时间的增加、它们将被“聚集”到更大的时间段、五分钟后的值将平均为 60 秒的间隔。
- 在此示例中,假设 evicter 在 60 秒内仅运行 20 秒。
- 合计 60 秒期间的平均值为( 30 天 *20 秒) + ( 0 *40 秒) /60 秒 =10 天。
- 这是这种聚合方法不可取的副作用,工程人员计划进行补救
avg_evicted_age
默认情况下,如果值低于 30 天( 2592000 秒)、可以根据客户需求进行调整、则会触发警报。- 报警也可以完全禁用。
# show alarm avg_evicted_age
Alarm Id: avg_evicted_age
Alarm Description: Datastore Eviction
Enabled: no
Alarm State: (enabled)
Error threshold: 2592000
Clear threshold: 3024000
Rate limit bucket counts: (email) { 5, 20, 50 }
Rate limit bucket windows: (email) { 3600, 86400, 604800 }
Rate limit bucket counts: (snmp) { 5, 20, 50 }
Rate limit bucket windows: (snmp) { 3600, 86400, 604800 }
Last checked at: 2015/06/16 11:41:39
Last checked value: 4294967295
Last error at:
Last clear at:
(config) # alarm avg_evicted_age enable
(config) # no alarm avg_evicted_age enable
- 例如,将阈值调整为 14 天上升, 15 天清除。
(config) # alarm avg_evicted_age error-threshold 1209600
(config) # alarm avg_evicted_age clear-threshold 1296000
平均驱逐年龄对云的稀疏影响
- 删除文件后、将检查其引用的带、以查看这些带是否被设备上存储的任何其他文件引用。
- 如果仍引用了带的任何部分、则无法将其删除、但如果该部分位于本地缓存中且其中超过 50% 未使用,则可以对带进行压缩、然后重新排队以复制到云中、在云中覆盖旧的、 更高版本。
- 需要记住的重要部分是,带压缩只能在带位于本地缓存中时发生。
- 仅云带只能在 100% 未使用时被删除。
- Amazon Glacier 使用一个称为软件包的大型对象、该软件包是一个 64 个带的软件包。
- 大多数备份策略都保持一组轮换计划,例如每天备份保留一个月,每周备份保留一年,每月备份保留 5 年等
- 如果备份过期和删除的期限小于平均逐出期限,则这些备份引用的数据块可能位于本地,因此可以进行压缩。
- 如果平均驱逐期限低于删除时典型备份的期限,则可能会出现一些已被强制执行的带、但不是因为它们仅是云。
- 拥有大量未使用数据的云对象称为云稀疏,而在短的平均驱逐时间内快速轮换本地缓存的环境更有可能形成云的稀疏。
- 由于存储在云中的数据对象的大小较大(软件包 =64 个带), Amazon Glacier 的用户更容易受到云的稀疏影响。