一种地址分配方法以及装置与流程

文档序号:16246527发布日期:2018-12-11 23:38阅读:129来源:国知局
一种地址分配方法以及装置与流程

本申请涉及分布式技术领域,具体而言,涉及一种地址分配方法以及装置。

背景技术

分布式存储系统由大量主机通过网络互联构成,对外作为一个整体提供存储服务。分布式存储系统一般包括多个入口节点以及多个存储节点。入口节点用于对外实现客户端对分布式存储系统的访问控制,对内实现客户端和存储节点之间信息以及数据的传输。每个入口节点通常会具有一个用于和客户端通信的服务网卡。客户端通过该服务网卡的第四版本互联网协议(internetprotocolversion4,ipv4)地址实现与入口节点的通信,从而访问分布式存储系统;一旦该服务网卡出现问题,会导致用户无法访问分布式存储系统。

集群简单数据库(clustertempledatabase,ctdb)技术提出了解决上述问题的思路。ctbd提供一个虚ipv4地址资源池,并会将虚ipv4地址资源池中的虚ipv4分配至每一个入口节点的服务网卡,而虚ipv4地址与该服务网卡的实ipv4地址具有相应的映射关系,并属于同一网段。用户通过连接虚ipv4地址访问分布式存储系统,并不关心实际入口节点是哪一个。当某个实际入口节点宕机之后,对应的虚ipv4地址会被转移到其它的实际入口节点上去,这一过程中对于用户来说是透明的,因此不会影响用户对分布式存储系统的访问。

但是,由于分布式存储网络中的各个入口节点上的服务网卡使用同一网段的ip地址进行通信,而一个24位网段的ipv4地址最多只有254个,且在每一入口节点的服务网卡上都需要分配两个ipv4地址(一个虚ipv4,一个实ipv4),因此,当入口节点的数量较多时,会占用该网段下大量的ipv4地址,留给同一网段下客户端使用的ipv4地址非常少,导致无法在该网段下配置多台客户端,无法满足使用需求。



技术实现要素:

有鉴于此,本申请实施例的目的在于提供一种地址分配方法以及装置,能够减少入口节点占用的同一网段的ipv4地址的数量,增加同一网段下客户端能够使用ipv4地址的数量,满足使用需求。

第一方面,提供一种地址分配方法,该方法应用于分布式存储系统中部署有集群简单数据库ctdb进程的入口节点,当所述入口节点为主节点时,该方法包括:

基于为所述入口节点上的进程通信网卡配置的实ipv4地址,检测所述进程通信网卡与所述分布式存储系统中其它能够正常工作的第一入口节点上的进程通信网卡之间的心跳连接状态;

当与任一第一入口节点上的进程通信网卡之间的心跳连接失败时,基于为所述任一第一入口节点的服务网卡分配的ipv6地址,检测所述服务网卡与所述任一第一入口节点上的服务网卡之间的第一通信状态;

根据检测到的所述第一通信状态对应的虚ipv4地址分配方式,对所述任一第一入口节点上的服务网卡所具有的虚ipv4地址进行重新分配;

当所述入口节点并非主节点,且当所述入口节点的服务网卡的工作状态异常后,该方法包括:

基于为所述入口节点上的服务网卡分配的ipv6地址,检测所述服务网卡与所述分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡之间的第二通信状态;

当检测到所述第二通信状态正常时,基于为所述入口节点上的进程通信网卡分配的实ipv4地址,向所述分布式存储系统内的主节点发送异常结束通知;所述异常结束通知用于指示所述主节点为所述入口节点重新分配虚ipv4地址。

第二方面,提供一种地址分配装置,该装置应用于分布式存储系统中部署有集群简单数据库ctdb进程的入口节点,当所述入口节点为主节点时,该装置包括:

心跳检测模块,用于基于为所述入口节点上的进程通信网卡配置的实ipv4地址,检测所述进程通信网卡与所述分布式存储系统中其它能够正常工作的第一入口节点上的进程通信网卡之间的心跳连接状态;

第一通信状态检测模块,用于在与任一第一入口节点上的进程通信网卡之间的心跳连接失败时,基于为所述任一第一入口节点的服务网卡分配的ipv6地址,检测所述服务网卡与所述任一第一入口节点上的服务网卡之间的第一通信状态;

地址重新分配模块,用于根据检测到的所述第一通信状态对应的虚ipv4地址分配方式,对所述任一第一入口节点上的服务网卡所具有的虚ipv4地址进行重新分配;

当所述入口节点并非主节点时,且当所述入口节点的服务网卡的工作状态异常后,该装置包括:

第二通信状态检测模块,用于基于为所述入口节点上的服务网卡分配的ipv6地址,检测所述服务网卡与所述分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡之间的第二通信状态;

