基于双控的SCSI TARGET访问控制方法和装置转让专利

申请号 : CN201510583407.6

文献号 : CN105204779B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王晓强缪祥虎

申请人 : 北京鲸鲨软件科技有限公司

摘要 :

本发明公开了一种基于双控的SCSI TARGET访问控制方法和装置,包括步骤一,主机端向所有控制器发送与目标设备的通讯请求;步骤二,所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端;步骤三,主机端对所有控制器返回的路径进行聚合;步骤四,主机端根据聚合后的路径访问目标设备。因此,本发明能够解决现有技术中主机端多路径有效识别的问题。

权利要求 :

1.一种基于双控的SCSI TARGET访问控制方法,其特征在于,包括步骤:步骤一,主机端向所有控制器发送与目标设备的通讯请求;

步骤二,所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端;

步骤三,主机端对所有控制器返回的路径进行聚合;

步骤四,主机端根据聚合后的路径访问目标设备;

在所述步骤二之后,主机端判断返回的查询结果是否为多条路径,是则直接进行步骤三;若不是则在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID,返回步骤一;

其中,所述在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID包括步骤:第一步,在一个控制器上创建逻辑卷,并指定该控制器为主控制器;

第二步,其他控制器分别指定为从控制器;

第三步,主控制器上的逻辑卷通过主控制器上的TARGET驱动进行映射,然后将映射后的配置文件同步到从控制器中;

第四步,从控制器将接收到的配置文件进行解析并加载配置,然后在其缓存结构中虚拟出一个块设备;

第五步,在从控制器的虚拟块设备上创建虚拟逻辑卷;

第六步,从控制器上的虚拟逻辑卷通过该从控制器的TARGET驱动进行映射;所述从控制器上的虚拟逻辑卷通过TARGET驱动映射后,主、从控制器会生成一样的SCSI ID。

2.根据权利要求1所述的方法,其特征在于,所述在缓存结构中虚拟出一个块设备包括:上层逻辑通过submit_bio进入块设备驱动,submit_bio调用generic_make_request完成基本检测;然后进入对应虚拟块设备驱动函数指针,缓存层对外提供的接口为cache_mirror,通过cache_mirror将IO请求转发。

3.根据权利要求1所述的方法,其特征在于,所述在从控制器的虚拟块设备上创建虚拟逻辑卷,从控制器上的虚拟逻辑卷与主控制器上的逻辑卷除了make_request_fn函数不一样之外,其他函数均相同。

4.根据权利要求1所述的方法,其特征在于,所述主控制器将映射后的配置文件同步到从控制器中,是需要TARGET驱动映射,映射是通过web页面操作,HA脚本配置完成,配置之后会生成配置文件,最后将配置文件传输到从控制器端。

5.根据权利要求1所述的方法,其特征在于,所述主控制器的缓存做备份拷贝到从控制器,以及所述从控制器的缓存做备份拷贝到主控制器。

6.根据权利要求1至5任意一项所述的方法,其特征在于,所述主机端对路径进行聚合采用multipath驱动。

7.一种基于双控的SCSI TARGET访问控制装置,其特征在于,包括:通讯请求单元,用于主机端向所有控制器发送与目标设备的通讯请求;

请求返回单元,用于所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端;

路径聚合单元,用于主机端对所有控制器返回的路径进行聚合;

目标设备访问单元,用于主机端根据聚合后的路径访问目标设备;

所述基于双控的SCSI TARGET访问控制装置还包括判断单元和多路径设置单元,所述判断单元与所述请求返回单元连接,使主机端判断返回的查询结果是否为多条路径,如果是则与所述路径聚合单元;如果不是则与所述多路径设置单元相连,所述多路径设置单元在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID;

其中,所述在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID包括:在一个控制器上创建逻辑卷,并指定该控制器为主控制器;

其他控制器分别指定为从控制器;

主控制器上的逻辑卷通过主控制器上的TARGET驱动进行映射,然后将映射后的配置文件同步到从控制器中;

从控制器将接收到的配置文件进行解析并加载配置,然后在其缓存结构中虚拟出一个块设备;

