一种Docker容器远程内存卷管理方法和系统与流程

文档序号:15684105发布日期:2018-10-16 20:52阅读:259来源:国知局

本发明涉及云计算领域,尤其涉及一种docker容器远程内存卷管理方法和系统。



背景技术:

继虚拟化技术出现后,容器技术逐渐成为云计算领域具有深远影响的变革技术。近些年来,容器技术及相关应用得到了国内外越来越多的关注、研发和推广,发展势头迅猛,成为云计算技术的重要组成部分。容器技术是一种轻量级的虚拟化方法,提供linux环境下的资源隔离和管理。容器与虚拟机类似,都是一个相对独立的运行环境,但是相比于虚拟机,容器拥有更高的资源使用效率。docker是容器技术的代表。docker容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上。

在docker容器云平台中,容器中的应用可能会进行大量的io操作,比如web系统缓存,如何保证高效的读写性能,是容器应用服务质量的关键一环。当docker容器中的应用频繁地执行读写文件操作时,普通sata硬盘读写速度只能达到100m/s,使得应用性能不尽人意。在计算机层次化存储体系结构中,内存位于磁盘的上层,能提供更高的读写速度,如果将磁盘文件io操作替换为内存读写,那么就能有效地提高读写应用性能。

随着制造工艺的发展,服务器内存成本逐渐降低,单台服务器上配置的内存越来越多,当集群负载不高时,部分服务器上会存在大量闲置内存。同时服务器上配置着千兆网卡,服务器间通过光纤组成网络,网络带宽大,通信时延低。如果能将远程闲置内存通过网络挂载到本地服务器上,给本地容器提供高效读写的内存资源,可以提高容器应用的读写性能。

但是,目前在docker系统中,缺乏一种支持管理和利用远程内存资源的方法和系统。



技术实现要素:

本发明提供了一种docker容器远程内存卷管理方法,通过内存文件系统和网络传输协议使用远程内存资源来提高docker容器中应用的io(输入/输出)性能。

docker系统的内存卷管理主要包括内存卷的创建、挂载、卸载和销毁四个操作,为了对远程存储服务器上的内存卷进行管理,本发明的docker容器远程内存卷管理方法分别对四个操作做了相应的调整,具体技术方案如下:

一种docker容器远程内存卷管理方法,包括远程内存卷的创建、挂载、卸载和销毁操作;

创建远程内存卷包括:当本地节点的远程内存卷管理进程接收到远程内存卷创建请求时,从存储服务器集群中获得存储节点的ip地址,并记录远程内存卷卷名与存储节点ip地址的映射关系;

挂载远程内存卷包括:当所述远程内存卷管理进程接收到远程内存卷挂载请求时,根据所述映射关系得到存储节点的ip地址并连接到该存储节点,该存储节点的代理进程将远程内存挂载到本地节点上,并提供相应的挂载路径;

卸载远程内存卷包括:当所述远程内存卷管理进程接收到远程内存卷卸载请求时,根据所述映射关系通知相应存储节点的代理进程将远程内存卸载;

销毁远程内存卷包括:当所述远程内存卷管理进程接收到远程内存卷销毁请求时,根据所述映射关系通知相应存储节点的代理进程释放远程内存卷资源。

docker容器中的数据可以存储在类似于虚拟机磁盘的介质中,呈现形式为一个目录,可以作为应用的存储目录,docker系统通过卷管理来支持容器的外部挂载。docker系统的卷管理机制支持二次开发,本发明的docker容器远程内存卷管理方法可通过在docker系统中增加插件的形式来实现。

在创建操作中,远程内存卷管理进程只是进行检查操作和记录相关信息,并不真正去存储服务器上创建内存卷。

当本地节点上的远程内存卷管理进程管理多个存储服务器时,需要确定预创建的远程内存卷具体该分布到哪一个服务器上,如果分布不均匀容易造成服务器热点。同时当有存储节点从存储服务器集群中移除或者有新节点加入到集群中,会涉及到远程内存卷的重新分布迁移,如果出现大量数据迁移容易造成服务不稳定。

作为优选,所述远程内存卷管理进程利用一致性hash算法在存储服务器集群中获得存储节点。

远程内存卷管理进程利用一致性hash算法可以实现远程内存卷的均匀分布,以存储服务器的ip地址为hash函数的键值,将其映射到hash环上。

在发出创建远程内存卷请求时,用户需要提供内存文件系统的类型和存储空间的大小。

作为优选,远程内存卷管理进程接收到远程内存卷创建请求时,先检查存储服务器集群中是否存在支持该内存文件系统类型的存储节点,若存在,则在支持该内存文件系统类型的存储服务器集群中查找合适的存储节点;若不存在,则报错。

在容器启动时,用户可以选择创建好的远程内存卷作为容器卷使用,并向远程内存卷管理进程发出远程内存卷挂载请求。