发送模块,用于当检测到所述第二通信状态正常时,基于为所述入口节点上的进程通信网卡分配的实ipv4地址,向所述分布式存储系统内的主节点发送状态通知异常结束通知;所述异常结束通知用于指示所述主节点为所述入口节点重新分配虚ipv4地址。

第三方面,提供一种计算机设备,包括存储器、处理器及存储在该存储器上并可在该处理器上运行的计算机程序,其中,上述处理器执行上述计算机程序时实现如第一方面所述的地址分配的步骤。

第四方面,提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如第一方面所述的地址分配的步骤。

本申请实施例为分布式存储系统中的入口节点上的服务网卡预先配置ipv6地址,以及虚ipv4地址,并为进程通信网卡配置实ipv4地址。在入口节点为主节点时,入口节点会在与分布式存储系统中其它能够正常工作的第一入口节点上的进程通信网卡之间的心跳连接失败时,基于为入口节点的服务网卡分配的ipv6地址,检测入口节点的服务网卡与第一入口节点上的服务网卡之间的第一通信状态,并根据第一通信状态对应的虚ipv4地址分配方式,对心跳连接失败的第一入口节点上的服务网卡所具有的虚ipv4地址进行重新分配;在入口节点并非主节点,且入口节点的服务网卡的工作状态异常时,入口节点基于为服务网卡所配置的ipv6地址检测服务网卡与分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡的第二通信状态,并在检测到第二通信状态正常时,基于为入口节点的进程通信网卡分配的实ipv4地址,向分布式存储系统内的主节点发送异常结束通知,以使得主节点能够根据状态通知实现在各入口节点的服务网卡的虚ipv4地址的分配控制。该实施例中,使用ipv6地址代替了为服务网卡分配的实ipv4地址,完成虚ip地址的分配过程,分布式存储系统中各个入口节点上的服务网卡平均只会占据一个虚ipv4地址,从而能够减少服务网卡对ipv4地址的占用,能够留出同一网段下更多的ipv4地址给客户端使用,满足用户的使用需求。

为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。

图1示出了本申请实施例所提供的一种地址分配方法中,当入口节点并非主节点时的流程图;

图2示出了本申请实施例所提供的地址分配方法中,检测服务网卡与所述分布式存储系统内其它入口节点上的服务网卡之间的通信状态具体方法的流程图;

图3示出了本申请实施例所提供的一种地址分配方法中,当入口节点为主节点时的流程图;

图4示出了本申请实施例所提供的一种地址分配装置的结构示意图;

图5示出了本申请实施例所提供的一种计算机设备的结构示意图。

具体实施方式

在相关技术中,将ctdb技术应用于分布式存储场景中时,每一个入口节点上均会部署有ctdb进程。ctdb进程主要用于管理和维护入口节点中服务网卡的ip地址状态,因此ctdb进程在本申请中又称为管理进程。多个部署有ctdb进程的入口节点构成一个ctdb集群。为了实现集群中ctdb进程间的通信,在入口节点上还设置有进程通信网卡。集群内的ctdb进程维护相同的虚ipv4地址资源池。集群中会选举出一个节点作为ctdb的主节点master;master能够将虚ipv4地址资源池中的虚ipv4地址分配至集群内每一个入口节点,入口节点上的服务网卡使用所分配的虚ipv4地址与客户端进行通信。

当其中一个入口节点上的服务网卡出现异常情况的时候(下称故障节点),master会将为该故障节点的服务网卡分配的虚ipv4地址迁移到其它非故障的入口节点的服务网卡上,从而保证用户通过该虚ip访问分布式存储系统不会受到影响。同时,服务网卡还设置有一实ipv4地址;当故障节点中服务网卡的异常状况结束后,该故障节点会向master发送恢复请求;master在接收到恢复请求后,基于故障节点上服务网卡的实ipv4地址,对故障节点的服务网卡进行ping操作;如果能够ping通,则向该故障节点分配虚ipv4地址。

为服务网卡所分配的虚ipv4地址和实ipv4地址是属于同一网段的ip地址,也即,每一个入口节点的服务网卡需要占据同一网段的ipv4地址中的两个。当入口节点数量较多时,会导致无法在该网段下配置多台客户端,无法满足用户的使用需求。

与现有技术不同,本申请实施例在服务网卡上预先配置第六版本互联网协议(internetprotocolversion6,ipv6)地址。使用ipv6地址代替了为服务网卡分配的实ipv4地址,完成虚ip地址的分配过程,因而集群内所有入口节点上的服务网卡平均只会占据一个虚ipv4地址,减少了对ipv4地址的占用,能够留出同一网段下更多的ipv4地址给客户端使用,满足用户的使用需求。

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请做进一步详细的说明。在本申请实施例中,入口节点集群中包括多个入口节点;每个入口节点上均部署有ctdb进程;每个入口节点均设置有服务网卡和进程通信网卡;服务网卡具有预先配置的ipv6地址;进程通信网卡具有预先配置的实ipv4地址。每个入口节点上都保存有集群内其它入口节点上服务网卡的ipv6地址,以及进程通信网卡的实ipv4地址。ip资源池在创建之后,ip资源池中每个虚ipv4地址以表项的形式保存在所有入口节点上,形成在每个入口节点上的地址分配表项。如下表1所示,提供一种ipv6地址、实ipv4地址以及ip资源池的保存示例:

