iSCSI中的SCSI持久保留

时间:2015-11-16 22:10:06

标签: scsi iscsi

在iSCSI中,启动器端口Id定义为: iSCSI_Name,I,Initiator_Session_Id

目标端口ID定义为: iSCSI_Name,T,Target_Portal_Group_Tag

在启动器发出“PR In-Reserve”SCSI命令后,会持续保存上述与I_T连接有关的信息。如果服务器上发生崩溃,并且在启动器重新登录后,启动器很可能会获得新的Initiator_Session_Id。如果是这样,发起人(或任何已注册的发起人)将如何清除预留?

谢谢你, 艾哈迈德。

1 个答案:

答案 0 :(得分:1)

如果服务器上的"崩溃是目标端的崩溃,则iSCSI发起方通常会使用相同的会话ID重新建立会话。 Linux和Windows启动器的行为如下。 iSCSI的弹性很大一部分在于它能够独立于传输协议恢复会话状态。在这种情况下,没有必要清除预订;发起者保留它。

如果崩溃发生在启动器端,那么你是对的,除非会话被持久记录(在Linux上,它不是),会话获得一个新的会话ID。此时,这是PERSISTENT RESERVE OUT - PREEMPTPREEMPT AND ABORT命令的来源。使用持久保留作为协调对共享存储的访问的方式的集群都必须处理需要接管的情况另一个发起人持有的预订。这就是SPC-4草案中关于命令的说法:

  

应用程序客户端可以抢占持久保留   通过发出持久保留的另一个持久保留   具有PREEMPT服务操作或PREEMPT AND ABORT服务的命令   具有以下参数的操作:

     

a)RESERVATION KEY字段设置为保留键的值   已在I_T连接的逻辑单元中注册;

     

b)SERVICE ACTION RESERVATION KEY字段设置为的值   要抢占的持久预约的预约密钥;和

     

c)设置TYPE字段和SCOPE字段以定义新的持久性   保留。创建持久保留的SCOPE和TYPE   通过抢占I_T连接可能与那些不同   持续保留被抢先一步。

在这里,你的发起者会出现,并执行PERSISTENT RESERVE OUT - REGISTER命令来注册它的nexus。然后,它调用PERSISTENT RESERVE IN - READ RESERVATIONREAD KEYS或者只调用READ FULL STATUS来检索保留预订的发起者的密钥。最后,它执行PREEMPT AND ABORT将旧保留移动到新的连接。

来源:(需要注册)http://www.t10.org/cgi-bin/ac.pl?t=f&f=spc4r35a.pdf(如果您在网上搜索spc4.pdf,您无疑会找到无注册的变体。)