掌桥专利:专业的专利平台
掌桥专利
首页

容器镜像中心和容器镜像中心运行方法

文献发布时间:2023-06-19 11:29:13


容器镜像中心和容器镜像中心运行方法

技术领域

本申请涉及计算机技术领域,具体而言,涉及一种容器镜像中心和容器镜像中心运行方法。

背景技术

容器镜像中心存储了容器镜像数据,harbor模块接收客户端发送的对容器镜像的读/写请求;当harbor模块故障时,客户端不能够对存储的容器镜像进行正常的读/写操作,容器镜像中心可用性比较低。

发明内容

本申请的主要目的在于提供一种容器镜像中心和容器镜像中心运行方法,以解决现有技术中由于harbor模块故障而造成的客户端不能够对容器镜像进行正常读/写的问题。

为了实现上述目的,根据本申请的一个方面,提供了一种容器镜像中心,包括:存储模块及多台主机,每台主机设置有一个harbor模块和对应的保活模块,所述存储模块存储有容器镜像数据;

保活模块包括:主保活模块和多个从保活模块;

所述主保活模块,用于检测对应的主harbor模块的工作状态;当检测到对应的主harbor模块的工作状态为非正常工作状态时,停止向各个从保活模块发送VRRP通告报文,以使各个从保活模块进行选举确定出新的主保活模块以及对应的新的主harbor模块;

所述harbor模块包括:主harbor模块和多个从harbor模块;

所述主harbor模块,用于根据客户端的读/写请求向相应的存储模块读/写容器镜像数据;将读取的容器镜像数据发送给客户端。

在一种实施方式中,所述存储模块包括:主控制子模块和多个存储子模块;

所述主控制子模块,用于保存每个存储子模块和存储的容器镜像数据的存储关系;以及每个存储子模块写入或者删除容器镜像数据后,更新存储关系;以及用于接收所述主harbor模块发送的读/写请求;

当读/写请求为读请求时,根据所述读请求携带的目标容器镜像数据的标识和预先设定的存储关系确定所述目标容器镜像数据存储的目标存储子模块;从所述目标存储子模块获取所述容器镜像数据;将所述容器镜像数据发送给所述主harbor模块;

当读/写请求为写请求时,根据预先设定的分配规则确定目标存储子模块;将写请求的容器镜像数据发送给所述目标存储子模块进行存储并更新存储关系。

在一种实施方式中,根据预先设定的分配规则确定目标存储子模块,包括:统计每个存储子模块的剩余存储空间的大小;

将多个存储子模块按照剩余存储空间从大到小的顺序进行排序;

选择排序前M位的存储子模块作为目标存储子模块。

在一种实施方式中,所述主控制子模块还用于,当读/写请求为写请求时,对写请求的容器镜像数据进行复制得到多个复制的容器镜像数据,根据预先设定的分发规则将所述多个复制的容器镜像数据分发到不同的存储子模块进行存储。

在一种实施方式中,主控制子模块根据预先设定的分配规则确定目标存储子模块,具体包括:

根据所述容器镜像数据的标识统计所述容器镜像数据在多个存储子模块中的副本数量以及分布;

根据所述副本数量确定对所述容器镜像数据再次进行复制得到多个容器镜像数据副本;

根据所述副本的分布确定所述多个容器镜像数据副本的目标存储子模块。

在一种实施方式中,所述存储模块还包括多个从控制子模块,当所述主控制子模块处于非正常工作状态时,所述多个从控制子模块选举出新的主控制子模块。

在一种实施方式中,所述主harbor模块异常包括:健康状态异常或者故障;所述主保活模块还用于,向对应的主harbor模块发送健康状态查询请求消息;

接收所述主harbor模块发送的携带健康状态的响应消息;

根据所述响应消息确定所述主harbor模块的健康状态异常。

在一种实施方式中,所述主保活模块还用于,在向所述主harbor模块发送健康状态查询请求消息之后,从零开始进行计时;