表1

当集群创建之后,部署有ctdb进程的入口节点之间会进行主节点的选举;在选举出主节点后,主节点首先将ip资源池中的一个虚ipv4作为自身所具有的服务网卡的虚ipv4地址分配给自身,然后通过轮训的方式并按照平均分配原则依次将ip资源池中的虚ipv4地址分配给各个入口节点;当某个入口节点在被分配虚ipv4地址之后,需要使用该虚ipv4地址,与主节点具有的ipv4地址进行通信;当通信正常时,主节点认为该虚ipv4地址分配正常;当通信不正常时,则将该虚ipv4地址分配给下一个节点,直至所有虚ipv4地址分配完成,入口节点集群能够正常工作。主节点会将为每个入口节点分配的虚ipv4地址保存在本地的地址分配表项中,并将为每个入口节点分配的虚ipv4地址同步到集群内的其它入口节点上。

当入口节点集群正常工作之后,需要对每个入口节点中服务网卡、进程通信网卡以及所部署的ctdb进程的工作状态进行监测,当监测到服务网卡、进程通信网卡以及ctdb进程中的任意一项出现故障后,都会启动后续的虚ipv4地址接管,来保证集群能够为客户端提供正常的服务。

本申请实施例所提供的地址分配方法,该方法主要用于服务网卡出现故障后对服务网卡所具有的虚ipv4地址进行重新分配,以及当服务网卡的故障消除后重新向该服务网卡分配虚ipv4地址。该方法的执行主体为分布式存储系统中任一入口节点,具体地,执行下述步骤的可以是在入口节点上部署的ctdb进程。入口节点包括服务网卡和进程通信网卡。服务网卡具有预先配置的ipv6地址;进程通信网卡具有预先配置的实ipv4地址;为了描述清楚,在本申请实施例中,将执行该地址分配方法的入口节点为目标入口节点,来对本申请实施例所提供的地址分配方法加以说明。

参见图1所示,当目标入口节点并非主节点时,该方法包括:

s101:监测目标入口节点上的服务网卡的工作状态。

在具体实现的时候,目标入口节点上的服务网卡的工作状态是在服务网卡能够为客户端提供正常服务时监测的。具体地,目标入口节点的服务网卡的工作状态可以通过下述方法进行监测:

监测目标入口节点上的服务网卡的物理链路状态;以及监测目标入口节点上的服务网卡与客户端之间的逻辑链路状态。

在具体实现的时候,工作状态是指服务网卡为客户端提供服务的状态。若目标入口节点上的服务网卡能够正常向客户端提供服务,则认为目标入口节点上的服务网卡的工作状态正常;若目标入口节点上的服务网卡不能正常向客户端提供服务,则认为目标入口节点上的服务网卡的工作状态异常。

此处,目标入口节点上的服务网卡的物理链路状态是指目标入口节点的服务网卡的开启、关闭、网线断开等物理状态。服务网卡在物理链路正常时,会向处理器传输正常工作的电平信号;一旦该电平信号发生了改变,就意味着物理链路出现异常。因此这里可以通过检测该电平信号来对目标入口节点上的服务网卡的物理链路状态进行监测。

目标入口节点上的服务网卡与客户端之间的逻辑链路状态,是指目标入口节点上的服务网卡与客户端之间的网络连接状态,可以通过监测目标入口节点上的服务网卡的丢包率等进行监测。例如,目标入口节点上的ctdb进程会周期性检测目标入口节点上的服务网卡在一定时间长度内的丢包率;如果检测到丢包率大于预设的丢包率阈值,则认为目标入口节点上的服务网卡与客户端之间的逻辑链路状态出现异常。如果检测到丢包率未大于该预设的丢包率阈值,则认为目标入口节点上的服务网卡与客户端之间的逻辑链路状态正常。

此处,需要注意的是,在对丢包率进行统计的时候,一般只基于为该目标入口节点上的服务网卡分配的虚ipv4地址进行。

s102:当目标入口节点的服务网卡的工作状态异常时,基于为目标入口节点上的所述进程通信网卡分配的实ipv4地址,向所述分布式存储系统内的主节点发送异常通知;所述异常通知用于指示所述主节点将分配给所述入口节点的虚ipv4地址转分配给所述分布式存储系统中的能够正常工作的第一指定入口节点。

