🔗 功能:缓存目录故障绕过
- 目标:使各种缓存存储目录错误不至于致命
- 状态:停滞;Squid2 COSS 的补丁可用,但尚未找到 Squid3 的赞助者
- 预计完成时间:未知
- 版本:
- 开发者:AlexRousskov
- 更多:bug 410 的补丁
🔗 详细信息
以下描述适用于所有支持的存储类型和 Squid 版本。当前的 补丁 仅实现了 Squid2 中 COSS 缓存目录故障的可选绕过。请参阅补丁前言了解技术说明,并在 bug 报告 中进行讨论。
向 cache_dir 添加 bypass=1 选项允许 Squid 绕过与该缓存存储相关的错误。被绕过的缓存目录不会存储未命中(misses),也不会加载命中(hits)。其状态可能已损坏,需要进行脏重建。但是,Squid 应该继续运行,使用剩余的缓存目录(如果有)。一旦触发,缓存目录绕过将持续到 Squid 停止。Squid 永远不会以绕过模式启动。
绕过代码将缓存交换状态(swap state)的失败视为缓存目录故障,即使交换状态文件位于缓存目录磁盘空间之外。
配置错误(例如,使用不支持的存储类型或为特定存储类型提供错误的 cache_dir 选项)仍然是致命的。
🔗 squid.conf 更改
- cache_dir 的 bypass=1 参数(必需)
- cache_dir_bypass_sample 选项(可选)
- cache_dir_bypass_errors_min(可选)
🔗 诊断和监控
当绕过启动时,您将在 cache.log 中看到以下警告,以及可能相关的错误消息
2008/08/29 10:38:14| WARNING: Starting to bypass cache_dir #0
(/var/cache/dir1): stat() system call failed
您可以使用缓存管理器界面检查缓存目录的状态。例如,对于一个既可绕过又正在被绕过的给定缓存目录,mgr:storedir 菜单将显示以下标志(许多不相关的位已省略)
Store Directory #1 (coss): /var/cache/dir2
...
Flags: BYPASSABLE BYPASSED
...
Bypass stats:
bypassing: yes
ops bypassed: 0
checks: 0 (limit 10)
errors total: 0 (limit 10)
errors in a row: 0
您可以使用相同的管理器界面来检查磁盘是否可绕过。
🔗 其他相关想法
由 Chris Woodfield 提出
以下各节记录了与缓存目录绕过远程相关的想法。如果您想致力于这些功能,请为您的工作启动一个新的功能页面。
🔗 更好地处理磁盘溢出
Squid 应该能够检测到磁盘已满的错误,并清除陈旧的缓存对象以释放空间。次要目标是,当 swap.state 日志变得过大或发生上述磁盘溢出时,能够缩小它。
🔗 缓存大小自动检测的奖励积分
我的意思是自动检测最有效所需的 L1/L2 层,无需显式配置。因此 squid.conf 只需包含
cache_dir ufs /squid/cache 20GB
分类: WantedFeature
导航:站点搜索,站点页面,类别,🔼 向上