判断在预定的时间阈值之内是否接收到所述主harbor模块发送的响应消息;

如果否,则确定所述主harbor模块故障。

在一种实施方式中,所述主保活模块还用于,将主harbor模块的虚拟地址和所在主机的物理网卡进行绑定,向多个客户端以广播的方式发送所述主harbor模块的虚拟地址,以使每个客户端根据所述物理网卡地址向所述主harbor模块发送读/写请求。

第二方面,本申请还提出了一种容器镜像中心运行方法,应用于上述任一项的容器镜像中心;

所述方法包括:主harbor模块接收客户端发送的读/写请求;

所述主harbor模块根据所述读/写请求向相应的存储模块读/写容器镜像数据;

如果是读请求,则将容器镜像数据发送给所述客户端。

在一些实施例中,所述主保活模块检测对应的所述主harbor模块的工作状态;

当所述主保活模块检测到对应的所述主harbor模块的工作状态为非正常工作状态时,停止向各个从保活模块发送VRRP通告报文,以使各个从保活模块进行选举确定出新的主保活模块以及对应的新的主harbor模块。

在一些实施例中,所述新的主保活模块还用于,将主harbor模块的虚拟地址和所在主机的物理网卡进行绑定,向多个客户端以广播的方式发送所述新的主harbor模块的虚拟地址,以使每个客户端根据所述物理网卡地址向所述新的主harbor模块发送读/写请求。

在一些实施例中,所述新的主harbor模块接收客户端对于存储模块的读/写请求;

根据读/写请求向存储模块读/写容器镜像数据;

将读取的容器镜像数据发送给客户端。

在一些实施例中,所述存储模块包括:主控制子模块和多个存储子模块;

所述主控制子模块接收所述新的主harbor模块发送的读/写请求;

当读/写请求为读请求时,根据所述读请求携带的目标容器镜像数据的标识和预先设定的存储关系确定所述目标容器镜像数据存储的目标存储子模块;从所述目标存储子模块获取所述容器镜像数据;将所述容器镜像数据发送给所述新的主harbor模块;

当读/写请求为写请求时,根据预先设定的分配规则确定目标存储子模块;将写请求的容器镜像数据发送给所述目标存储子模块进行存储,并更新存储关系。

在一些实施例中,根据预先设定的分配规则确定目标存储子模块,具体包括:

统计每个存储子模块的剩余存储空间的大小;

将多个存储子模块按照剩余存储空间从大到小的顺序进行排序;

选择排序前M位的存储子模块作为目标存储子模块。

在一些实施例中,当读/写请求为写请求时,所述主控制子模块对写请求的容器镜像数据进行复制得到多个复制的容器镜像数据,根据预先设定的分发规则将所述多个复制的容器镜像数据分发到不同的存储子模块进行存储。

在一些实施例中,主控制子模块根据预先设定的分配规则确定目标存储子模块,具体包括:

根据所述容器镜像数据的标识统计所述容器镜像数据在多个存储子模块中的副本数量以及分布;

根据所述副本数量确定对所述容器镜像数据再次进行复制得到多个容器镜像数据副本;

根据所述副本的分布确定所述多个容器镜像数据副本的目标存储子模块。

在一些实施例中,所述存储模块还包括多个从控制子模块,当所述主控制子模块处于非正常工作状态时,所述多个从控制子模块选举出新的主控制子模块。

在一些实施例中,所述主harbor模块非正常工作状态包括:健康状态异常;所述主保活模块向对应的主harbor模块发送健康状态查询请求消息;

接收所述主harbor模块发送的携带健康状态的响应消息;

根据所述响应消息确定所述主harbor模块的健康状态异常。

在一些实施例中,所述主harbor模块非正常工作状态包括:故障;所述主保活模块在向所述主harbor模块发送健康状态查询请求消息之后,从零开始进行计时;

判断在预定的时间阈值之内是否接收到所述主harbor模块发送的响应消息;

如果否,则确定所述主harbor模块故障。