具体地,当监测到目标入口节点的服务网卡的工作状态异常时,部署在目标入口节点的服务网卡上的ctdb进程会将目标入口节点标记为不健康状态,并向进程通信网卡发出指令,使得目标入口节点的进程通信网卡向集群中的主节点master发送异常通知,该异常通知以目标入口节点的进程通信网卡所具有的实ipv4地址为源地址,以主节点上的进程通信网卡所具有的实ipv4地址为目的地址,以告知主节点当前目标入口节点的服务网卡出现故障。master上的进程通信网卡在收到目标入口节点的进程通信网卡发送的异常通知后,将该异常通知传递给master上的ctdb进程,master上的ctdb进程在接收到该异常通知后,将分配给目标入口节点的服务网卡的虚ipv4地址转分配给分布式存储系统中的能够正常工作的第一指定入口节点。

此处,目标入口节点的ctdb进程将入口节点标记为不健康状态后,可以自动通知目标入口节点的服务网卡释放其所具有的虚ipv4地址;master上的ctdb进程在接收到目标入口节点发送的异常通知后,直接将分配给目标入口节点的服务网卡的虚ipv4地址分配给第一指定入口节点。或者,master上的ctdb进程在接收到该异常通知后,会首先生成地址释放指令,并将该地址释放指令发送给master上进程通信网卡;master上进程通信网卡基于其所具有的实ipv4地址将地址释放指令发送给目标入口节点上的进程通信网卡;master上的ctdb进程还将该目标入口节点的服务网卡所分配的虚ipv4地址分配给第一指定入口节点。目标入口节点的进程通信网卡接收到master发送的地址释放指令后,将地址释放指令传递给目标入口节点的ctdb进程,目标入口节点的ctdb进程通知入口节点的服务网卡释放其所具有的虚ipv4地址。

需要注意的是,虚ipv4地址在集群内不同入口节点的服务网卡上的分配一般遵循平均分配原则;主节点会记录集群内每个入口接点上的服务网卡所分配的虚ipv4地址的分配情况;在将入口节点的服务网卡的虚ipv4地址分配给集群内的第一指定入口节点时,第一指定入口节点是master基于平均分配的原则,从当前能够正常工作的入口节点中确定的;主节点在将目标入口节点的虚ipv4地址分配给第一指定入口节点之前,第一指定入口节点可以具有其它的ipv4地址;在主节点在将目标入口节点的虚ipv4地址分配给第一指定入口节点之后,第一指定入口节点够代替目标入口节点与客户端进行通信,此客户端指使用目标入口节点具有的虚ipv4地址访问分布式存储系统的客户端;同时,第一指定入口节点使用其原本所具有的ipv4与其他客户端进行通信功能不受影响;其他客户端是指使用第一指定入口节点原本所具有的虚ipv4地址访问分布式存储系统的客户端。

s103:当目标入口节点的服务网卡的工作状态异常后,基于为所述目标入口节点上的服务网卡分配的ipv6地址,检测所述服务网卡与所述分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡之间的第二通信状态。

在具体实现的时候,由于目标入口节点的服务网卡所具有的虚ipv4地址已经被分配给第一指定入口节点,因此此时目标入口节点的服务网卡只具有ipv6地址,只能通过ipv6地址对其工作状态进行检测。

具体地,由于目标入口节点的服务网卡出现故障时,可能是物理链路出现问题,也可能是逻辑链路出现问题。目标入口节点会周期性的基于为目标入口节点的服务网卡分配的ipv6地址,检测目标入口节点的服务网卡与集群内能够正常工作的第二入口节点上的服务网卡之间的第二通信状态,以检测入口节点的服务网卡是否恢复通信功能。

此处,集群内每个入口节点上的服务网卡都具有唯一的ipv6地址。该地址是由64位的地址前缀以及64位的地址后缀组成;其中地址前缀为:fec0::c:d661:feff:fe17;地址后缀为服务网卡的介质访问控制(mediaaccesscontrol,mac)地址的后64位;例如某服务网卡的mac地址为;d4:61:fe:17:c3:00,则其对应的ipv6地址为:fec0::e:d661:feff:fe17:c300。

当检测目标入口节点的服务网卡与集群内第二入口节点的第二通信状态时,目标入口节点的ctdb进程会周期性的向入口节点的服务网卡发送指令,令目标入口节点的服务网卡使用其ipv6地址与第二入口节点的服务网卡进行通信,并根据与第二入口节点的服务网卡的通信的结果确定上述第二通信状态。

具体地,参见图2所示,本申请实施例提供一种基于为所述目标入口节点上的服务网卡分配的ipv6地址,检测所述服务网卡与所述分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡之间的第二通信状态的具体方法,该方法包括:

s201:从预先配置的地址分配表中,获取所述第二入口节点上的服务网卡的ipv6地址;所述地址分配表中包含分布式存储系统内所有入口节点上服务网卡的ipv6地址;

s202:根据所述服务网卡的ipv6地址,以及获取的所述第二入口节点上的服务网卡的ipv6地址,向所述第二入口节点发送测试数据包。