在从控制器的虚拟块设备上创建虚拟逻辑卷;

从控制器上的虚拟逻辑卷通过该从控制器的TARGET驱动进行映射;所述从控制器上的虚拟逻辑卷通过TARGET驱动映射后,主、从控制器会生成一样的SCSI ID。

说明书 :

基于双控的SCSI TARGET访问控制方法和装置

技术领域

[0001] 本发明涉及计算机领域,特别是指一种基于双控的SCSI TARGET访问控制方法和装置。

背景技术

[0002] 目前,常规双控存储控制系统中,对LUN的访问是独占性的。即如果控制器0对一个逻辑卷读写,控制器1将不可见该逻辑卷,这样造成控制器资源浪费,并且主机端多路径软件只能有效识别到一条路径。

发明内容

[0003] 有鉴于此,本发明的目的在于提出一种基于双控的SCSI TARGET访问控制方法和装置,能够解决现有技术中主机端多路径有效识别的问题。
[0004] 基于上述目的本发明提供的基于双控的SCSI TARGET访问控制方法,包括步骤:
[0005] 步骤一,主机端向所有控制器发送与目标设备的通讯请求;
[0006] 步骤二,所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端;
[0007] 步骤三,主机端对所有控制器返回的路径进行聚合;
[0008] 步骤四,主机端根据聚合后的路径访问目标设备。
[0009] 可选地,在所述步骤二之后,主机端判断返回的查询结果是否为多条路径,是则直接进行步骤三;若不是则在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID,返回步骤一。
[0010] 进一步地,所述在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID包括步骤:
[0011] 第一步,在一个控制器上创建逻辑卷,并指定该控制器为主控制器;
[0012] 第二步,其他控制器分别指定为从控制器;
[0013] 第三步,主控制器上的逻辑卷通过主控制器上的TARGET驱动进行映射,然后将映射后的配置文件同步到从控制器中;
[0014] 第四步,从控制器将接收到的配置文件进行解析并加载配置,然后在其缓存结构中虚拟出一个块设备;
[0015] 第五步,在从控制器的虚拟块设备上创建虚拟逻辑卷;
[0016] 第六步,从控制器上的虚拟逻辑卷通过该从控制器的TARGET驱动进行映射。
[0017] 进一步地,所述在缓存结构中虚拟出一个块设备包括:上层逻辑通过submit_bio进入块设备驱动,submit_bio调用generic_make_request完成基本检测;然后进入对应虚拟块设备驱动函数指针,缓存层对外提供的接口为cache_mirror,通过该函数将IO请求转发。
[0018] 进一步地,所述在从控制器的虚拟块设备上创建虚拟逻辑卷,从控制器上的虚拟逻辑卷与主控制器上的逻辑卷除了make_request_fn函数不一样之外,其他函数均相同。
[0019] 进一步地,所述主控制器将映射后的配置文件同步到从控制器中,是需要TARGET驱动映射,映射是通过web页面操作,HA脚本配置完成,配置之后会生成配置文件,最后将配置文件传输到从控制器端。
[0020] 进一步地,所述主控制器的缓存做备份拷贝到从控制器,以及所述从控制器的缓存做备份拷贝到主控制器。
[0021] 进一步地,所述主机端对路径进行聚合采用multipath驱动。
[0022] 另外,本发明还提出了一种基于双控的SCSI TARGET访问控制装置,包括:
[0023] 通讯请求单元,用于主机端向所有控制器发送与目标设备的通讯请求;
[0024] 请求返回单元,用于所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端;
[0025] 路径聚合单元,用于主机端对所有控制器返回的路径进行聚合;
[0026] 目标设备访问单元,用于主机端根据聚合后的路径访问目标设备。
[0027] 可选地,所述基于双控的SCSI TARGET访问控制装置还包括判断单元和多路径设置单元,所述判断单元与所述请求返回单元连接,使主机端判断返回的查询结果是否为多条路径,如果是则与所述路径聚合单元;如果不是则与所述多路径设置单元相连,所述多路径设置单元在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID。
[0028] 从上面所述可以看出,本发明提供的基于双控的SCSI TARGET访问控制方法和装置,通过从控制器端解析配置文件并生成相同SCSI ID的虚拟设备,并配置对外提供TARGET服务。从而,所述基于双控的SCSI TARGET访问控制方法和装置可以做到当主机端多路径软件执行命令时,能有效识别到同一个设备的两条路径。