本发明的容器镜像中心,主harbor模块工作,多个从harbor模块备份;主控制子模块工作,从控制子模块备份。当主harbor模块或者主控制子模块异常,从harbor模块或者从控制子模块可以取代继续工作。保证同一时间点有一个harbor模块和对应的保活模块处于工作状态,提高了系统的可用性。多个存储子模块可以对数据进行冗余备份分布式存储,提高了数据可靠性。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和优点变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的一种容器镜像中心的示意图;

图2是根据本申请实施例的另一种容器镜像中心的示意图;

图3是根据本申请实施例的一种容器镜像中心运行方法的流程图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

首先介绍一下本申请的专业术语

VRRP:为虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议。

docker-compose:一个命令行工具,用来定义和运行由多个容器组成的应用;

Harbor:用于存储和分发Docker镜像的企业级Registry服务器,可以用来构建企业内部的Docker镜像仓库。

Docker:属于Linux容器的一种封装,提供简单易用的容器使用接口。是目前最流行的Linux容器解决方案。Docker将应用程序与该程序的依赖,打包在一个文件里。运行该文件会生成一个虚拟容器。

容器:是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。

容器镜像:是一个模板,是容器应用打包的标准格式,在部署容器化应用时可以指定镜像,镜像可以来自于镜像中心或者用户的私有Registry。例如一个容器镜像可以包含一个完整的Ubuntu操作系统环境,里面仅安装了用户需要的应用程序及其依赖文件。

VRRP:VRRP即虚拟路由冗余协议(Virtual Router Redundancy Protocol),它是为了避免路由器出现单点故障的一种容错协议。

VIP:虚拟(Virtual)IP。

随着互联网技术的发展,传统的应用正在变得越来越复杂:需要支持更多的用户,需要更强的计算能力,需要更加稳定安全等等。为了支撑这些不断增长的需求,云计算技术应运而生。云计算保证了将应用部署到云端后,可以不必再关注那些令人头疼的硬件和软件问题,由专业团队去解决。容器化技术是云计算的关键技术之一,保证了应用的随时随地可用,以及资源的快速按需扩展。容器化技术通过软件层虚拟化将应用运行环境统一打包成镜像,通过对镜像的分发保证了环境的一致性。对于企业级的容器镜像的存储和拉取,当前主要是通过Harbor来实现。Harbor做为一种企业级镜像存储和管理的实现方案,其自身也可以通过容器化部署。目前,主要通过docker-compose管理Harbor集群各组件。

现有通过docker-compose部署Harbor集群方法及缺点列举如下:

1.利用Harbor自带的镜像Replication功能,在两台不同机器上各部署一个Harbor服务,两个Harbor之间通过Replication同步镜像。由于Harbor的Replication仅同步镜像数据,数据库中的各种元数据无法同步,导致两个Harbor服务处于不一致状态,无法做到真正的高可用和自由切换。

2.通过rsync同步Harbor整个data目录,如此两个Harbor的镜像数据和数据库数据都被同步,但是这种方式需要重启目标Harbor服务才能生效,且可能存在rsync数据失败问题。

上述部署方式存在以下两方面的问题:一是可靠性无法保证,通过docker-compose部署镜像数据存储在本地,一般做法是对底层物理磁盘做Raid实现冗余,但是一旦Raid卡故障,数据仍然存在丢失可能。二是可用性难以保证,docker-compose部署后Harbor是个单点,一旦服务异常,没有备用节点,导致无法对外提供服务。

参见附图1所示的本申请提出的一种容器镜像中心的示意图;客户端向容器镜像中心的仓库harbor模块发送容器镜像的读/写请求,harbor模块接收到容器镜像的读/写请求后,转发给分布式存储装置中的控制模块;控制模块用来对数据模块中存储的容器镜像进行读/写操作。但是如果harbor模块处于非正常工作状态,则外部的客户端不能够正常进行容器镜像的读/写操作。

现有技术不能很好的解决docker-compose部署Harbor存在的单点可用性和数据可靠性问题。