s203:检测是否在预设时长内接收到任意一个所述第二入口节点对测试数据包的响应消息;若是,则跳转至204;若否,则跳转至s205。

s204:确定所述第二通信状态正常。

s205:确定所述第二通信状态不正常。

在具体实现的时候,由于每个入口节点上都保存有地址分配表,地址分配表中携带有集群内各个入口节点中服务网卡的ipv6地址;因此目标入口节点ctdb进程会首先从地址分配表中,获取除目标入口节点的服务网卡外能够正常工作的第二入口节点的服务网卡的ipv6地址。

此处,第二入口节点,可以是集群内除目标入口节点外所有能够正常工作的入口节点,也可以是集群内除目标入口节点外能够正常工作的入口节点中的一部分。

目标入口节点在获取第二入口节点上的服务网卡的ipv6地址后,会向目标入口节点的服务网卡发送指令,指示目标入口节点的服务网卡向第二入口节点上的服务网卡发送测试数据包。其中,该测试数据包以目标入口节点的服务网卡的ipv6地址为源ip地址,以第二入口接待点上的服务网卡的ipv6地址为目的地址。当某第二入口节点的服务网卡接收到入口节点发送的测试数据包后,将该测试数据包传递给第二入口节点上部署的ctdb进程,第二入口节点的ctdb进程在接收到测试数据包后,会向第二入口节点的服务网卡发送指令,指示该第二入口节点的服务网卡向目标入口节点反馈响应消息。目标入口节点的ctdb进程在向入口节点的服务网卡发送指令,指示目标入口节点的服务网卡向第二入口节点上的服务网卡发送测试数据包后,启动计时;如果在预设时长内接收到任一第二入口节点对测试数据包的响应消息,则确定入口节点的服务网卡的通信状态正常。如果未收到任何第二入口节点对测试数据包的响应消息,则目标入口节点的服务网卡的通信状态不正常。

例如,目标入口节点会每隔预设时间,向目标入口节点的服务网卡发送指令,指示目标入口节点的服务网卡向集群内第二入口节点的服务网卡发送ping指令,使用目标入口节点的服务网卡的ipv6地址ping第二入口节点的ipv6地址;如果能ping通某个第二入口节点,则认为该目标入口节点的服务网卡的通信状态正常。如果无法ping通任何一个第二入口节点,则认为该目标入口节点的服务网卡的通信状态不正常。

s104:在检测到目标入口节点的服务网卡与分布式存储系统内第二入口节点上的第二服务网卡之间的通信状态正常后,基于为所述目标入口节点上的进程通信网卡分配的实ipv4地址,向所述分布式存储系统内的主节点发送状态通知,异常结束通知用于指示主节点为所述目标入口节点重新分配虚ipv4地址。

此处,该异常结束通知的源地址为目标入口节点的进程通信网卡所具有的实ipv4地址;目的地址为主节点上的进程通信网卡所具有的实ipv4地址。当主节点的进程通信网卡接收到目标入口节点的进程通信网卡发送的异常结束通知后,会将该异常结束通知转发给主节点的ctdb进程;主节点的ctdb进程基于该异常结束通知,为目标入口节点的服务网卡重新分配虚ipv4地址。

需要注意的是,为了保证向客户端提供正常服务,ip资源池中的所有虚ip地址都被会被分配给集群内的各个入口节点。因此,在向目标入口节点的服务网卡重新分配虚ipv4地址的时候,master上的ctdb进程首先要基于平均分配原则,根据当前虚ipv4地址的分配情况记录,确定向目标入口节点的服务网卡分配的虚ipv4地址;然后向master上的进程通信网卡发送指令,指示master上的进程通信网卡向当前分配了该虚ipv4地址的原入口节点发送地址释放指令,以使该原入口节点上的ctdb进程控制服务网卡将要分配给目标入口节点的虚ipv4地址释放,原入口节点在将虚ipv4地址释放后,通过原入口节点上的进程通信网卡向master上的ctdb进程发送释放成功反馈;master上的ctdb进程在接收到原入口节点对地址释放指令的释放成功反馈后,将该虚ipv4地址分配给目标入口节点的服务网卡。

此时,为目标入口节点的服务网卡重新分配的虚ipv4地址,与该目标入口节点的服务网卡最近一次故障之前所具有的虚ipv4地址可以相同,也可以不同。

本申请实施例中,当目标入口节点并非主节点,且目标入口节点的服务网卡的工作状态异常时,目标入口节点基于为服务网卡所配置的ipv6地址检测服务网卡与分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡的第二通信状态,并在检测到第二通信状态正常时,基于为目标入口节点的进程通信网卡分配的实ipv4地址,向分布式存储系统内的主节点发送异常结束通知,以使得主节点能够根据状态通知实现在各入口节点的服务网卡的虚ipv4地址的分配控制。该实施例中,使用ipv6地址代替了为服务网卡分配的实ipv4地址,完成虚ip地址的分配过程,分布式存储系统中各个入口节点上的服务网卡平均只会占据一个虚ipv4地址,从而能够减少服务网卡对ipv4地址的占用,能够留出同一网段下更多的ipv4地址给客户端使用,满足用户的使用需求。