在远程内存卷挂载操作中,存储节点上的代理进程使用相应的内存文件系统和网络传输协议(比如ssh协议)将远程内存卷挂载到本地节点上。

在容器关闭时,docker系统的服务进程需要卸载容器卷。当远程内存卷管理进程接收到远程内存卷卸载请求时,与远程内存卷挂载类似,根据映射关系得到与该远程内存卷名对应的ip地址,然后连接到相应的存储节点上,该存储节点的代理进程根据相应的内存文件系统和网络传输协议将远程内存卸载。

存储在内存中的数据会由于服务器断电或者重启而丢失,但是容器中的应用可能需要数据持久存储。

作为优选,利用linux操作系统的符号链接和rsync命令定期同步远程内存卷到该存储节点的硬盘。

在存储节点上代理进程将挂载路径指定到相同目录下,并以远程内存卷名创建挂载目录。持久化远程内存卷的挂载、卸载操作中会涉及到3个目录,包括磁盘目录、内存文件系统挂载目录和远程内存卷挂载目录,其中磁盘目录为持久化存储目录,内存文件系统挂载目录为内存文件系统目录,远程内存卷挂载目录为内存文件系统目录的符号链接,用于远程挂载。

持久化的远程内存卷卸载操作流程包括:

(i)使用rsync命令同步内存文件系统挂载目录到磁盘目录;

(ii)删除远程内存卷挂载目录到内存文件系统挂载目录的符号链接;

(iii)重命名磁盘目录,更新磁盘目录名中的时间戳;

(iv)卸载内存文件系统挂载目录。

持久化的远程内存卷挂载操作流程包括:

(i)使用rsync命令同步磁盘目录到内存文件系统挂载目录;

(ii)建立远程内存卷挂载目录到内存文件系统挂载目录的符号链接。

本发明还提供了实现上述docker容器远程内存卷管理方法所依赖的docker容器远程内存卷管理系统,包括:

远程内存卷管理模块,位于本地节点上,执行远程内存卷管理进程,远程内存卷管理进程根据接收到的远程内存卷管理请求,调用存储节点上的代理进程来执行相应操作;

存储服务代理模块,位于存储节点上,执行代理进程,代理进程根据远程内存卷管理请求执行相应操作。

所述的远程内存卷管理请求包括远程内存卷的创建、挂载、卸载和销毁。

作为优选,所述的远程内存卷管理进程与docker服务进程通过socket方式进行通信。

docker服务进程为docker系统的核心部分,负责管理docker容器。本发明的docker容器远程内存卷管理系统通过修改docker服务的配置文件,使其与远程内存卷管理进程通过socket方式进行通信,接收客户端卷管理命令并转发到远程内存卷管理进程,同时接收远程内存卷管理进程的处理结果通知。

远程内存卷管理进程负责处理来自docker服务进程的各种远程内存卷管理请求,当接受到远程内存卷管理请求时,通过rpc调用远程存储服务器上的代理进程,代理进程通过调用内存文件系统和网络传输协议将内存资源以文件系统的形式供docker容器使用,并实施远程内存卷的挂载、卸载和销毁等操作。

作为优选,所述的远程内存卷管理模块具有筛选单元,所述筛选单元运行一致性hash算法从存储服务器集群中筛选合适的存储节点。

筛选单元利用一致性hash算法来实现远程内存卷的均匀分布。

作为优选,所述的存储服务代理模块具有持久化单元,所述的持久化单元将远程内存卷定期同步至存储节点的硬盘上。

与现有技术相比,本发明的有益效果为:

本发明的docker容器远程内存卷管理系统在原有docker系统架构中增加远程内存卷管理插件模块和存储服务代理插件模块,实现了本地节点对远程存储节点上内存资源的调用和管理,提高了本地节点上docker容器中应用的io性能,同时也提高了docker容器集群的内存资源利用效率。

附图说明

图1为本发明docker容器远程内存卷管理系统的架构示意图;

图2为docker容器创建过程中挂载远程内存卷的流程示意图;

图3为docker容器停止时卸载远程内存卷的流程示意图;

图4为docker容器重启时挂载远程内存卷的流程示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步详细描述,需要指出的是,以下所述实施例旨在便于对本发明的理解,而对其不起任何限定作用。

如图1所示,本发明的docker容器远程内存卷管理系统包括位于本地节点上远程内存卷管理模块和位于远程存储节点上的存储服务代理模块,分别用于执行远程内存卷管理进程和存储服务代理进程。

在docker服务器上运行着docker服务进程和远程内存卷管理进程,两者之间通过socket的方式进行通信。在远程存储服务器上运行着存储服务代理进程,它通过rpc方式为远程内存卷管理进程提供服务。

docker服务进程为docker系统的核心部分,负责管理docker容器。通过修改docker服务的配置文件,使其与远程内存卷管理进程通过socket方式进行通信,接收客户端卷管理命令并转发到管理进程,同时接收管理进程的处理结果通知。