基于此,本申请提出了一种容器镜像中心,参见附图2所示的一种容器镜像中心的示意图;一种容器镜像中心,包括:存储模块及多台主机,每台主机设置有一个harbor模块和对应的保活模块;所述存储模块存储有容器镜像数据;

保活模块包括:主保活模块和多个从保活模块;

所述主保活模块,用于检测对应的主harbor模块的工作状态;当检测到对应的主harbor模块的工作状态为非正常工作状态时,停止向各个从保活模块发送VRRP通告报文,以使各个从保活模块进行选举确定出新的主保活模块以及对应的新的主harbor模块;

所述harbor模块包括:主harbor模块和多个从harbor模块;

所述主harbor模块,用于根据客户端的读/写请求向相应的存储模块读/写容器镜像数据。

其中,保活模块需要配置一个虚拟地址VIP,该虚拟地址为与Harbor集群域名绑定。

具体的,所述harbor模块和所述保活模块一一对应设置在多个不同的主机中。对于任意的一个主机,设置了一个harbor模块和对应的一个保活模块。如图2所示,主harbor模块和主保活模块设置在同一个主机Host中。每一对从harbor模块和对应的从保活模块设置在同一个主机Host中。保活模块和对应的harbor模块设置在同一个主机中,便于对harbor模块进行监控。

本发明提出的一种容器镜像中心,设置了多个备份的从harbor模块,当主harbor模块不能够正常工作时,多个从harbor模块可以选举出新的主harbor模块,提高了系统的可用性。

在一些实施例中,参见附图2,所述存储模块包括:主控制子模块和多个存储子模块;

所述主控制子模块,用于保存每个存储子模块和存储的容器镜像数据的存储关系;以及每个存储子模块写入或者删除容器镜像数据后,更新存储关系;

以及用于接收所述主harbor模块发送的读/写请求;

当读/写请求为读请求时,根据所述读请求携带的目标容器镜像数据的标识和预先设定的存储关系确定所述目标容器镜像数据存储的目标存储子模块;从所述目标存储子模块获取所述容器镜像数据;将所述容器镜像数据发送给所述主harbor模块;

当读/写请求为写请求时,根据预先设定的分配规则确定目标存储子模块;将写请求的容器镜像数据发送给所述目标存储子模块进行存储并更新存储关系。

在一些实施例中,所述主控制子模块还用于,纪录每个存储子模块的存储信息;以及当客户端每次进行读写后,更新每个存储子模块的存储信息。

示例性的,如表1所示:

表1

主控制子模块中纪录了每个存储子模块存储的容器镜像数据。如上表所示。

如果客户端写入了容器镜像数据E,主控制子模块将容器镜像数据E分配给了存储子模块1存储;则更新上述的表格,得到表2;

表2

在一些实施例中,所述主控制子模块还用于,根据预先设定的分配规则确定目标存储子模块,具体包括:统计每个存储子模块的剩余存储空间的大小;

将多个存储子模块按照剩余存储空间从大到小的顺序进行排序;

选择排序前M位的存储子模块存储作为目标存储子模块。

示例性的,存储子模块1的剩余存储空间为900M;存储子模块2的剩余存储空间为800M;存储子模块3的剩余存储空间为700M;存储子模块4的剩余存储空间为600M。选择排序前两名的存储子模块1和2。

如果客户端写入的容器镜像数据为:容器镜像数据A、容器镜像数据B、容器镜像数据C、容器镜像数据D。优先把容器镜像数据A、B、C、D写入存储子模块1和2中。

在一些实施例中,所述主控制子模块还用于,当读/写请求为写请求时,对写请求的容器镜像数据进行复制得到多个复制的容器镜像数据,根据预先设定的分发规则将所述多个复制的容器镜像数据分发到不同的存储子模块进行存储。

其中,分发规则可以灵活设定,在一种实施例中,主控制子模块根据预先设定的分配规则确定目标存储子模块,具体包括:

根据所述容器镜像数据的标识统计所述容器镜像数据在多个存储子模块中的副本数量以及分布;

