本发明涉及集群管理,尤其涉及一种基于容器的集群管理方法及系统。
背景技术:
当今计算机技术已经进入了以网络为中心的时代,随着互联网得高速发展,用户数量以及应用越来越复杂,容器技术应运而生,容器技术能够实现一些传统虚拟机无法做到的事情。容器化能够带来一致的运行环境,轻松的迁移应用,以及高效的利用系统资源。
为了满足企业当今需要弹性化部署的需求,在用户数量激增以及网络流量加大时能够根据任务派发系统来进行对系统集群的扩容,使得应用能够高效,快速的响应复杂情况,同时也能够在流量减少和用户减少时,通过发送删除节点的任务,从而达到删除集群中的某个应用的效果,使集群达到高可用,高可靠的效果。但是可能由于硬件不兼容导致任务派发系统无法对集群进行管理。
技术实现要素:
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种基于容器的集群管理方法及系统,节省了系统资源并提高兼容性。
为解决上述技术问题,本发明提出的技术方案为:
一种基于容器的集群管理方法,包括以下步骤:
s1)在三个预设的物理节点上部署mongo集群,所述mongo集群采用一主两备的模式运行,在mongo集群各节点运行容器管理服务,所述容器管理服务由golang作为后端语言;
s2)向mongo集群的数据库上传任务软件包,解压任务软件包得到容器描述文件以及容器镜像并保存,若升级集群节点,跳转步骤s3;若删除集群节点,跳转步骤s4;若增加集群节点,跳转步骤s5;
s3)对mongo集群各节点发送对应的容器描述文件,mongo集群各节点的容器管理服务根据容器描述文件下载对应容器镜像,各节点停止原有容器并启动所下载的容器,结束并退出;
s4)将除mongo集群主节点以外的待删除节点从mongo集群中移除,派发删除容器的描述文件任务给待删除节点,待删除节点的容器管理服务根据删除容器的描述文件任务将容器删除,结束并退出;
s5)针对处于活跃状态的待增加节点派发对应的容器描述文件,待增加节点的容器管理服务根据容器描述文件启动容器,容器启动成功后将待增加节点添加到mongo集群中。
进一步的,步骤s2)中向mongo集群的数据库上传任务软件包,解压任务软件包得到容器描述文件以及容器镜像并保存具体包括:首先读取任务软件包的版本信息,校验文件格式是否正确,若正确则读取任务软件包的文件流,采用流式的解压方式对任务软件包进行解压,将任务软件包中的容器描述文件以及容器镜像等所有的文件上传到mongo集群的数据库的gridfs中,通过各个文件的md5值来进行索引文件。
进一步的,步骤s3)具体包括以下步骤:
s31)获取mongo集群中的所有节点的状态,若各个节点都为健康状态则进入下一步,否则结束并退出;
s32)判断任务软件包的版本是否符合需求,若任务软件包的版本大于各节点容器的版本则进入下一步,否则结束并退出;
s33)对mongo集群各节点发送对应的容器描述文件,然后通过多线程的方式给各个节点发送升级请求,等待各个节点的升级执行结果;
s34)各节点收取升级请求,各节点的容器管理服务根据容器描述文件下载对应容器镜像,下载完成后各节点停止原有容器并启动所下载的容器,返回升级完成的执行结果,若下载失败,返回升级未完成的执行结果;
s35)获取各个节点的升级结果,若均为升级完成的执行结果,返回一个http响应作为集群节点升级结果通知升级成功。
进一步的,步骤s4)具体包括以下步骤:
s41)检查mongo集群各个节点数目以及状态是否能够进行删除节点操作,若各个节点状态均为健康且节点数目大于第一阈值则进入下一步,否则结束并退出;
s42)检查待删除节点是否为mongo集群主节点,是则将待删除节点进行降备操作后修改配置项将待删除节点从mongo集群中移除,否则直接修改配置项将待删除节点从mongo集群中移除;
s43)派发删除容器的描述文件任务给待删除节点,等待任务执行结果;
s44)待删除节点的容器管理服务根据删除容器的描述文件任务将容器删除,返回任务执行结果。
进一步的,步骤s5)具体包括以下步骤:
s51)判断mongo集群各个节点数目以及状态是否符合增加节点状态,若各个节点状态均为健康且节点数目小于第二阈值则进入下一步,否则结束并退出;
s52)检查待增加节点心跳服务是否启动,是则进入下一步,否则取消增加节点操作;
s53)若任务软件包符合版本的需求,派发容器描述文件给待增加节点;
s54)待增加节点的容器管理服务根据容器描述文件下载容器镜像,待增加节点启动容器,返回启动执行结果;
s55)若启动成功则进入下一步,若启动失败则返回相应错误;
s56)持续嗅探待增加节点容器启动状态,预设时间内嗅探到容器启动成功则将待增加节点添加到mongo集群,将待增加节点添加到mongo集群的具体步骤包括:修改配置文件,增加members成员为待增加节点;应用配置文件,并检查是否添加成功。
进一步的,步骤s2)还包括删除任务软件包的步骤,具体包括:触发删除事件,删除软件包的记录信息;对mongo集群的数据库中所有文件与剩余软件包信息进行匹配,删除不存在匹配结果的文件。
本发明还提出一种基于容器的集群管理系统,包括计算机设备,所述计算机设备被编程或配置以执行所述的基于容器的集群管理方法。
与现有技术相比,本发明的优点在于:
本发明主要采用了golang语言,mongo集群,以及容器技术,通过任务派发的方式来实现对集群进行管理,通过对容器的编排管理集群节点能够使集群达到快速部署,弹性伸缩集群的目的,并大大的节省了系统资源,同时能够避免硬件不兼容的情况。
附图说明
图1为本发明实施例的方法的整体流程图。
图2为本发明实施例中升级集群节点的流程图。
图3为本发明实施例中删除集群节点的流程图。
图4为本发明实施例中增加集群节点的流程图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1所示,本发明提出一种基于容器的集群管理方法,包括以下步骤:
s1)在三个预设的物理节点上部署mongo集群,所述mongo集群采用一主两备的模式运行,在mongo集群各节点运行容器管理服务,本实施例中容器管理服务由golang作为后端语言,对外提供http服务;
s2)向mongo集群的数据库上传任务软件包,任务软件包含有描述文件信息以及容器镜像,各个节点可以依据镜像启动容器,解压任务软件包即可得到容器描述文件以及容器镜像,保存容器描述文件以及容器镜像后对mongo集群进行管理,若升级集群节点,跳转步骤s3;若删除集群节点,跳转步骤s4;若增加集群节点,跳转步骤s5;
s3)对mongo集群各节点发送对应的容器描述文件,mongo集群各节点的容器管理服务根据容器描述文件下载对应容器镜像,各节点停止原有容器并启动所下载的容器,从而达到快速升级的目的,结束并退出;
s4)将除mongo集群主节点以外的待删除节点从mongo集群中移除,派发删除容器的描述文件任务给待删除节点,待删除节点的容器管理服务根据删除容器的描述文件任务将容器删除,结束并退出;
s5)针对处于活跃状态的待增加节点派发对应的容器描述文件,待增加节点的容器管理服务根据容器描述文件启动容器,容器启动成功后将待增加节点添加到mongo集群中。
通过上述步骤,本实施例的方法实现了基于容器管理mongo集群,其中mongo集群采用一主多备的形式以方便集群的扩容以及减少集群节点。集群管理过程中,升级与删除集群节点都是发送对应的容器描述文件或任务给目标节点,新增节点先对目标节点进行活跃状态检测,然后才能够发送对应的容器描述文件给给目标节点,节点的容器管理服务根据容器描述文件或任务进行对应的操作来升级或删除集群节点,从而提高mongo集群的容灾性,以及解决mongo集群高可容的问题,满足对于mongo集群的业务需求。
本实施例中,步骤s2)中向mongo集群的数据库上传任务软件包,解压任务软件包得到容器描述文件以及容器镜像并保存具体包括:首先读取任务软件包的版本信息,校验文件格式是否正确,若正确则读取任务软件包的文件流,采用流式的解压方式对任务软件包进行解压,文件在mongo集群的数据库内部的保存模式是使用gridfs来进行保存。gridfs是基于mongo的一个存储大文件的系统,由于mongo集群对于单个document大小限制为16mb,所以对于一个大文件我们可以将大文件进行分片,分别存入到一个document中,同时根据文件的md5值进行存储,需要取出文件的时候则将各个分片合并即可,因此本实施例中将任务软件包中的容器描述文件以及容器镜像等所有的文件上传到mongo集群的数据库的gridfs中,通过各个文件的md5值来进行索引文件。
本实施例中,为节省存储空间,步骤s2)还包括删除任务软件包的步骤,具体包括:触发删除事件,直接从mongo集群的数据库中删除软件包的记录信息,然后通过定时任务来具体删除mongo集群的数据库中的任务软件包的文件。定时任务第一步对mongo数据库集群的中所有文件进行检索,然后对软件包信息进行检索,对mongo集群的数据库中所有文件与剩余软件包信息进行匹配,删除不存在匹配结果的文件,保障了空间利用的高效性。
如图2所示,本实施例的步骤s3)具体包括以下步骤:
s31)获取mongo集群中的所有节点的状态,本实施例中只有各个节点状态时处于健康状态才能够进行升级操作,若各个节点都为健康状态则进入下一步,否则结束并退出;
s32)判断任务软件包的版本是否符合需求,本实施例中当前系统版本需要小于目标版本,即任务软件包的版本大于各节点容器的版本才能进入进入下一步,否则结束并退出;
s33)对mongo集群各节点发送对应的容器描述文件,然后通过多线程的方式给各个节点发送升级请求,通过waitgroup等待各个节点的升级执行结果;
s34)各节点收取升级请求,各节点的容器管理服务根据容器描述文件下载对应容器镜像,下载完成后各节点停止原有容器并启动所下载的容器,返回升级完成的执行结果,若下载失败,返回升级未完成的执行结果;
s35)获取各个节点的执行结果,若均为升级完成的执行结果,返回一个http响应作为集群节点升级结果通知升级成功。
如图2所示,步骤s35)中若各个节点的执行结果中存在升级未完成的执行结果吗,则返回步骤s33)继续向各个节点发送升级请求,对应节点的容器管理服务重新下载容器镜像进行升级,直到全部节点升级成功。
如图3所示,本实施例的步骤s4)具体包括以下步骤:
s41)检查mongo集群各个节点数目以及状态是否能够进行删除节点操作,本实施例中只有mongo集群各个节点状态健康以及集群节点数目大于第一阈值(本实施例中第一阈值为3)时,才能够进行删除节点操作,如果判断成功则进入下一步,否则结束并退出;
s42)检查待删除节点是否为mongo集群主节点,是则将待删除节点进行降备操作后修改配置项将待删除节点从mongo集群中移除,否则直接修改配置项将待删除节点从mongo集群中移除;
s43)派发删除容器的描述文件任务给待删除节点,等待任务执行结果;
s44)待删除节点的容器管理服务根据删除容器的描述文件任务将容器删除,返回任务执行结果。
通过上述步骤,如若收到任务执行结果为正确响应则代表删除节点任务执行成功,如若未收到任务执行结果或者任务执行结果不是正确响应则删除节点任务执行失败,返回相应的错误。
如图4所示,本实施例的步骤s5)具体包括以下步骤:
s51)判断mongo集群各个节点数目以及状态是否符合增加节点状态,本实施例中只有集群各个节点状态健康和mongo集群个数小于第二阈值(本实施例中第二阈值为7)时,才能够进行增加节点操作,如果判断成功则进入下一步,否则结束并退出;
s52)检查待增加节点心跳服务是否启动,是则进入下一步,否则取消增加节点操作;
s53)若任务软件包符合版本的需求,派发容器描述文件给待增加节点;
s54)待增加节点的容器管理服务根据容器描述文件下载容器镜像,待增加节点启动容器,返回启动执行结果;
s55)若启动成功则进入下一步,若启动失败则返回相应错误;
s56)持续嗅探待增加节点容器启动状态,预设时间内嗅探到容器启动成功则将待增加节点添加到mongo集群,将待增加节点添加到mongo集群的具体步骤包括:修改配置文件,增加members成员为待增加节点;应用配置文件,并检查是否添加成功,如若添加至集群成功则代表增加集群节点成功。
如图4所示,本实施例的步骤s55)中若启动失败还跳转步骤s53)重新开始派发容器描述文件给待增加节点下载并启动容器。
本发明还提出一种基于容器的集群管理系统,包括计算机设备,所述计算机设备被编程或配置以执行所述的基于容器的集群管理方法。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
1.一种基于容器的集群管理方法,其特征在于,包括以下步骤:
s1)在三个预设的物理节点上部署mongo集群,所述mongo集群采用一主两备的模式运行,在mongo集群各节点运行容器管理服务,所述容器管理服务由golang作为后端语言;
s2)向mongo集群的数据库上传任务软件包,解压任务软件包得到容器描述文件以及容器镜像并保存,若升级集群节点,跳转步骤s3;若删除集群节点,跳转步骤s4;若增加集群节点,跳转步骤s5;
s3)对mongo集群各节点发送对应的容器描述文件,mongo集群各节点的容器管理服务根据容器描述文件下载对应容器镜像,各节点停止原有容器并启动所下载的容器,结束并退出;
s4)将除mongo集群主节点以外的待删除节点从mongo集群中移除,派发删除容器的描述文件任务给待删除节点,待删除节点的容器管理服务根据删除容器的描述文件任务将容器删除,结束并退出;
s5)针对处于活跃状态的待增加节点派发对应的容器描述文件,待增加节点的容器管理服务根据容器描述文件启动容器,容器启动成功后将待增加节点添加到mongo集群中。
2.根据权利要求1所述的基于容器的集群管理方法,其特征在于,步骤s2)中向mongo集群的数据库上传任务软件包,解压任务软件包得到容器描述文件以及容器镜像并保存具体包括:首先读取任务软件包的版本信息,校验文件格式是否正确,若正确则读取任务软件包的文件流,采用流式的解压方式对任务软件包进行解压,将任务软件包中的容器描述文件以及容器镜像等所有的文件上传到mongo集群的数据库的gridfs中,通过各个文件的md5值来进行索引文件。
3.根据权利要求1所述的基于容器的集群管理方法,其特征在于,步骤s3)具体包括以下步骤:
s31)获取mongo集群中的所有节点的状态,若各个节点都为健康状态则进入下一步,否则结束并退出;
s32)判断任务软件包的版本是否符合需求,若任务软件包的版本大于各节点容器的版本则进入下一步,否则结束并退出;
s33)对mongo集群各节点发送对应的容器描述文件,然后通过多线程的方式给各个节点发送升级请求,等待各个节点的升级执行结果;
s34)各节点收取升级请求,各节点的容器管理服务根据容器描述文件下载对应容器镜像,下载完成后各节点停止原有容器并启动所下载的容器,返回升级完成的执行结果,若下载失败,返回升级未完成的执行结果;
s35)获取各个节点的升级结果,若均为升级完成的执行结果,返回一个http响应作为集群节点升级结果通知升级成功。
4.根据权利要求1所述的基于容器的集群管理方法,其特征在于,步骤s4)具体包括以下步骤:
s41)检查mongo集群各个节点数目以及状态是否能够进行删除节点操作,若各个节点状态均为健康且节点数目大于第一阈值则进入下一步,否则结束并退出;
s42)检查待删除节点是否为mongo集群主节点,是则将待删除节点进行降备操作后修改配置项将待删除节点从mongo集群中移除,否则直接修改配置项将待删除节点从mongo集群中移除;
s43)派发删除容器的描述文件任务给待删除节点,等待任务执行结果;
s44)待删除节点的容器管理服务根据删除容器的描述文件任务将容器删除,返回任务执行结果。
5.根据权利要求1所述的基于容器的集群管理方法,其特征在于,步骤s5)具体包括以下步骤:
s51)判断mongo集群各个节点数目以及状态是否符合增加节点状态,若各个节点状态均为健康且节点数目小于第二阈值则进入下一步,否则结束并退出;
s52)检查待增加节点心跳服务是否启动,是则进入下一步,否则取消增加节点操作;
s53)若任务软件包符合版本的需求,派发容器描述文件给待增加节点;
s54)待增加节点的容器管理服务根据容器描述文件下载容器镜像,待增加节点启动容器,返回启动执行结果;
s55)若启动成功则进入下一步,若启动失败则返回相应错误;
s56)持续嗅探待增加节点容器启动状态,预设时间内嗅探到容器启动成功则将待增加节点添加到mongo集群,将待增加节点添加到mongo集群的具体步骤包括:修改配置文件,增加members成员为待增加节点;应用配置文件,并检查是否添加成功。
6.根据权利要求1所述的基于容器的集群管理方法,其特征在于,步骤s2)还包括删除任务软件包的步骤,具体包括:触发删除事件,删除软件包的记录信息;对mongo集群的数据库中所有文件与剩余软件包信息进行匹配,删除不存在匹配结果的文件。
7.一种基于容器的集群管理系统,包括计算机设备,其特征在于,所述计算机设备被编程或配置以执行权利要求1~6任一所述的基于容器的集群管理方法。
技术总结