具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图并据实施例,对本发明的技术方案进行详细说明。
参见图1,图1是本发明实施例基于ISCSI的分布式存储***的架构图,如图1所示,该架构图中,主要包括分布式存储***和分布于不同操作***平台的ISCSI Initiator,分布式存储***中包括管理节点(包括主管理节点和备管理节点,本发明中的管理节点如未特别说明,均是指主管理节点)和数据节点,管理节点上部署和启用了ISNS服务器,各数据节点上均部署了多个ISCSI Target。所有ISCSI Initiator和ISCSI Target在启动时均作为ISNS客户端向所述ISNS服务器注册,从而ISNS服务器可以获知注册的所有ISCSIInitiator和ISCSI Target的各种状态信息变化。
以下基于上述架构,对本发明的具体实现进行详细说明。
参见图2,图2是本发明实施例分布式存储***中ISCSI Target负载均衡方法流程图,分布式存储***包括管理节点和数据节点,每个数据节点中均部署多个ISCSI Target,该方法应用于管理节点,如图2所示,主要包括以下步骤:
步骤201、监控所有数据节点中的ISCSI Target的使用状态;
步骤202、根据每个数据节点中各ISCSI Target的使用状态确定该数据节点的负载量;
步骤203、根据所有数据节点中的ISCSI Target的使用状态确定所有数据节点的平均负载量;
步骤204、针对每个数据节点,根据该数据节点的负载量和所述平均负载量对该数据节点执行负载均衡操作。
在本发明实施例中,根据ISCSI Target与ISCSI Initiator的连接情况,可分为以下四种连接状态:已连接、正连接、未连接、未启动。其中,已连接和正连接分别表明ISCSITarget已经或正在与一ISCSI Initiator建立了连接,未连接表明ISCSI Target已启动但尚未与任何ISCSI Initiator建立连接,未启动表明ISCSI Target目前尚未运行。
本发明中,根据ISCSI Target的连接状态确定该ISCSI Target的使用状态,使用状态包括使用和未使用两种取值,其中,将已连接和正连接的ISCSI Target的使用状态值设置为使用,将未连接或未启动的ISCSI Target的使用状态值设置为未使用。
因此,为了监控各数据节点中ISCSI Target的使用状态,管理节点需要先获取各ISCSI Target的连接状态,本发明实施例中,各ISCSI Target可以通过周期性上报自身的连接状态信息到管理节点,或者在自身的连接状态变化时上报自身的连接状态信息到管理节点,使得管理节点可以根据每个ISCSI Target上报的连接状态信息确定该ISCSI Target的使用状态。
在实际应用中,在进行负载均衡时,可以兼顾各个数据节点上ISCSI Target的读写任务量和处于使用状态的ISCSI Target数目。
然而,对于其他接口的读写任务量,分布式文件***通常在执行读写操作之前已经进行了负载均衡,因此,本发明中,主要关注对数据节点上的ISCSI Target数目的负载均衡。
在本发明的一个实施例中,将各数据节点中的处于使用状态的ISCSI Target数目作为衡量该数据节点的负载的标准。
因此,
步骤202中,根据每个数据节点中各ISCSI Target的使用状态确定该数据节点的负载量的方法具体为:将该数据节点中处于使用状态的ISCSI Target的数目确定为该数据节点的负载量;
步骤203中,根据所有数据节点中的ISCSI Target的使用状态确定所有数据节点的平均负载量的方法具体为:将所有数据节点中处于使用状态的ISCSI Target的数目与数据节点的数目的商确定为所有数据节点的平均负载量;
步骤204中,根据该数据节点的负载量和所述平均负载量对该数据节点执行负载均衡操作的方法具体如下:
如果该数据节点的负载量等于所述平均负载量,则不对该数据节点执行负载均衡操作;
如果该数据节点的负载量大于所述平均负载量,则计算该数据节点的负载量与所述平均负载量的差值N1,若该差值N1大于预设阈值,则通知该数据节点关闭N1个处于使用状态的ISCSI Target,若该差值N1不大于预设阈值,则不对该数据节点执行负载均衡操作;
如果该数据节点的负载量小于所述平均负载量,则计算所述平均负载量与该数据节点的负载量的差值N2,若该差值N2大于预设阈值,通知该数据节点启用N2个处于未使用状态的ISCSI Target,若该差值N2不大于预设阈值,不对该数据节点执行负载均衡操作。
这里,关闭ISCSI Target是指将该停止该ISCSI Target服务并把该ISCSI Target放入沉睡队列;启用ISCSI Target是指将未启动的该ISCSI Target启动,或将该ISCSITarget从沉睡队列中取出并激活(即重新启动)。
根据以上负载均衡过程可知,在负载均衡过程中,需要关闭或启动数据节点上处于使用状态的ISCSI Target,这样做的结果会导致处于使用状态的ISCSI Target被关闭后,与该ISCSI Target建立连接的ISCSI Initiator无法得到服务,此时ISCSI Initiator需要重新选择一个ISCSI Target建立连接。
UFS集群分布式文件***中在每创建和启动一个ISCSI Target服务时,会根据每个数据节点Target负载情况确定在哪个数据节点启动ISCSI Target服务,最大程度保证各个数据节点各ISCSI Target在启动运行阶段的负载均衡,减少各个数据节点不必要的负载压力和操作。然而由于数据节点宕机、磁盘故障或管理节点关闭某个ISCSI Target服务等问题可能会导致已连接的某个ISCSI Target变得不可用。但是,ISCSI Initiator并不能获取到最新ISCSI Target信息,这使得ISCSI Initiator访问分布式文件***并不顺畅,导致用户体验较差。
为了解决上述问题,本发明中,在分布式存储***中应用ISNS协议,即如图1所示架构,在管理节点中部署和启用ISNS服务器,这样,所有ISCSI Initiator和ISCSI Target启动时均作为ISNS客户端向ISNS服务器注册,从而,该ISNS服务器可以实时获知各ISCSITarget的连接状态变化,并将各ISCSI Target变化后的连接状态信息通知给每个ISCSIInitiator,使得每个ISCSI Initiator在需要连接ISCSI Target时,可以选择与可用ISCSITarget建立连接,不再尝试与已经变为不可用的ISCSI Target建立连接,因此,可以有效改善用户体验。这里对于一个特定的ISCSI Initiator来说,它的每个可用ISCSI Target需满足以下条件:处于未连接状态,且管理节点配置该ISCSI Initiator对该ISCSI Target的chap认证信息。
本发明中,还可以支持ISCSI Initiator自动重连,也即ISCSI Initiator在与某一ISCSI Target建立连接后,如果因为网络或其它原因导致连接断开,则ISCSI Initiator可以再次与该ISCSI Target建立连接。
而且,本发明中,如果ISCSI Initiator与某一ISCSI Target建立的连接断开后,如果再次连接该ISCSI Target,则在重连过程中,该ISCSI Initiator对该ISCSI Target的chap认证信息和读写权限均未改变的情况下,可以省略chap认证步骤。
现有技术中,ISCSI Initiator与ISCSI Target建立连接的过程为:ISCSIInitiator发连接请求给ISCSI Target,ISCSI Target发送chap认证消息给ISCSIInitiator,ISCSI Initiator将其对该ISCSI Target的chap认证信息(包括用户名、密码等)携带在chap认证响应中发给ISCSI Target,ISCSI Target将该chap认证信息发送到管理节点(管理节点中配置了ISCSI Initiator对该ISCSI Target的chap认证信息)进行chap认证,认证成功,则ISCSI Target会与ISCSI Initiator执行后续的连接流程,认证失败,则ISCSI Target拒绝与ISCSI Initiator建立连接。
本发明中,为了上述自动重连的目的,管理节点需要支持以下操作:
管理节点可以配置或修改ISCSI Initiator对每个ISCSI Target的chap认证信息和读写权限,并将配置或修改的该ISCSI Initiator对该ISCSI Target的chap认证信息和读写权限,作为该ISCSI Initiator对该ISCSI Target的最新的chap认证信息和读写权限通知给所述ISNS服务器;所述ISNS服务器将此信息保存到ISNS数据库。
管理节点还可以将ISCSI Initiator连接ISCSI Target的过程中使用的chap认证信息和该ISCSI Initiator当前对该ISCSI Target的读写权限,作为该ISCSI Initiator最近一次连接该ISCSI Target时的chap认证信息和读写权限通知给所述ISNS服务器;所述ISNS服务器也将此信息保存到ISNS数据库。
可以看出,对于一个ISCSI Initiator来说,如果其与某一ISCSI Target建立过连接,则ISNS服务器在ISNS数据库中保存了该ISCSI Initiator对该ISCSI Target的两份chap认证信息和读写权限,其中一份是该ISCSI Initiator对该ISCSI Target的最新的chap认证信息和读写权限,另一份是该ISCSI Initiator最近一次连接该ISCSI Target时的chap认证信息和读写权限。这两份chap认证信息和读写权限如果相同,则说明该ISCSIInitiator最近一次连接该ISCSI Target之前和之后,该ISCSI Initiator对该ISCSITarget的chap认证信息和读写权限未发生变化,再次连接时不需要chap认证,如果不相同,则说明ISCSI Initiator最近一次连接该ISCSI Target之前和之后,该ISCSI Initiator对该ISCSI Target的chap认证信息和读写权限发生了变化,再次连接时需要chap认证。
基于上述分析,本发明实施例中,ISCSI Initiator与ISCSI Target的连接过程如下:该ISCSI Initiator向该ISCSI Target发送连接请求;该ISCSI Target向管理节点发送连接信息请求;管理节点向ISNS服务器发送chap认证指示请求,ISNS服务器将该ISCSIInitiator对该ISCSI Target的最新的chap认证信息和读写权限与该ISCSI Initiator最近一次连接该ISCSI Target时的chap认证信息和读写权限进行比较,两者信息相同则向管理节点发送表明不需要进行chap认证的chap认证指示,否则发送需要进行chap认证的chap认证指示。管理节点接收到ISNS服务器返回的chap认证指示后,将chap认证指示返回给该ISCSI Target;该ISCSI Target根据该返回的chap认证指示确定该ISCSI Initiator本次连接该ISCSI Target是否需要chap认证,其中,如果chap认证指示表明需要进行chap认证,则该ISCSI Target执行对该任一ISCSI Initiator的chap认证和连接流程,如果chap认证指示表明不需要进行chap认证,则跳过chap认证阶段,直接执行对该任一ISCSI Initiator的连接流程。
另外,需要说明的是,在实际实现中,分布式文件***的管理节点可以有多个,其中一个作为主管理节点,其它管理节点作为备份管理节点。在主管理节点未故障的情况下,由主管理节点执行上述图2所示本发明实施例中管理节点执行的各项功能,当主管理节点故障时,可以从备管理节点中选择一个作为新的主管理节点,接替故障的主管理节点工作,成为新的主管理节点。
以上对本发明实施例分布式存储***中ISCSI Target负载均衡方法进行了详细说明,本发明还提供了一种分布式存储***中ISCSI Target负载均衡装置,以下结合图3进行详细说明。
参见图3,图3是本发明实施例分布式存储***中ISCSI Target负载均衡装置的结构示意图,分布式存储***包括管理节点和数据节点,每个数据节点中均部署多个ISCSITarget,该装置应用于管理节点,如图3所示,包括:监控单元301、负载确定单元302、均衡单元303;其中,
监控单元301,用于监控所有数据节点中的ISCSI Target的使用状态;
负载确定单元302,用于根据每个数据节点中各ISCSI Target的使用状态确定该数据节点的负载量;用于根据所有数据节点中的ISCSI Target的使用状态确定所有数据节点的平均负载量;
均衡单元303,用于针对每个数据节点,根据该数据节点的负载量和所述平均负载量对该数据节点执行负载均衡操作。
图3所示装置中,
所述监控单元301,监控各数据节点中的ISCSI Target的使用状态时,用于:接收所有数据节点中的ISCSI Target连接状态及变化信息周期性上报和/或该ISCSI Target的连接状态变化时上报的连接状态信息,根据每个ISCSI Target上报的连接状态信息确定该ISCSI Target的使用状态。
图3所示装置中,
所述使用状态包括使用和未使用;
所述连接状态包括已连接、正连接、未连接、未启动;
所述监控单元301,根据每个ISCSI Target上报的连接状态信息确定该ISCSITarget的使用状态时,用于:如果该ISCSI Target的连接状态为已连接或正连接,则确定该ISCSI Target处于使用状态,否则,确定该ISCSI Target处于未使用状态。
图3所示装置中,
所述负载确定单元302,根据每个数据节点中各ISCSI Target的使用状态确定该数据节点的负载量时,用于:将该数据节点中处于使用状态的ISCSI Target的数目确定为该数据节点的负载量;
所述负载确定单元302,根据所有数据节点中的ISCSI Target的使用状态确定所有数据节点的平均负载量时,用于:将所有数据节点中处于使用状态的ISCSI Target的数目与数据节点的数目的商确定为所有数据节点的平均负载量;
所述均衡单元303,根据该数据节点的负载量和所述平均负载量对该数据节点执行负载均衡操作时,用于:
如果该数据节点的负载量等于所述平均负载量,则不对该数据节点执行负载均衡操作;
如果该数据节点的负载量大于所述平均负载量,则计算该数据节点的负载量与所述平均负载量的差值N1,若该差值N1大于预设阈值,则通知该数据节点关闭N1个处于使用状态的ISCSI Target,若该差值N1不大于预设阈值,则不对该数据节点执行负载均衡操作;
如果该数据节点的负载量小于所述平均负载量,则计算所述平均负载量与该数据节点的负载量的差值N2,若该差值N2大于预设阈值,通知该数据节点启动N2个处于未使用状态的ISCSI Target,若该差值N2不大于预设阈值,不对该数据节点执行负载均衡操作。
图3所示装置中,还包括启用单元304;
所述启用单元304,用于在管理节点中启用ISNS服务器;所有ISCSI Initiator和ISCSI Target启动时均作为ISNS客户端向ISNS服务器注册,以使所述ISNS服务器获知各ISCSI Target的连接状态变化,并将各ISCSI Target变化后的连接状态信息通知给每个ISCSI Initiator,使得每个ISCSI Initiator选择与可用ISCSI Target建立连接;其中可用ISCSI Target是指处于未连接状态的ISCSI Target,且管理节点配置了该ISCSIInitiator对该处于未连接状态的ISCSI Target的chap认证信息。
图3所示装置中,还包括配置单元305和连接管理单元306;
所述配置单元305,用于配置或修改ISCSI Initiator对每个ISCSI Target的chap认证信息和读写权限,并将配置或修改的该ISCSI Initiator对该ISCSI Target的chap认证信息和读写权限,作为该ISCSI Initiator对该ISCSI Target的最新的chap认证信息和读写权限通知给所述ISNS服务器;
所述连接管理单元306,用于将ISCSI Initiator连接ISCSI Target的过程中使用的chap认证信息和该ISCSI Initiator当前对该ISCSI Target的读写权限,作为该ISCSIInitiator最近一次连接该ISCSI Target时的chap认证信息和读写权限通知给所述ISNS服务器;
所述连接管理单元306,用于接收ISCSI Target发送的针对任一ISCSI Initiator的连接信息请求,向所述ISNS服务器发送chap认证指示请求,接收所述ISNS服务器返回的chap认证指示并将其返回给该ISCSI Target,以使该ISCSI Target确定该chap认证指示表明需要chap认证时,执行对该任一ISCSI Initiator的chap认证和连接流程,确定该chap认证指示表明不需要chap认证时,跳过chap认证阶段,直接执行对该任一ISCSI Initiator的连接流程;其中,该连接信息请求是该ISCSI Target接收到该任一ISCSI Initiator的连接请求后发向管理节点的;所述ISNS服务器接收到管理节点的chap认证指示请求时,比较该任一ISCSI Initiator对该ISCSI Target的最新的chap认证信息和读写权限以及该任一ISCSI Initiator最近一次连接该ISCSI Target时的chap认证信息和读写权限,如果相同,则返回表明不需要chap认证的chap认证指示,如果不同,则返回表明需要chap认证的chap认证指示。。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。