如果“服务器崩溃”是目标端的崩溃,那么 iSCSI 启动器通常会使用相同的会话 ID 重新建立会话。Linux 和 Windows 启动器的行为是这样的。iSCSI 弹性的很大一部分在于它能够独立于传输协议恢复会话状态。在这种情况下,不需要清除保留;发起者保留它。
如果崩溃发生在发起方,那么您是对的,除非会话被持久记录(在 Linux 上不是),否则会话会获得一个新的会话 ID。此时,PERSISTENT RESERVE OUT - PREEMPT
或PREEMPT AND ABORT
命令就派上用场了。使用持久保留作为协调对共享存储的访问的一种方式的集群都必须处理需要接管另一个发起者持有的保留的情况。这是 SPC-4 草案中关于命令的内容:
应用程序客户端可以通过使用 PREEMPT 服务操作或 PREEMPT AND ABORT 服务操作发出具有以下参数的 PERSISTENT RESERVE OUT 命令来用另一个持久保留抢占持久保留:
a) RESERVATION KEY 字段设置为在 I_T 关系的逻辑单元中注册的保留密钥的值;
b) SERVICE ACTION RESERVATION KEY字段设置为要被抢占的持久保留的reservation key的值;和
c) 设置 TYPE 字段和 SCOPE 字段以定义新的持久保留。由抢占 I_T nexus 创建的持久保留的范围和类型可能与被抢占的持久保留的范围和类型不同。
在这里,你的发起者会出现,并执行一个PERSISTENT RESERVE OUT - REGISTER
命令来注册它的关系。然后,它调用PERSISTENT RESERVE IN - READ RESERVATION
并且READ KEYS
或者可能只是READ FULL STATUS
为持有保留的发起者检索密钥。最后,它执行PREEMPT AND ABORT
将旧保留移至其新关系。
来源:(需要注册)http://www.t10.org/cgi-bin/ac.pl?t=f&f=spc4r35a.pdf(如果你在网上搜索 spc4.pdf,你无疑会找到一个免注册变化。)