![设置多主机 SAN](https://linux22.com/image/639326/%E8%AE%BE%E7%BD%AE%E5%A4%9A%E4%B8%BB%E6%9C%BA%20SAN.png)
我正在寻找有关在我们的 SAN 上设置多主机 I/O 访问的一些建议:
我有一个刀片机箱(PowerEdge1000e),其中包含一个 Equallogic PS-M4110 存储刀片,该刀片具有一个当前格式化为 ext4 的 RAID6 卷。
它通过 iSCSI 连接到其他刀片之一(全部运行 ubuntu server 14.04)并作为标准驱动器安装在那里。
现在,我正尝试以允许多主机 I/O 的方式将机箱中的另一个刀片连接到 SAN。
最好避免使用 NFS 这一显而易见的解决方案,因为我们使用的某些略显可疑的编码工具在对 NFS 进行高 I/O 时,经常会崩溃。这尤其成问题,因为这些工具需要数周才能运行,而且没有太多机会进行检查点(您猜到这是一个学术环境了吗?)。
但是,一切都与当前的 iSCSI 设置配合得很好。因此,我倾向于将集群感知或分布式文件系统 + iSCSI 作为最佳选择,但我担心裂脑问题等,因为我们只有 1 个节点。
1) 以上内容是否合理?
2)您对使用哪种 fs 有什么建议吗(最好是兼容 FOSS 和 Linux 的)?
答案1
iSCSI 是一种块级协议,可通过网络读取/写入原始磁盘。它没有文件锁定的概念。由于它也是网络协议,因此它允许与单个目标建立多个连接。您必须能够保证 iSCSI 之上的文件系统级别具有足够的文件锁定以防止同时写入。
我从未尝试过(太可怕了)。我听说过有人允许一台机器读写,而其他机器只读。显然,这在很大程度上取决于你想在这些卷上做什么。例如,SQL 服务器的基于磁盘的内容显然需要深入了解该服务器使用的锁定机制,也许还需要只读表功能。
答案2
正如所提到的,iSCSI 是一种块访问协议 - 它恰好通过以太网传输。尝试对单个块设备进行多主机 IO 是一个糟糕的计划。大多数集群出于某种原因不支持这一点。您需要担心通过操作系统在各个层进行缓存,以及 I/O 操作的原子性。
即使有一个“可写”和一个“只读”——“只读”主机实际上总是在读取“脏”文件系统。我编写了备份解决方案,通过获取克隆副本、一致性检查克隆并挂载它们进行备份,有效地做到这一点。这仍然只是刚刚起作用,因为我明确刷新了数据/主机缓冲区,并确保我单独捕获事务日志,以便我可以“重放”和修复脏文件系统。
NFS 的存在是有原因的,它确实以一种相当干净的方式处理多主机对 Unix 文件系统的访问。它并不完美 - 你可能会因文件系统锁定而陷入困境,但至少你不会在每次使用它时损坏你的文件系统。
首先,找出您的工具在 NFS 上失败的原因 - 您可能会发现这是由于软安装与硬安装,或 NFS 超时。或者尝试从 TCP 切换到 UDP,反之亦然。
如果您确实必须使用 iSCSI,那么我建议您采取 - 正如我上面所概述的 - 采用克隆实例方法,而不是共享并发 IO。