我的 Xen 服务器是 openSUSE 11.1,带有 open-iscsi 以连接到我们的 iSCSI SAN 集群。SAN 模块位于启动器连接到的虚拟 IP 后面的 IP 故障转移组中。
如果主 SAN 服务器出现故障,辅助 SAN 服务器将接替其充当目标服务器。这一切都由 LeftHand SAN/iQ 软件处理,并且在大多数情况下运行良好。
我遇到的问题是,在 IP 故障转移后,我的某些 Xen DomU 的根文件系统偶尔会变成只读状态。这种情况并不一致,每次发生故障转移时都会发生在不同的子集上。它们都运行相同的 openSUSE 11.1 软件映像。
每个 DomU 的根文件系统由 Dom0 中的 open-iscsi 安装,然后 Xen 使用标准块设备驱动程序将其公开给 DomU。
确切的症状是,以 root 身份运行touch /test
会返回错误“只读文件系统”。但是,的输出mount
显示它被挂载为读写。当然,此时 domU 上的所有其他 I/O 也失败了,因此机器严重崩溃。只需从 Dom0 重新启动它,xm
甚至无需重新连接 iSCSI 会话,一切就会恢复正常。
在 Dom0 端,故障转移期间的系统日志消息如下所示:
kernel: connection1:0: iscsi: detected conn error (1011)
iscsid: Kernel reported iSCSI connection 1:0 error (1011) state (3)
iscsid: connection1:0 is operational after recovery (1 attempts)
我很难弄清楚在哪一层调试这个问题,是 DomU 内核的问题吗?还是在 Dom0 或 Xen 层?我认为可能某个地方的某个参数需要调整以增加某种超时,但我不确定该去哪里找。
我并不认为这是一个 open-iscsi 的问题,因为连接的块设备仍然可以从 Dom0 读取和写入。
答案1
我最终通过使用 open-iscsi 文档中的以下建议和设置解决了这个问题:
8.2 iSCSI settings for iSCSI root
---------------------------------
When accessing the root parition directly through a iSCSI disk, the
iSCSI timers should be set so that iSCSI layer has several chances to try to
re-establish a session and so that commands are not quickly requeued to
the SCSI layer. Basically you want the opposite of when using dm-multipath.
For this setup, you can turn off iSCSI pings by setting:
node.conn[0].timeo.noop_out_interval = 0
node.conn[0].timeo.noop_out_timeout = 0
And you can turn the replacement_timer to a very long value:
node.session.timeo.replacement_timeout = 86400
按照上述方法设置与每个 LUN 的连接后,故障转移就会顺利进行,尽管需要几分钟的时间。
答案2
这听起来像是在 dom0 上运行的 iSCSI 启动器的问题。启动器不应该如此快速地将 SCSI 故障发送到堆栈上。您可能希望在 iscsi.conf 中设置 ConnFailTimeout,这是确定在将连接故障视为错误并将该错误发送到 SCSI 堆栈之前需要多长时间的设置。
我还会研究故障转移实际需要多长时间,它可能比您预期的要长。如果是这样,那么 VIP 故障转移可能由于 ARP 相关问题而花费太长时间。
答案3
dom0 中是否有任何消息表明在故障转移时存在任何类型的读/写错误或 scsi 错误?如果有,则看起来此写入错误正在传递到 domU。domU 不“知道”它是 iSCSI 设备,因此它的行为就像底层磁盘已经消失并以只读方式重新安装文件系统(请参阅 mount(1) 手册页 - errors=continue / errors=remount-ro / errors=panic
)
从 dom0 的角度来看,它不会更改为只读 - 这种只读行为是文件系统语义,而不是块设备语义。
您提到此时“所有其他 I/O 均失败” - 您指的是 domU 还是 dom0?
通常在设置 HA iSCSI 解决方案时,我会使用多路径而不是虚拟 IP 接管 - 它可以让主机具有更大的可视性,并且您不会遇到 iSCSI 会话突然消失然后需要重新启动的情况 - 它始终存在,只有两个。这是此环境中的选项吗?
答案4
嗯...问题的一部分还在于您没有将 / 作为 RO 运行。最佳安全实践表明,您应该将“/”安装为 ro,并且任何需要 rw 的文件系统都应单独安装(即 /var 和 /tmp)。如果 /etc 下有需要写入的目录,则应将它们移动到 /var/etc/path 并符号链接到 /etc。
“/” 应仅在单用户模式下以 RW 方式安装。
以这种方式进行设置并结合其他建议可以防止上述情况下出现段错误。