根据所述副本数量确定对所述容器镜像数据再次进行复制得到多个容器镜像数据副本;

根据所述副本的分布确定所述多个容器镜像数据副本的目标存储子模块。

示例性的,主控制子模块对写请求的容器镜像数据A进行复制副本之前,统计标识为A的容器镜像数据在多个存储子模块中的分布情况。参见表3:

表3

如表3所示,存储子模块1中的容器镜像数据A的副本数量为1;存储子模块2中的容器镜像数据A的副本数量为1;存储子模块3中的容器镜像数据A的副本数量为0;存储子模块4中的容器镜像数据A的副本数量为2。

控制子模块可以对容器镜像数据A进行复制得到多个副本,容器镜像数据A副本的数量可以是4个;其中,1个容器镜像数据A副本分配给存储子模块3,1个容器镜像数据A副本分配给存储子模块2,1个容器镜像数据A副本分配给存储子模块1。最终,每个存储子模块都存储有2个容器镜像数据A副本。上述实施例中,副本分配的原则为每个存储子模块均存储有相同的副本数量的原则。

在一些实施例中,还可以根据每个存储子模块的剩余存储空间比例来分配。参见表4:

表4

如表4所示,存储子模块4的剩余存储空间比例为90%,则优先分配副本。存储子模块1的剩余存储空间比例为20%,则最后再分配。可以对容器镜像数据A复制5份,其中,存储子模块4中可以分配2个容器镜像数据A副本;存储子模块3中可以分配1个容器镜像数据A副本;存储子模块2中可以分配1个容器镜像数据A副本;存储子模块1中可以分配1个容器镜像数据A副本。

对于客户端读取数据的过程,示例性的,参见表5,表5中,存储子模块包括:存储子模块1、存储子模块2、存储子模块3、存储子模块4和存储子模块5。值得强调的是,不同的存储子模块可以存储同一个容器镜像数据的副本。比如,容器镜像数据8在存储子模块5中存储,也在存储子模块4中存储。

对于客户端读取数据的过程,示例性的,客户端1发送容器镜像数据5的读请求;主控制子模块接收到主控制主机的harbor模块转发的容器镜像数据5的读请求后,根据预先存储的对应关系表确定存储有容器镜像数据5的存储子模块为存储子模块3;主控制子模块向存储子模块3发送容器镜像数据5的读请求;存储子模块3将容器镜像数据5发送给主控制子模块;主控制子模块将容器镜像数据5发送给harbor模块;harbor模块将容器镜像数据5发送给客户端1。

表5

在一些实施例中,主控制子模块可以随机从存储子模块4获取容器镜像数据8,也可以从存储子模块5获取容器镜像数据8。

在一些实施例中,主控制子模块还可以获取每个存储子模块的存储状态,存储状态包括存储比例;根据每个存储子模块的存储状态和容器镜像数据的冗余状态确定进行数据读/写的目标存储子模块;以及确定对存储子模块存储的冗余的容器镜像数据进行调整。

示例性的,主控制子模块获取到存储子模块4的存储比例为0.6;存储子模块5的存储比例为0.9;主控制子模块可以控制存储子模块5删除容器镜像数据8,降低数据的存储比例,从存储子模块4读取容器镜像数据8。

优选地,主控制子模块还可以获取每个存储子模块的读取状态;根据每个存储子模块的读取状态确定目标存储子模块。

示例性的,如果主控制子模块想要获得容器镜像数据8;当前存储子模块4正在进行数据输入输出IO,IO负担比较大;而存储子模块5当前没有进行数据IO,IO负担比较小;则确定从存储子模块5读取容器镜像数据8。

优选地,主控制子模块还可以获取每个存储子模块的目标读取数据数量;根据每个存储子模块的目标读取数据量确定目标存储子模块。

