设置如下:
- 两台 Ubuntu 9.10 服务器 - LAMP 环境(实际上不是切换操作系统的选项)
- 一个带有 iscsi 连接的 MD3000i
以下是我想要做的事情:
- 让两台服务器都能看到另一台服务器写入 MD3000i 的文件,而无需卸载驱动器。我与 MD3000i 的连接良好(使用 open-iscsi)。除了下面列出的一个方面外,MD3000i 几乎在我需要的所有方面都表现出色。
以下是我不想做的事情(出于某些原因,我不会深入探讨 - 我已经走过这条路了):
- 使用 NFS 挂载
例子:
服务器1.com和Server2.com写入 MD3000i 上的同一驱动器。它们都安装到的文件夹标记为 /mnt/文件/。它们都正确识别分区大小。
然后Server1.com 将 test1.1.txt 写入 /mnt/files和Server2.com 将 test1.2.txt 写入 /mnt/files。在这种情况下,文件是在 ssh 连接期间直接写入服务器的。Server1.com 如果不重新挂载则无法看到 test1.2.txt。Server2.com 如果不重新挂载则无法看到 test1.1.txt。
奇怪的是,如果我通过 PHP 从 Apache 服务器写入文件,并且文件具有唯一名称,则两个服务器都可以看到它!但如果名称不唯一,则会出现 I/O 错误(不足为奇)。
我熟悉 gfs、gfs2 和 ocfs2,但还远远不够熟练。我尝试了各种方法来格式化驱动器并安装它。似乎我无法得到正确的方法。
问题:
你有什么建议?我尝试过很多不同的方法来设置我认为是圣杯的东西 - 集群 - 但都没有真正成功。我知道什么行不通。真的需要一些有用的提示来提升。
答案1
简短回答:GlusterFS
长答案:我已经用 DRDB 建立了一个系统,我认为这是理想的解决方案,因为它有详尽的文档,并且可以找到大量在其上运行 LAMP 的示例。
但这不是理想的解决方案,因为您一次只能在一台机器上安装文件系统,并且当一台机器故障转移到另一台机器时,您必须处理大量服务的启动等。而且它仅适用于两台机器。
我今天在 virtualbox 中构建了一个由两个虚拟 Ubuntu Lucid Lynx 机器组成的测试 glusterfs 集群,它不仅设置起来非常简单,而且您需要的一切都在 repos 中。
从我目前的测试来看,它似乎就是我想要的一切。
它有点像双向(或实际上是多向)nfs。您可以让任意数量的节点访问它,文件系统会处理锁等,因此请忽略上面的“这是一个坏主意,就像让 2 个并发的 Windows 安装访问同一个 NTFS 驱动器...”评论,因为这完全偏离了主题。
确保你了解服务器 - 客户端方面!我错过了 FUSE 安装的要点,直到我考虑了文件锁定。
我还没有在 MySQL 负载下测试过它,但到目前为止,它给我留下了深刻的印象。我的网络搜索发现,几乎没有证据表明 GlusterFS 可以胜任这项工作,因此 Tom O'Conner 的评论也让我放心了。
如果我明天发现更多相关信息我会回复。
答案2
好的...你排除了 NFS。类似的东西可能是 AFS。
或者您也可以尝试 sshfs。
我不知道它们是否能解决你的问题,但最好记住它们 :>