![DRBD - 为什么辅助资源上的只读会导致缓存一致性问题](https://linux22.com/image/680708/DRBD%20-%20%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BE%85%E5%8A%A9%E8%B5%84%E6%BA%90%E4%B8%8A%E7%9A%84%E5%8F%AA%E8%AF%BB%E4%BC%9A%E5%AF%BC%E8%87%B4%E7%BC%93%E5%AD%98%E4%B8%80%E8%87%B4%E6%80%A7%E9%97%AE%E9%A2%98.png)
根据 DRBD9 文档(https://www.drbd.org/en/doc/users-guide-90/s-resource-roles),读取设备会导致缓存一致性问题,但我不确定原因。(我知道我无法以次要角色访问资源,但我想了解原因)
我的假设是(假设我们有 DRBD-1 主设备和 DRBD-2 从设备、文件系统 ext4 并且“file_a”是 drbd 设备上的文件):
- DRBD-2 访问 file_a 并将 file_a 偏移量(或类似内容)放置在其缓存中。(DRBD-2 具有只读权限,因此系统认为该文件无法修改)。
- DRBD-1 将 file_b 内容写入旧的 file_a 偏移处。
- DRBD-2 想要再次访问 file_a,因此系统使用他存储在其缓存中的偏移量,期望在访问 file_b 数据时找到 file_a 数据。
- 我们遇到了缓存一致性问题。
提前感谢您对我关于这一点的阐释。
答案1
是的,您所描述的正是可能导致缓存一致性问题的场景。
为了解决这个问题,你必须使用一个文件系统来重新验证其他主机访问的任何缓存条目。这些被称为集群文件系统,其中 GFS2 和 OCFS 是主要例子。
但请注意,由于同样的原因,集群文件系统通常比传统文件系统慢。