参见图3所示,当目标入口节点为主节点时,该方法包括:

s301:基于为所述目标入口节点上的进程通信网卡配置的实ipv4地址,检测目标入口节点的进程通信网卡与所述分布式存储系统中能够正常工作的第一入口节点上的进程通信网卡之间的心跳连接状态。

s302:当与任一第一入口节点上的进程通信网卡之间的心跳连接失败时,基于为所述任一第一入口节点的服务网卡分配的ipv6地址,检测目标入口节点的服务网卡与所述任一第一入口节点上的服务网卡之间的第一通信状态。

s303:根据检测到的所述第一通信状态对应的虚ipv4地址分配方式,对所述任一第一入口节点上的服务网卡所具有的虚ipv4地址进行重新分配。

在具体实现的时候,作为主节点的目标入口节点上的ctdb进程会控制目标入口节点对集群中的能够正常工作的第一入口节点进行心跳检测。

例如,集群内有4个部署有ctdb进程的入口节点,分别为节点a、节点b、节点c和节点d;节点a是作为主节点且为目标入口节点。假设节点c当前为故障节点,则将节点b和节点d作为第一入口节点,节点a上的ctdb进程会通过节点a具有的进程通信网卡的实ipv4地址与节点b和节点d上的进程通信网卡的实ipv4地址分别建立心跳链路,并基于和节点b和节点d分别建立的心跳链路,每隔2秒向集群内的节点b和节点d分别发送心跳包。若并未收到节点b对心跳包的反馈,则认为与节点b之间的心跳连接失败,基于为节点b上的服务网卡分配的ipv6地址,检测与节点b上的服务网卡与之间的通信状态。若接收到节点d对心跳包的反馈,则认为与节点d之间的心跳连接成功,节点a会等待下个心跳周期到达时重复上述心跳检测而过程。

集群内的每个入口节点上都保存有地址分配表,地址分配表中携带有集群内各个入口节点中服务网卡的ipv6地址;当目标入口节点上的进程通信网卡与任一第一入口节点上的进程通信网卡之间的心跳连接失败时,目标入口节点的ctdb进程会向目标入口节点的服务网卡发送指令,通知目标入口节点的服务网卡向该心跳连接失败的第一入口节点发送测试数据包,该测试数据包以目标入口节点的服务网卡的ipv6地址为源ip地址,以从地址分配标表中获取的该心跳连接失败的第一入口节点上的服务网卡的ipv6地址为目的ip地址,并发送给该心跳连接失败的第一入口节点。

如果该心跳连接失败的第一入口节点服务网卡能够正常工作,其将测试数据包发送给该心跳连接失败的第一入口节点上的ctdb进程;该心跳连接失败的第一入口节点的ctdb进程会通过该心跳连接失败的第一入口节点的服务网卡向目标入口节点反馈响应消息。目标入口节点的ctdb进程在目标入口节点的服务网卡发出测试数据包后,启动计时;如果在预设时长内接收到该心跳连接失败的第一入口节点的响应消息,则确定第一通信状态为正常通信。如果该心跳连接失败的第一入口节点的服务网卡不能正常工作,或者该心跳连接失败的第一入口节点上的ctdb进程出现异常,则无法向入口节点反馈响应消息;此时,目标入口节点无法在预设时长内接收到该心跳连接失败的第一入口节点的响应消息,则确定第一通信状态为异常通信。

当第一通信状态为正常通信时,目标入口节点基于为所述服务网卡分配的ipv6地址,向该心跳连接失败的第一入口节点发送地址释放指令,以使该心跳连接失败的第一入口节点释放该心跳连接失败的第一入口节点上的服务网卡所具有的虚ipv4地址,并将该心跳连接失败的第一入口节点上的服务网卡的虚ipv4地址分配给所述分布式存储系统中能够正常工的第二指定入口节点。

此处,目标入口节点的ctdb进程会基于为入口节点的服务网卡分配的ipv6地址,向该心跳连接失败的第一入口节点的ctdb进程发送地址释放指令,该地址释放指令的源ip为目标入口节点的服务网卡的ipv6地址;目的ip为该心跳连接失败的第一入口节点的服务网卡的ipv6地址。目标入口节点的ctdb进程会通过目标入口节点的服务网卡将该地址释放指令发送给该心跳连接失败的第一入口节点ctdb进程;该心跳连接失败的第一入口节点的ctdb进程接收到该地址释放指令后,控制心跳连接失败的第一入口节点的服务网卡释放其虚ipv4地址。目标入口节点将该心跳连接失败的第一入口节点的服务网卡的虚ipv4地址分配给集群中能够正常工作的第二指定入口节点的服务网卡。分配的方法与上述图1对应的实施例中类似,在此不再赘述。

