混合 ocfs2 集群:直接访问和 iscsi

混合 ocfs2 集群:直接访问和 iscsi

早上好,
我有这样的配置:
配置图

  • 一个“共享磁盘”,其中一个分区格式化为 OCFS2
  • 主机 A 和主机 B 可直接访问“共享磁盘”
  • 主机 C 可直接访问用作 iSCSI 目标的“共享磁盘”,并配置 linux tgt (iSCSI) 以访问“共享磁盘”
  • 主机 D 和主机 E 作为 iSCSI 启动器使用主机 C 访问“共享磁盘”
  • 主机 A、B、D 和 E 是同一个 OCFS2 集群的一部分,

    我进行了以下测试:
  • 仅在主机 A 和 B 上同时使用 OCFS2 安装共享 fs(在每个主机上,安装分区时 ocfs2 守护进程都会正确记录加入集群的情况)
  • 同时仅在主机 D 和 E 上使用 OCFS2 安装共享 fs。在这种情况下,每个主机都使用共享磁盘的 iSCSI 路径,并且 ocfs2 分区的安装同时在每个主机上正常工作。
  • 在主机 A 和 D 上挂载共享文件系统(A 可直接访问共享磁盘,B 使用 iSCSI 路径访问主机 C 上的 iSCSI 目标),但没有成功。在一台主机上挂载时,另一台主机似乎看不到加入集群,并且日志中出现 ocfs2 错误(心跳错误),数据损坏。

    最后一种情况是问题的论点。iSCSI 目标上可能存在缓存问题(块设备缓存或其他问题)?这种集群配置是否可以通过对 iSCSI 进行一些调整来实现,还是不可能实现?

    谢谢

    Matteo

答案1

经过一番深入研究,我想我可以找到解决方案。
我没有使用 /dev/sd* 设备文件作为 iscsi 目标的后备存储,而是使用了 /dev/sg*
对应文件,其配置如下:

<target iqn.2018-02.test.it:lun1>
   <backing-store /dev/sg0>
      bs-type sg
      device-type pt
   </direct-store>
</target>

正如我所想,解决方案可能与块设备上的页面缓存有关,也许 sg 使用直接命令可以绕过这个问题……我不知道。
更改配置后,我成功尝试在主机 A、D 和 E 上挂载。
在 /var/log/messages 上,我发现当 ocfs2 工作时,A、D 和 E 的连接日志与预期一致。
我还创建了一个测试文件,发现每个主机上都有更新。
本周我将进行更多测试,看看是否存在数据损坏,并相应地更新帖子

。Matteo

更新
它似乎工作正常,但是当从 iscsi(启动器)上的主机在共享磁盘上进行大复制(超过 1Gb 的文件)时,主机崩溃并且目标 tgt 显示此错误:

mar 04 17:09:29 debian-shdisk-iscsi tgtd[1515]: tgtd: bs_sg_cmd_submit(228) failed to start cmd 0x0x559a50768510
mar 04 17:09:29 debian-shdisk-iscsi tgtd[1515]: tgtd: graceful_write(87) sg device 11 write failed, errno: 33

当 cmd 队列已满时,scsi 通用 Linux 内核 4.19 驱动程序中的 errno 33 (EDOM) 似乎在写入时触发。在 tgtd 端,这似乎没有得到处理,并且它会触发该错误,从而在启动器端生成块错误。有什么建议吗?

相关内容