我的Xen服务器是openSUSE 11.1,带有open-iscsi到我们的iSCSI SAN集群. SAN模块位于启动器连接到的虚拟IP后面的IP故障转移组中.
如果主SAN服务器出现故障,则辅助服务器将扮演目标角色.这一切都由LeftHand SAN / iQ软件处理,在大多数情况下都能很好地工作.
我遇到的问题是偶尔我的一些Xen DomU会在IP故障转移后将其根文件系统设置为只读.它不一致,每次发生故障转移时都会发生在不同的子集上.他们都运行相同的openSUSE 11.1软件映像.
每个DomU的根文件系统由Dom0中的open-iscsi安装,然后Xen使用标准块设备驱动程序将其暴露给DomU.
确切的症状是作为运行触摸/测试的根返回错误“只读文件系统”.但是,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读取和写入.
解决方法
我最终通过使用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的连接后,即使需要几分钟的时间,故障转移也会像魅力一样工作.