附图说明

[0029] 图1为本发明实施例双控TARGET服务示意图;
[0030] 图2为本发明实施例基于双控的SCSI TARGET访问控制方法的流程示意图;
[0031] 图3为本发明另一实施例基于双控的SCSI TARGET访问控制方法的流程示意图;
[0032] 图4为本发明实施例主机多路径访问示意图。

具体实施方式

[0033] 为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
[0034] 在本发明的一个实施例中,参阅图2所示,为本发明实施例基于双控的SCSI TARGET访问控制方法的流程示意图。所述基于双控的SCSI TARGET访问控制方法包括:
[0035] 步骤201,主机端向所有控制器发送与目标设备的通讯请求。
[0036] 步骤202,所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端。
[0037] 步骤203,主机端对所有控制器返回的路径进行聚合。
[0038] 步骤204,主机端根据聚合后的路径访问目标设备。
[0039] 在本发明的另一个实施例中,所述基于双控的SCSI TARGET访问控制方法包括:
[0040] 步骤1,主机端向所有控制器发送与目标设备的通讯请求。
[0041] 步骤2,所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端。
[0042] 步骤3,主机端判断返回的查询结果是否为多条路径,是则直接进行步骤5,若不是则进行步骤4。
[0043] 步骤4,在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID,返回步骤1。
[0044] 步骤5,主机端对所有控制器返回的多路径进行聚合。
[0045] 步骤6,主机端根据聚合后的路径访问目标设备。
[0046] 作为本发明的一个实施例,根据图1中所示的为本发明实施例双控TARGET服务示意图,所述基于双控的SCSI TARGET访问控制方法(参阅图3所示)包括:
[0047] 步骤301,主机端向所有控制器发送与目标设备的通讯请求。
[0048] 步骤302,所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端。
[0049] 较佳地,控制器中的TARGET驱动可以将主机端发送的通讯请求解析,在此处主机端发送的通讯请求为SCSI指令。优选地,查询目标设备的路径可以是主机端的用户态进程发送SCSI指令给控制器,控制器的TARGET驱动响应一个模拟ID返回给主机端进程。
[0050] 步骤303,主机端判断返回的查询结果是否为多条路径,是则直接进行步骤310,若不是则进行步骤304。
[0051] 在实施例中,多个控制器根据主机端发送的请求发现目标设备,通过INQUIRY查询到的两个目标设备ID均相同,认为是同一个目标设备,即同一个目标设备具有多条路径。
[0052] 步骤304,在一个控制器上创建逻辑卷,并指定该控制器为主控制器。
[0053] 较佳地,创建有逻辑卷的控制器在其缓存结构中设置该控制器为主控制器。在本实施例中,主控制器标记为ct10。
[0054] 步骤305,其他控制器分别指定为从控制器。
[0055] 在实施例中,在控制器的缓存结构中设置该控制器为从控制器,标记为ct11。
[0056] 步骤306,主控制器上的逻辑卷通过主控制器上的TARGET驱动进行映射,然后将映射后的配置文件同步到从控制器中。
[0057] 优选地,主控制器通过TARGET映射将配置文件同步到从控制器的同时,将配置文件进行保存。
[0058] 步骤307,从控制器将接收到的配置文件进行解析并加载配置,然后在其缓存结构中虚拟出一个块设备。
[0059] 在本发明的实施例中,解析配置文件以及加载配置都是由从控制器中的HA脚本控制完成,通过web界面操作,HA和TARGET驱动有交互接口。
[0060] 另外,对于linux块设备来说,IO请求有基于bio和基于request两种处理方式:对于基于bio的请求处理,对外提供的接口是submit_bio()。对于基于request的请求处理,对外提供的接口是make_request_fn,该函数的具体定义是在块设备初始化时通过blk_queue_make_request函数完成。同时,submit_bio也是所有通用块设备驱动的入口函数。对于IO读写请求,不管是真实块设备还是虚拟块设备,上层逻辑针对块设备层驱动的入口函数都是submit_bio。
[0061] 在缓存结构中虚拟出一个块设备具体实施包括:上层逻辑通过submit_bio进入块设备驱动,submit_bio调用generic_make_request完成一些基本检测,比如要读写的位置是否超过总大小等。然后进入对应虚拟块设备驱动函数指针,在本实施例中驱动函数指针为自定义函数virtual_make_request。由于虚拟块设备不能直接下发IO请求,因此只能转发到控制器的缓存层,缓存层对外提供的接口为cache_mirror,通过该函数将IO请求转发。
[0062] 步骤308,在从控制器的虚拟块设备上创建虚拟逻辑卷。
[0063] 需要说明的是,从控制器上的虚拟逻辑卷与主控制器上的逻辑卷除了make_request_fn函数不一样之外,其他函数均相同。优选地,相同函数的容量等信息也相同。
[0064] 步骤309,从控制器上的虚拟逻辑卷通过该从控制器的TARGET驱动进行映射,然后返回步骤301。
[0065] 较佳地,从控制器上的虚拟逻辑卷通过TARGET驱动映射后,主、从控制器会生成一样的SCSI ID。
[0066] 步骤310,主机端对多路径进行聚合。
[0067] 作为实施例,主机端(比如linux)通过两个控制器分别得到一个设备,比如/dev/sdb,/dev/sdc。通过multipath驱动及软件,生成/dev/mapper/mpathb,对该设备的读写相当于对/dev/sdb和/dev/sdc的读写。聚合之后主机端通过两个控制器只需要关注新生成的设备,IO流可以经过两个控制器,实现负载均衡。从而,能够有效预防一个控制器故障后,读写将中断。
[0068] 步骤311,主机端根据聚合后的多路径访问目标设备。
[0069] 在本发明的一个实施例中,主机端对多路径软件聚合之后对目标设备访问;在发现的两条路径中,ctl0映射出来的目标设备,访问路径较短,称为优化路径。ctl1映射出来的目标设备,访问路径较长,成为非优化路径。优选地,根据主机端的多路径访问策略,I/O可以在路径上发送,通过优化路径时,直接下发到目标设备。而通过非优化路径时,由于虚拟逻辑卷的请求函数为缓存镜像写函数,需要经过两个主、从控制器之间的通信网络。较佳地,所述的访问策略指的是新生成的/dev/mapper/mpathb和/dev/sdb/,/dev/sdc的关系,访问策略是由主机端配置的,比如轮询模式(读写IO在依次在两个设备间轮询),主备模式(只有一个设备进行IO,比如/dev/sdb,当/dev/sdb对应的控制器发生故障时,切换到/dev/sdc)。
[0070] 具体来说,根据图4所示的主机端多路径访问示意图,所述主机端根据聚合后的多路径访问目标设备如果选择优化路径,则主机端的访问请求通过主控制器的逻辑卷直接与目标设备连接。如果选择非优化路径,则主机端的访问请求通过从控制器的虚拟逻辑卷找到主控制器的逻辑卷,然后再通过主控制器的逻辑卷与目标设备连接。
[0071] 值得说明的是,作为实施例,两个控制器中的HA通信可以检测另一个控制器是否发生故障,如果故障,需要接管服务(包括IP和服务)。另外,HA通信可以同步两个控制器间配置文件,具体来说:主机端要想通过访问存储端设备时,需要TARGET驱动映射,映射是通过web页面操作,HA脚本配置完成,配置之后会生成配置文件,这样主机端能看到一条路径;为了让主机端看到两条路径,需要将配置文件传输到从控制器端,从控制器解析配置文件并虚拟出一个块设备映射到主机端。
[0072] 作为另一个实施例,两个控制器中的缓存通信可以从主机端下发的读写IO请求会经过缓存再经过磁盘,由于缓存掉电之后将丢失数据,即使另一个控制器完美接管服务,缓存中的数据也丢失了,为了实现数据不丢失的目的,需要将缓存数据在对端控制器做备份。其中,所述的对端控制器是指一个控制器内的数据保存到另一控制器中,而该另一控制器就是这个控制器的对端控制器。另外,对于从控制器端,由于虚拟出来的块设备没法直接下发请求,需要将读写请求转发到主控制器,由主控制器端完成,相对于主机端读写请求来说,提供了负载均衡能力。
[0073] 作为另一个实施例,TARGET与缓存之间的通信是当通过web完成配置后,主机端能够看到存储端的设备。当主机端对该设备下发读写IO请求时,IO请求转化为ISCSI命令通过网络传输至控制器,控制器通过TARGET驱动拦截并解析ISCSI命令,从ISCSI命令中提取SCSI命令并执行。缓存层相当于做了一次拦截,最后还是要把IO请求传递到磁盘驱动,拦截的目的如前述:保证对端控制器有备份,不会丢失数据;从控制器可以转发读写IO请求。
[0074] 作为本发明的一个实施例,所述基于双控的SCSI TARGET访问控制装置包括依次连接的通讯请求单元、请求返回单元、路径聚合单元、目标设备访问单元。其中,通讯请求单元可以使主机端向所有控制器发送与目标设备的通讯请求,然后请求返回单元能使所有控制器解析主机端发送的请求,并查询目标设备的路径,然后将查询结果分别返回给该主机端。之后路径聚合单元用于主机端对所有控制器返回的路径进行聚合,最后目标设备访问单元便可以让主机端根据聚合后的路径访问目标设备。
[0075] 较佳地,所述基于双控的SCSI TARGET访问控制装置还包括判断单元和多路径设置单元。其中,判断单元与请求返回单元连接,使主机端判断返回的查询结果是否为多条路径,如果是则与路径聚合单元,如果不是则与多路径设置单元相连,多路径设置单元在所有控制器中设置主、从控制器,然后将主、从控制器生成一样的目标设备ID。
[0076] 优选地,多路径设置单元能够在一个控制器上创建逻辑卷并指定该控制器为主控制器,其他控制器分别指定为从控制器。主控制器上的逻辑卷通过主控制器上的TARGET驱动进行映射,然后将映射后的配置文件同步到从控制器中。之后从控制器将接收到的配置文件进行解析并加载配置,在其缓存结构中虚拟出一个块设备。最后,在从控制器的虚拟块设备上创建虚拟逻辑卷,从控制器上的虚拟逻辑卷通过该从控制器的TARGET驱动进行映射。
[0077] 需要说明的是,所述基于双控的SCSI TARGET访问控制装置每个部件以及部件之间进行工作时的步骤、过程以及各种实施例已在上面的基于双控的SCSI TARGET访问控制方法中详细说明了,在此不再作重复论述。
[0078] 需要说明的是,在上面的实施例中说明了两个控制器的SCSI TARGET访问控制,本发明当然也可以基于多个控制器的SCSI TARGET访问控制。如果是多个控制器进行访问控制,则是将其中一个定义为主控制器,其他控制器都为从控制器,其他的访问控制过程与上面所述的内容一致。
[0079] 综上所述,本发明提供的基于双控的SCSI TARGET访问控制方法和装置,创造性地提出了突破SBB存储架构中,一个LUN同时只能被一个控制器读写的限制,能够在两个控制器上同时读写单个LUN;并且,通过虚拟设备驱动仿真块设备,TARGET驱动指定SCSI ID并向外映射,当主机端多路径软件执行INQUIRY命令能有效识别到同一个设备的两条路径;而且,对仿真设备的读写将转发到主控上进行读写;从而,所述的基于双控的SCSI TARGET访问控制方法和装置能够使非主控端对LUN有效的访问,以及主机端的多路径软件可以有效识别;最后,整个所述的基于双控的SCSI TARGET访问控制方法和装置简便、紧凑,易于实现。
[0080] 所属领域的普通技术人员应当理解:以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。