示例性的,主控制子模块需要读取容器镜像数据6和8;容器镜像数据8和容器镜像数据6都存储在了存储子模块4中;如果都从存储子模块4读取数据,会影响数据的读取速度;所以,主控制子模块可以控制从存储子模块5读取容器镜像数据8;从存储子模块4读取容器镜像数据6;如此可以提高整体的数据读取的效率。

在一些实施例中,主控制子模块还可以主动对每个存储子模块的存储内容进行调度调整,以达到最佳的资源利用率。

示例性的,结合表3,如果容器镜像数据A在预定的时间阈值内一直没有被读取,则删除该容器镜像数据A的几个副本,只保留一个副本,以节省存储的空间。上述的时间阈值可以是一个月,一年,一个季度等,具体可以灵活设定。

对应的,如果容器镜像数据A在预定的时间阈值内被读取的次数超过了预定的读取次数阈值,则对容器镜像数据A多制作副本。

比如,在一个月内被读取的次数超过了30次,说明容器镜像数据A非常重要,可以多制作几个副本,分别在每一个存储子模块中放置一个副本。为了节约存储空间,在一些实施例中,可以把剩余存储空间最大的存储子模块中的容器镜像数据A副本保留,把其他的存储子模块中的容器镜像数据A副本删除。

为了提高存储模块的可用性,避免因为主控制子模块工作异常而导致的不能够正常进行数据的读写。在一些实施例中,所述存储模块还包括多个从控制子模块,当所述主控制子模块处于非正常工作状态时,所述多个从控制子模块选举出新的主控制子模块。

具体实施时,多个从控制子模块可以通过预定的规则来选举出新的主控制子模块。

示例性的,可以根据统计每个控制子模块的性能属性参数。其中,性能属性参数包括以下的一种或几种:负载、CPU使用率、内存占用率。

选举出性能属性参数最小的控制子模块来作为新的主控制子模块。

具体的,非正常工作状态包括故障或者非健康状态。

对于非健康状态,在一些实施例中,所述主保活模块还用于,向对应的主harbor模块发送健康状态查询请求消息。接收所述主harbor模块发送的携带健康状态的响应消息;根据所述响应消息确定所述主harbor模块的健康状态异常。

对于故障的状态,在一些实施例中,主保活模块还用于,在向主harbor模块发送健康状态查询请求消息之后,从零开始进行计时;

判断在预定的时间阈值之内是否接收到该主harbor模块发送的响应消息;

如果否,则确定该主harbor模块故障。

在一些实施例中,主保活模块还用于,向多个客户端以广播的方式发送所述主harbor模块的地址,以使每个客户端根据所述地址向所述主harbor模块发送读/写请求。

示例性的,上一个harbor模块故障后,多个从harbor模块选举确定出了新的harbor模块,与harbor模块在同一个主机中的保活模块为新的主保活模块。

新的主保活模块获取所在主机的虚拟地址,将该主机中harbor模块的物理地址和该主机的虚拟地址进行绑定;

向多个客户端以广播的方式发送该主机的虚拟地址,以使每个客户端访问所述harbor模块。

多个客户端接收到广播后,就可以根据主机虚拟地址访问主机的harbor模块,完成了主harbor模块切换的通知功能。

本发明提出了一种基于保活装置和分布式存储装置的高可用镜像中心集群,由于保活模块与对应的harbor模块部署在同一主机,不需要维护IP列表,只需在harbor模块故障时更新主机虚拟地址VIP所绑定的harbor模块的物理网卡,从而降低了集群的实现成本。

在本发明中,分布式存储通过多副本和分布式协议实现,多副本保证了数据一致性,采用分布式协议能够较高的保证数据存储系统的可用性。将Harbor采用多节点方式部署,针对多节点的选主问题,通过节点保活来保证任何时间点都有一个节点对外部可用。本发明的容器镜像中心提高了可用性和可靠性。

第二方面,本申请还提出了一种容器镜像中心的运行方法,应用于上述任意一项的容器镜像中心;参见附图3所示的一种容器镜像中心的运行方法的流程图;该方法包括:

步骤S302,主harbor模块接收客户端发送的读/写请求;

