什么是 AltaVault 驱逐过程?
适用场景
- AltaVault
- AVA400
- AVA800
- AVA-V
问题解答
- AltaVault 具有一个本地磁盘缓存、可在对备份数据进行编码并随后复制到云时接收该数据
- 逐出过程负责在磁盘缓存(数据存储库)上保留一些可用空间、并防止其完全填满
- 部署规模通常会调整、这样新的数据载入速率将在大约30天(默认值)内轮换磁盘缓存、从而可以快速对最近编码(写入)的备份作业进行解码(读取)
- 此本地缓存功能是AltaVault 的一个主要差异化优势、可确保最新备份的恢复时间目标(RTO)较低
- EVICter 过程使用三个水印:
- 逐出阈值( evicter.maxpctused ):
- 这是设备要维护的利用率百分比
- 如果利用率超过此值、设备将开始删除数据块文件、直到其在特定百分比内降至低于该值为止
- 逐出警报( evicter.maxpctused + evicter.alarmwindow ):
- 这是将发出警报的利用率百分比、表示本地磁盘缓存的利用率过高
- 逐出已上行( evicter.upperbound ):
- 这是AltaVault 为防止物理磁盘完全填满而停止接受写入请求的利用率百分比
- 在此级别、文件系统将向前端协议(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
- 如果
low space
/data 分区使用率达到 93% 以上(默认设置),则会出现 "" ,例如evicter.maxpctused + evicter.alarmwindow
- 请注意已用百分比 (evicter.pctused)、该百分比是当前磁盘缓存利用率、是一种衡量指标、而不是一个可配置的参数
追加信息
已知有两种情况会导致系统只读并打印上述错误消息:
- 写入AltaVault 的新数据速率超过设备释放空间的速率
- 将事件发生器阈值降低为较低的值有助于为备份提供更多GB的可用空间、但前提是在活动较低期间、移动速度较慢的事件发生器可能会收集到编码器所载入的数据
- 如果分配给的值
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
- 运行以下命令以显示实时AltaVault 上的evicter参数(此服务必须正在运行):
av730-rtp # rfsctl exec evicter
evicter.alarmwindow: 3
evicter.maxpctused: 90
evicter.pctused: 88
evicter.upperbound: 95
- 同样、为了简洁起见、某些参数已被禁止
云数据验证和“云数据警报不一致”
- 在删除某个数据块之前、Evicter将使用存储在云对象中的值检查该数据块的md5sum
- 云不会计算md5sum、而是返回元数据值、因此我们不会确认云层块的完整性、而是确认修订
- 可以更改厚片并将其加入队列、以便重新上传到云、此检查可确保云中的副本与本地厚片匹配
- 我们不希望删除尚未复制到云的数据块
- 如果md5sum检查失败、则会发出"云数据不一致"警报
- 我们与发送空(空)响应或旧数据的云供应商有一定的合作经验
- Evicter可以暂停复制
- 如果设备未在云层块对象的请求中收到对head请求的提示响应、则会临时暂停复制
示例:
Sep 28 03:01:20 altavault01 rfsd[6599]: [evicter.INFO] (8921) Evicter will pause replication
Sep 28 03:01:41 altavault01 rfsd[6599]: [evicter.INFO] (8921) Evicter will resume replication
平均被逐年龄
- 设备会跟踪要删除的数据块的使用期限、此统计信息是确定本地磁盘缓存是否过小以及旋转速度是否过快的好方法
- 此统计数据还会影响RTO、因为从云下载数据时、还原超过平均逐出期限的文件可能会较慢
- 可以在WebUI中的"Reports"下查看平均逐出期限
$ /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天(可调整)、则会触发平均被逐出的时间警报
- WebUI中AltaVault : 报告>逐出下的此值、但在5分钟视图之外、图形可能不准确、因为这些值可以通过聚合进行下平均值计算
- 例如、AltaVault
average_eviction_age
每五秒计算一次。设备未运行的时间段将记录为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 秒 |
- 随着数据点的老化、它们会"汇总"到较大的时间段、5分钟后、这些值将平均分为60秒的间隔
- 在此示例中、假设设备仅运行20秒、即60秒
- 聚合60秒时间段的平均值为((30天* 20秒)+(0 * 40秒))/ 60秒= 10天
- 这是此聚合方法不希望产生的副作用
avg_evicted_age
默认情况下、如果此值降至30天(259200秒)以下、则会触发警报、此值可以根据客户需求进行调整- 警报也可以完全禁用
# 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%、则可以对该数据块进行压缩、然后重新排队、以便复制到云中、在云中覆盖较早的数据块。 更大版本
- 需要记住的重要一点是、只有当层块位于本地缓存中时、才会发生层块缩减
- 只有在完全未使用纯云数据块后、才能将其删除
- Amazon Glacier使用一个更大的对象、称为软件包、该软件包包含64个数据块
- 大多数备份策略都保持一组轮换计划、例如每天备份保留一个月、每周备份保留一年、每月备份保留5年等
- 如果备份过期和删除的期限小于平均逐出期限、则这些备份引用的数据块可能位于本地、因此可以进行压缩
- 如果平均逐出期限小于删除时典型备份的期限、则会有一些可能已压缩但并非因为它们仅适用于云
- 包含大量未使用数据的云对象称为云稀疏、而在平均逐出期限较短的情况下快速轮换本地缓存的环境更有可能形成云稀疏
- Amazon Glacier用户更容易受到云稀疏的影响、因为存储在云中的数据对象更大(数据包= 64个数据块)