当第二服务网卡的通信状态为异常通信时,目标入口节点将该心跳连接失败的第一入口节点上的服务网卡的虚ipv4地址分配给所述分布式存储系统中能够正常工作的第二指定入口节点。

另外,当该心跳连接失败的第一入口节点的ctdb进程故障后,该心跳连接失败的第一入口节点上的ctdb进程会进入重启。该心跳连接失败的第一入口节点的ctdb进程重启后,会检测自身所具有的服务网卡以及进程通信网卡是否都能够正常工作,若该心跳连接失败的第一入口节点的服务网卡能够正常工作,则该心跳连接失败的第一入口节点的服务网卡ctdb进程会主动向作为主节点的目标入口节点发送异常结束通知,以使作为主节点的目标入口节点在接收到该心跳连接失败的第一入口节点发送的异常结束通知后,为该心跳连接失败的第一入口节点上的服务网卡重新分配虚ipv4地址。

当该心跳连接失败的第一入口节点的进程通信网卡故障后,该心跳连接失败的第一入口节点的ctdb进程会周期性的检测该心跳连接失败的第一入口节点的进程通信网卡的故障是否排除,同时检测该心跳连接失败的第一入口节点的服务网卡是否能够正常工作。该心跳连接失败的第一入口节点的进程通信网卡的故障排除,并且该心跳连接失败的第一入口节点的服务网卡能够正常工作,该心跳连接失败的第一入口节点会主动向作为主节点的入口节点发送异常结束通知;作为主节点的入口节点接收到异常结束通知后,为该心跳连接失败的第一入口节点的服务网卡重新分配虚ipv4地址。

在该实施例中,在入口节点为主节点时,目标入口节点会在与分布式存储系统中能够正常工作的第一入口节点上的进程通信网卡之间的心跳连接失败时,基于为目标入口节点的服务网卡分配的ipv6地址,检测目标入口节点的服务网卡与第一入口节点上的服务网卡之间的第一通信状态,并根据第一通信状态对应的虚ipv4地址分配方式,对心跳连接失败的第一入口节点上的服务网卡所具有的虚ipv4地址进行重新分配,进而使用ipv6地址代替了为服务网卡分配的实ipv4地址,完成虚ip地址的分配过程,分布式存储系统中各个入口节点上的服务网卡平均只会占据一个虚ipv4地址,从而能够减少服务网卡对ipv4地址的占用,能够留出同一网段下更多的ipv4地址给客户端使用,满足用户的使用需求。

另外需要注意的是,当执行该地址分配方法的目标入口节点为主节点时,其也可以执行如上述图1和图2对应的实施例所述的地址分配方法。具体地,在执行如上述图1和图2对应的实施例所述的地址分配方法时,目标入口节点的服务网卡上的ctdb进程监测到目标入口节点的服务网卡的工作状态异常后,会首先会向集群内的其它入口节点的ctdb进程发送master选举指令,并控制自身退出master选举过程。其它入口节点的ctdb进程在接收到主节点的ctdb进程发送的master选举指令后,重新进行master选举,当选举出新的主节点后,目标入口节点会基于为目标入口节点的进程通信网卡分配的实ipv4地址,向新选举出的主节点发送异常通知,以使新的主节点将目标入口节点的服务网卡所具有的ipv4地址分配给集群内的能够正常工作的第二指定入口节点。

基于同一发明构思,本申请实施例中还提供了与地址分配方法对应的地址分配装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述地址分配方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

参见图4所示,本申请实施例所提供的地址分配装置,该装置应用于分布式存储系统中部署有ctdb进程的入口节点,当所述入口节点为主节点时,该装置包括:

心跳检测模块41,用于基于为所述入口节点上的进程通信网卡配置的实ipv4地址,检测所述进程通信网卡与所述分布式存储系统中其它能够正常工作的第一入口节点上的进程通信网卡之间的心跳连接状态;

第一通信状态检测模块42,用于在与任一第一入口节点上的进程通信网卡之间的心跳连接失败时,基于为所述任一第一入口节点的服务网卡分配的ipv6地址,检测所述服务网卡与所述任一第一入口节点上的服务网卡之间的第一通信状态;

地址重新分配模块43,用于根据检测到的所述第一通信状态对应的虚ipv4地址分配方式,对所述任一第一入口节点上的服务网卡所具有的虚ipv4地址进行重新分配;

当所述入口节点并非主节点时,且当所述入口节点的服务网卡的工作状态异常时,该装置包括:

第二通信状态检测模块44,用于基于为所述入口节点上的服务网卡分配的ipv6地址,检测所述服务网卡与所述分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡之间的第二通信状态;