远程内存卷管理进程负责处理来自docker服务进程的各种卷管理请求,并运行一致性hash算法来实现内存卷均匀分布。当接受到卷管理请求时,通过rpc调用远程存储服务器上的存储服务代理进程来实施内存卷的挂载、卸载和销毁等操作。

存储服务代理进程运行在每个存储服务器上,通过调用内存文件系统和网络传输协议将内存资源以文件系统的形式供docker容器使用。同时负责内存卷的持久化工作,定期将内存卷持久化到硬盘上。

依赖于上述docker容器远程内存卷管理系统,对docker容器远程内存卷管理的方法如下:

a、远程内存卷管理:

远程内存卷管理主要包括内存卷的创建、挂载、卸载和销毁4个操作。

在用户创建卷时,必须提供相关参数,主要为内存文件系统的选择和存储空间的大小。

当远程内存卷管理进程接收到docker服务进程的远程内存卷创建请求时,管理进程先检查是否支持该内存文件系统,然后在支持该内存文件系统的服务器集群中利用一致性hash算法得到存储节点的ip地址,并记录远程内存卷名到ip地址的映射关系。

在创建流程中,管理进程只是进行检查操作和记录相关信息,并不真正去远程服务器上创建内存卷。

在容器启动时,用户可以选择远程内存卷管理进程管理的内存卷作为容器卷使用。当管理进程接收到远程内存卷挂载请求时,根据映射关系得到内存卷名对应的ip地址,然后连接到远程存储服务器上,代理进程使用相应的内存文件系统和网络传输协议(比如ssh协议)将远程内存挂载到本地服务器上,并为docker服务进程提供相应的挂载路径,最终docker服务进程再将路径映射到容器中供容器使用。

在容器关闭时,docker服务进程需要卸载容器卷。当管理进程接收到远程内存卷卸载请求时,与远程内存卷挂载类似,根据映射关系得到内存卷名对应的ip地址,然后连接到远程服务器上,代理进程根据相应的内存文件系统和网络传输协议将远程内存卷卸载。

在用户销毁卷时,管理进程根据映射关系,通知远程服务器上的代理进程去释放内存卷资源。

b、内存卷持久化

存储在内存中的数据会由于服务器断电或者重启而丢失,但是容器中的应用可能需要数据持久存储。利用linux操作系统的符号链接和rsync系统调用定期同步内存卷到硬盘,可以实现内存卷的持久化。

在远程服务器上代理进程将挂载路径指定到相同目录下,并以卷名创建挂载目录。持久化卷的挂载卸载操作中会涉及到3个目录,包括磁盘目录、内存文件系统挂载目录和远程内存卷挂载目录,其中磁盘目录为持久化存储目录,远程内存卷挂载目录为内存文件系统挂载目录的符号链接用于远程挂载。

对于持久化卷的卸载操作流程如下:

1)使用rsync命令同步内存文件系统挂载目录到磁盘目录;

2)删除远程内存卷挂载目录到内存文件系统挂载目录的符号链接;

3)重命名磁盘目录,更新目录名中的时间戳;

4)卸载内存文件系统挂载目录。

对于持久化卷的挂载操作流程如下:

1)使用rsync命令同步磁盘目录到内存文件系统挂载目录;

2)建立远程内存卷挂载目录到内存文件系统挂载目录的符号链接。

c、远程内存卷均匀分布

当远程内存卷管理进程管理多个存储服务器时,内存卷需要确定具体分布到哪一个服务器上,如果分布不均匀容易造成服务器热点。同时当有节点从集群中移除或者有新节点加入到集群中,会涉及到内存卷的重新分布迁移,如果出现大量数据迁移容易造成服务不稳定。

利用一致性hash算法可以实现内存卷的均匀分布,以存储服务器的ip地址为hash函数的键值,将其映射到hash环上。

在docker容器整个生命周期内,主要包括创建容器、停止容器和重启容器,远程内存卷管理的流程如下:

如图2所示,在创建容器到容器运行这一过程中,先判断容器是否需要挂载内存卷,如果需要,再判断是否存在该内存卷,不存在则创建内存卷。然后以内存文件系统的形式通过网络传输协议挂载内存卷,最后容器开始运行。

如图3所示,在停止容器到容器停止这一过程中,先判断容器是否已经挂载内存卷,如果有挂载,再判断是否需要持久化存储内存卷。然后以内存文件系统的形式通过网络传输协议卸载内存卷,最后容器停止运行。

如图4所示,在重启容器到容器运行这一过程中,先判断容器是否需要挂载内存卷,如果需要,从硬盘恢复内存卷,然后以内存文件系统的形式通过网络传输协议挂载内存卷,最后容器开始运行。

以上所述的实施例对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的具体实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

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