步骤S304,所述主harbor模块根据所述读/写请求向相应的存储模块读/写容器镜像数据;

步骤S306,如果是读请求,则将读取到的容器镜像数据发送给所述客户端。

在一些实施例中,所述主保活模块检测对应的所述主harbor模块的工作状态;

当该主保活模块确定对应的主harbor模块为非正常工作状态时,停止向各个从保活模块发送VRRP通告报文,以使各个从保活模块进行选举确定出新的主保活模块以及对应的新的主harbor模块。

值得强调的是,新的主保活模块和新的主harbor模块位于同一主机。

在一些实施例中,所述方法还包括:所述新的主保活模块将新的主harbor模块的虚拟地址和所在主机的物理网卡进行绑定,向多个客户端以广播的方式发送所述新的主harbor模块的虚拟地址,以使每个客户端根据所述物理网卡地址向所述新的主harbor模块发送读/写请求。

在一些实施例中,所述新的主harbor模块接收客户端对于存储模块的读/写请求;

根据读/写请求向存储模块读/写容器镜像数据;

将读取的容器镜像数据发送给客户端。

在一些实施例中,所述存储模块包括:主控制子模块和多个存储子模块;

所述主控制子模块接收所述新的主harbor模块发送的读/写请求;

当读/写请求为读请求时,上述主控制子模块根据所述读请求携带的目标容器镜像数据的标识和预先设定的存储关系确定所述目标容器镜像数据存储的目标存储子模块;

该主控制子模块从所述目标存储子模块获取所述容器镜像数据;将所述容器镜像数据发送给所述新的主harbor模块;

当读/写请求为写请求时,该主控制子模块根据预先设定的分配规则确定目标存储子模块;

该主控制子模块将写请求的容器镜像数据发送给所述目标存储子模块进行存储,并更新存储关系。

在一些实施例中,所述主控制子模块纪录每个存储子模块的存储信息;

当客户端每次进行读写后,更新每个存储子模块的存储信息。

在一些实施例中,所述主控制子模块根据预先设定的分配规则确定目标存储子模块,具体包括以下步骤:

统计每个存储子模块的剩余存储空间的大小;

将多个存储子模块按照剩余存储空间从大到小的顺序进行排序;

选择排序前M位的存储子模块作为目标存储子模块。

在一些实施例中,当读/写请求为写请求时,所述主控制子模块对写请求的容器镜像数据进行复制得到多个复制的容器镜像数据,根据预先设定的分发规则将所述多个复制的容器镜像数据分发到不同的存储子模块进行存储。

在一些实施例中,所述主控制子模块根据预先设定的分配规则确定目标存储子模块,具体包括以下步骤:

根据所述容器镜像数据的标识统计所述容器镜像数据在多个存储子模块中的副本数量以及分布;

根据所述副本数量确定对所述容器镜像数据再次进行复制得到多个容器镜像数据副本;

根据所述副本的分布确定所述多个容器镜像数据副本的目标存储子模块。

在一些实施例中,所述存储模块还包括多个从控制子模块,当所述主控制子模块处于非正常工作状态时,所述多个从控制子模块选举出新的主控制子模块。

在一些实施例中,所述主harbor模块非正常工作状态包括:健康状态异常;所述主保活模块向对应的主harbor模块发送健康状态查询请求消息;

接收所述主harbor模块发送的携带健康状态的响应消息;

根据所述响应消息确定所述主harbor模块的健康状态异常。

在一些实施例中,所述主harbor模块非正常工作状态包括:故障;所述主保活模块在向所述主harbor模块发送健康状态查询请求消息之后,从零开始进行计时;

判断在预定的时间阈值之内是否接收到所述主harbor模块发送的响应消息;

如果否,则确定所述主harbor模块故障。

本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件与软件组合来实现。当应用软件时,可以将相应功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

相关技术
  • 容器镜像中心和容器镜像中心运行方法
  • 容器镜像分发系统及容器镜像推送、拉取和删除方法
技术分类

06120112942087