发送模块45,用于在检测到所述第二通信状态正常时,基于为所述入口节点上的进程通信网卡分配的实ipv4地址,向所述分布式存储系统内的主节点发送状态通知异常结束通知;所述异常结束通知用于指示所述主节点为所述入口节点重新分配虚ipv4地址。

本申请实施例为分布式存储系统中的入口节点上的服务网卡预先配置ipv6地址,以及虚ipv4地址,并为进程通信网卡配置实ipv4地址。在入口节点为主节点时,入口节点会在与分布式存储系统中其它能够正常工作的第一入口节点上的进程通信网卡之间的心跳连接失败时,基于为入口节点的服务网卡分配的ipv6地址,检测入口节点的服务网卡与第一入口节点上的服务网卡之间的第一通信状态,并根据第一通信状态对应的虚ipv4地址分配方式,对心跳连接失败的第一入口节点上的服务网卡所具有的虚ipv4地址进行重新分配;在入口节点并非主节点,且入口节点的服务网卡的工作状态异常时,入口节点基于为服务网卡所配置的ipv6地址检测服务网卡与分布式存储系统内其它能够正常工作的第二入口节点上的服务网卡的第二通信状态,并在检测到第二通信状态正常时,基于为入口节点的进程通信网卡分配的实ipv4地址,向分布式存储系统内的主节点发送异常结束通知,以使得主节点能够根据状态通知实现在各入口节点的服务网卡的虚ipv4地址的分配控制。该实施例中,使用ipv6地址代替了为服务网卡分配的实ipv4地址,完成虚ip地址的分配过程,分布式存储系统中各个入口节点上的服务网卡平均只会占据一个虚ipv4地址,从而能够减少服务网卡对ipv4地址的占用,能够留出同一网段下更多的ipv4地址给客户端使用,满足用户的使用需求。

可选地,所述地址重新分配模块43,具体用于:

当所述第一通信状态为正常通信时,基于为所述服务网卡分配的ipv6地址,向所述任一第一入口节点发送地址释放指令,以使所述任一第一入口节点释放所述任一第一入口节点上的服务网卡所具有的虚ipv4地址,并将所述任一第一入口节点上的服务网卡的虚ipv4地址分配给所述分布式存储系统中能够正常工的第二指定入口节点;

当所述第一通信状态为异常通信时,将所述任一第一入口节点上的服务网卡的虚ipv4地址分配给所述分布式存储系统中能够正常工作的第二指定入口节点。

可选地,当所述入口节点并非主节点时,所述发送模块45,还用于在所述入口节点的服务网卡的工作状态异常时,基于为所述入口节点上的所述进程通信网卡分配的实ipv4地址,向所述分布式存储系统内的主节点发送异常通知;所述异常通知用于指示所述主节点将分配给所述入口节点的虚ipv4地址转分配给所述分布式存储系统中的能够正常工作的第一指定入口节点。

可选地,所述第二通信状态检测模块44,具体用于:

从预先配置的地址分配表中,获取所述第二入口节点上的服务网卡的ipv6地址;所述地址分配表中包含分布式存储系统内所有入口节点上服务网卡的ipv6地址;

根据所述服务网卡的ipv6地址,以及获取的所述第二入口节点上的服务网卡的ipv6地址,向所述第二入口节点发送测试数据包;

若在预设时长内接收到任意一个所述第二入口节点对所述测试数据包的响应消息,则确定所述第二通信状态正常,否则确定所述第二通信状态不正常。

对应于图1和图3中的地址分配方法,本申请实施例还提供了一种计算机设备,如图5所示,该设备包括存储器1000、处理器2000及存储在该存储器1000上并可在该处理器2000上运行的计算机程序,其中,上述处理器2000执行上述计算机程序时实现上述地址分配方法的步骤。

具体地,上述存储器1000和处理器2000能够为通用的存储器和处理器,这里不做具体限定,当处理器2000运行存储器1000存储的计算机程序时,能够执行上述地址分配方法,从而解决入口节点占用同一网段下数量较多ipv4地址的问题,进而达到减少入口节点占用的同一网段的ipv4地址的数量,增加同一网段下客户端能够使用ipv4地址的数量,满足使用需求的效果。

对应于图1和图3中的地址分配方法,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述地址分配方法的步骤。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述地址分配方法,从而解决入口节点占用同一网段下数量较多ipv4地址的问题,进而达到减少入口节点占用的同一网段的ipv4地址的数量,增加同一网段下客户端能够使用ipv4地址的数量,满足使用需求的效果。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述地址分配方法,从而解决入口节点占用同一网段下数量较多ipv4地址的问题,进而达到减少入口节点占用的同一网段的ipv4地址的数量,增加同一网段下客户端能够使用ipv4地址的数量,满足使用需求的效果。

本申请实施例所提供的一种地址分配方法以及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1