我熟悉 BBWC(电池支持的写入缓存)的用途 - 并且以前在我的服务器中使用过它们,即使 UPS 良好。显然存在它不提供保护的故障。我很想知道它在实践中是否真的提供了任何真正的好处。
(注意,我特别在寻找有 BBWC 和崩溃/失败的人的回应,以及 BBWC 是否有助于恢复)
更新
在收到这里的反馈后,我越来越怀疑 BBWC 是否会增加任何价值。
为了对数据完整性有任何信心,文件系统必须知道数据何时被提交到非易失性存储(不一定是磁盘 - 我会回到这一点)。值得注意的是,很多磁盘都在数据何时提交到磁盘上撒谎 ( http://brad.livejournal.com/2116715.html )。虽然假设禁用磁盘缓存可能会使磁盘更诚实似乎是合理的,但仍然不能保证情况确实如此。
由于 BBWC 中的缓冲区通常很大,屏障可能需要将更多数据提交到磁盘,因此会导致写入延迟:一般建议是在使用非易失性回写缓存时禁用屏障(并禁用 on-磁盘缓存)。然而,这似乎会破坏写操作的完整性——仅仅因为在非易失性存储中维护更多数据并不意味着它会更加一致。事实上,如果逻辑事务之间没有划分,那么确保一致性的机会似乎比其他方式少。
如果 BBWC 在数据进入它的非易失性存储(而不是提交到磁盘)时确认障碍,那么它似乎满足了数据完整性要求而不会造成性能损失 - 这意味着仍应启用障碍。然而,由于这些设备通常表现出与将数据刷新到物理设备(使用屏障显着慢)以及禁用屏障的广泛建议一致的行为,因此它们不能以这种方式运行。为什么不?
如果操作系统中的 I/O 被建模为一系列流,那么当写缓存由操作系统管理时,有一些范围可以最小化写屏障的阻塞效应 - 因为在这个级别只有逻辑事务(单个流) 需要提交。另一方面,不知道哪些数据位构成事务的 BBWC 必须将其整个缓存提交到磁盘。内核/文件系统是否在实践中真正实现了这一点,需要付出比我目前愿意投入的更多的努力。
磁盘组合告诉 fibs 已提交的内容和突然断电无疑会导致损坏 - 并且日志或日志结构的文件系统在中断后不会执行完整的 fsck 不太可能检测到损坏,更不用说试图修复它。
就故障模式而言,根据我的经验,大多数突然停电是由于市电断电(使用 UPS 和管理关机可轻松缓解)。人们从机架中拉出错误的电缆意味着数据中心卫生(标签和电缆管理)不佳。UPS 无法防止某些类型的突然断电事件 - PSU 或 VRM 中的故障 带有屏障的 BBWC 可以在发生故障时提供数据完整性,但此类事件有多常见?从这里缺乏回应来看,这是非常罕见的。
当然,在堆栈中提高容错能力比 BBWC 的成本要高得多——但是,将服务器实现为集群还有许多其他性能和可用性方面的好处。
减轻突然断电影响的另一种方法是实施 SAN - AoE 使这成为一个实用的提议(我在 iSCSI 中并没有真正看到这一点),但同样存在更高的成本。
我有很多服务器可以访问各种外部网络服务,其中大部分使用 SSL,其中一些需要客户端证书。我想集中客户端证书的配置并将表示层与底层服务器分离。
虽然我可以使用 Squid 来代理请求,但我无法从文档中看到如何告诉 Squid 选择特定于目标 Web 服务的客户端证书。这可能吗?
一种方法是在 Squid 代理之外维护一组 stunnel 实例,然后将客户端软件配置为使用带有 URL 重写器的 http 请求来通过适当的 stunnel 实例路由请求,但是如果我得到 XML 响应引用,则会中断HTTPS DTD(除非我用完整的 MITM 重写内容)。
还有其他解决方案吗?
更新
将“https”重写为“http”的问题在于,它会破坏带有 http URI 的任何其他资源——因为协议适配器会将这些资源转换回 https!
我遇到了这篇文章,它解决了将客户端证书添加到代理连接的问题 - 这可能是一个解决方案。但是确实需要将客户端配置为使用代理,在命名事物以及如何使其与拆分 DNS 一起工作方面也存在问题。不可否认,这不是什么大问题,但它让我想到我在这里描述的是大多数 CDN 提供商使用的模式 - 因此我目前正在考虑使用 Apache Traffic Server 作为中间组件 - 这允许使用拆分 DNS,在之间使用单独的 SSL 通道客户端和源,以及用于与源服务器通信的客户端证书。
我想在 WAN 上复制 10Tb 的数据(大量小文件,低级别流失),同时对可用基础设施的影响最小。
虽然我可以简单地使用 rsync,但这意味着查找更改并比较本地和远程数据(磁盘 I/O、网络带宽和 CPU 成本)虽然 rsync 可以有效地做到这一点,但我想知道有更有效的解决方案可以跟踪更改并传播它们(最好是双向的)。
存储本身是 HP NAS 设备上的 iSCSI。我们之前曾研究过使用其内置复制功能,但发现它们速度慢且不可靠。
DRBD 镜像在两端都需要额外的硬件。这将是相当昂贵的。过去我也被 DRBD 复制失败所困扰。
glusterfs 会更有效吗?使用 2 节点设置真的很愚蠢吗?有更好的解决方案吗?
我希望稍微调整我的查询缓存。根据7.6.3.4。手册中查询缓存状态和维护:
Com_select 值由以下公式给出:Qcache_inserts + Qcache_not_cached + 在列权限检查期间发现错误的查询
但是在5.1.5 中。服务器状态变量它表明这是由 DBMS 维护的。话说回来
mysql> show status like 'Com_select%';
Run Code Online (Sandbox Code Playgroud)
总是返回 1 的值 - 我很确定自从我的数据库启动以来,我已经在我的数据库上运行了多个非缓存的选择查询。
看起来好像其他人也同样感到困惑。
这个状态变量是多余的吗?手册的哪一点是错误的?
TIA
我正在研究提供对多个虚拟机的远程访问的可行性。VM 本身将提供用户桌面。
为了充分利用可用资源,我希望虚拟机在用户断开连接时休眠。这意味着能够在用户连接时启动它们。理想情况下,每个用户都将“拥有”一个 VM 映像 - 但如果不是,那么我将要求终止会话。显然,这需要将远程访问协议绑定到 VM 管理中。有什么东西可以提供这样的功能吗?
(开放协议的额外功劳!;)