发明内容
本发明针对现有技术的不足,提供一种基于salt的Zookeeper备份管理系统及方法,基于salt可以获取Zookeeper集群所有成员信息,还可以实现发送备份文件到存储节点,同时也可以方便获取备份文件到恢复节点,从而快速恢复数据。
本发明的目的是通过以下技术方案来实现的:一种基于salt的Zookeeper备份管理系统,该系统包括元数据管理端、Zookeeper集群节点、存储节点和恢复节点。
元数据管理端:需要部署salt管理服务,用于注册所有的Zookeeper集群节点,所有的Zookeeper集群节点的主机名保存在元数据管理端的Zookeeper集群节点元数据中;Zookeeper集群节点上的所有Zookeeper服务的IP和端口信息,保存在元数据管理端的Zookeeper集群服务元数据中;Zookeeper数据备份完成后,备份文件的相关信息保存在元信息管理端的Zookeeper集群备份元数据中,Zookeeper集群备份元数据包括:Zookeeper集群端口、备份文件名、存储节点主机名、存储目录;
在元数据管理端,调用salt自身接口,获取Zookeeper集群节点上所有的Zookeeper集群服务元数据;调用salt自身接口,发送Zookeeper备份文件到存储节点对应的存储目录;调用salt自身接口,获取到指定的备份文件,发送到指定的恢复节点,进而得到Zookeeper备份数据。
Zookeeper集群节点:部署Zookeeper集群,每个Zookeeper集群包括奇数个Zookeeper服务(通常至少3个),每个Zookeeper集群以端口唯一标识。需要部署salt客户端,用于接收salt管理服务的指令,从而完成指定的操作。
存储节点:存放Zookeeper备份数据的服务器,部署salt客户端,用于接收salt管理服务的指令,从而完成指定的操作。
恢复节点:需要部署salt客户端,用于接收salt管理服务发送的备份数据,从而快速恢复所述Zookeeper备份数据。
进一步地,所述Zookeeper集群节点包括Zookeeper服务获取模块:按照Zookeeper集群部署要求,一个Zookeeper集群至少需要3个成员,并且,成员个数为奇数,例如可以采用3个成员形式部署Zookeeper集群;一个Zookeeper集群中所有成员的端口保持一致,不同的Zookeeper集群,端口不同,采用端口唯一标识所述Zookeeper集群。
所述Zookeeper服务获取模块,需要传入的参数:Zookeeper集群节点元数据。
进一步地,所述元数据管理端包括元数据管理模块、任务调度模块、数据备份模块和备份文件管理模块;
所述元数据管理模块,需要传入的参数:Zookeeper集群节点的主机名;
所述任务调度模块,需要传入的参数:Zookeeper集群服务元数据;
所述数据备份模块,需要传入的参数:Zookeeper集群服务元数据;
所述备份文件管理模块,需要传入的参数:备份文件名或者Zookeeper集群备份元数据。
进一步地,所述存储节点包括备份存储模块,需要传入的参数:Zookeeper集群备份元数据。
进一步地,所述恢复节点包括数据恢复模块:需要传入参数:Zookeeper集群的端口和备份日期。
一种基于salt的Zookeeper备份管理方法,该方法包括:
(1)调用元数据管理模块,更新Zookeeper集群节点元数据,在调用Zookeeper服务获取模块结束后,在元数据管理端更新Zookeeper集群服务元数据;在调用备份存储模块结束后,在元数据管理端更新Zookeeper集群备份元数据。
(2)调用Zookeeper服务获取模块,扫描Zookeeper集群节点元数据,获取到所有Zookeeper集群节点上的所有Zookeeper集群成员的IP和端口信息,并且记录在Zookeeper集群服务元数据中。
(3)定期运行任务调度模块,扫描Zookeeper集群服务元数据,调用对应的数据备份模块,从而触发Zookeeper数据备份操作。
(4)数据备份模块调用Zookeeper备份工具,根据传入的参数,针对每个Zookeeper集群,执行一次备份操作。如果备份失败,那么调用备份文件管理模块,否则,调用备份存储模块。
(5)调用备份存储模块,在数据备份模块执行结束后,返回Zookeeper备份文件名,然后,备份存储模块发送所述Zookeeper备份文件到存储节点指定存储目录下,同时,更新Zookeeper集群备份元数据。
(6)调用备份文件管理模块,每天定期调用本模块,按照Zookeeper备份策略要求,删除过期的备份文件、失败的备份文件。
(7)调用数据恢复模块,元数据管理端调用本模块,发送指定的备份文件到存储节点,在存储节点上启动一个新Zookeeper服务,并且采用Zookeeper数据恢复工具,恢复备份文件数据到该Zookeeper服务中,从而得到所需数据。
本发明的有益效果是:
(1)系统性管理备份文件:对于每个Zookeeper集群,每天都有对应的备份文件,所述备份文件进行统一化管理。
(2)自动化管理:Zookeeper备份整个过程自动化,不需要人工干预,大大降低备份工作维护成本。
(3)恢复速度快:可以一键操作,恢复所需要的数据。
(4)支持多层次备份:支持按照年份、月份和日期进行备份,Zookeeper备份策略灵活多样。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
如图1所示,本发明提供的一种基于salt的Zookeeper备份管理系统,该系统包括元数据管理端、Zookeeper集群节点、存储节点和恢复节点四个单元:
(1)元数据管理端
在元数据管理端,需要部署salt管理服务,以便发送指令或者文件到salt客户端,完成指定的操作。
元数据管理端主要存储Zookeeper集群节点元数据、Zookeeper集群服务元数据和Zookeeper集群备份元数据,通过如下方式增加Zookeeper集群节点元数据:
#salt-key–y–a‘Zookeeper集群节点主机名’
如果需要调整Zookeeper集群,删除某个Zookeeper集群节点主机,方式如下:#salt-key–d‘Zookeeper集群节点主机名’
说明:Zookeeper集群节点主机名是部署Zookeeper服务的服务器主机名;
元数据管理端定期运行Zookeeper服务获取模块,定期抓取和更新所有Zookeeper集群服务元数据,便于任务调度模块调用。
元数据管理端定期调用任务调度模块,从而更新Zookeeper集群备份元数据。
(2)Zookeeper集群节点
Zookeeper集群节点是部署Zookeeper集群的服务器,至少需要三台服务器,本实施例以三台服务器为例,在三台服务器上部署三个成员的Zookeeper集群。三台服务器上可以部署多套Zookeeper集群,不同Zookeeper集群,端口唯一标识。同一套Zookeeper集群包含三个成员,每个成员的端口号相同。
在Zookeeper集群节点上需要部署salt客户端,以便接收和处理salt管理服务发送的指令。
(3)存储节点
存储节点是存储Zookeeper备份文件的服务器,备份文件分布在不同的存储目录下,存储目录分为年份目录、月份目录和天目录,分别存储年份备份文件、月份备份文件和天的备份文件。按照Zookeeper备份策略,每年的某一天的备份文件作为年份备份文件;每个月的某一天的备份文件作为月份备份文件,其余的备份文件作为天的备份文件,不同层次的备份,可以最大限度地保证备份数据的可用性。
(4)恢复节点
在恢复节点上部署salt客户端,主要用于接收元数据管理端发送的Zookeeper备份文件,同时,在存储节点上启动一个新的Zookeeper服务,调用Zookeeper恢复工具zktreeutil把备份文件数据恢复到所述Zookeeper服务中。
如图2所示,每个单元具体包括的模块如下:
(1)元数据管理模块
需要传入的参数是Zookeeper集群节点的主机名;
在元数据管理端,根据传入的参数,调用salt自身接口,注册或者删除Zookeeper集群节点元数据,如果Zookeeper集群节点调整,比如,添加、下线服务器,需要人工更新Zookeeper集群节点元数据;同时,在元数据管理端存储Zookeeper集群服务元数据和Zookeeper集群备份元数据。
Zookeeper集群节点元数据注册方式:
#salt-key–y–a‘Zookeeper服务主机名’
Zookeeper服务主机名表示Zookeeper服务所在的服务器主机名
Zookeeper集群节点元数据删除方式:
#salt-key–d‘Zookeeper服务主机名’
每天定期更新和归档所述Zookeeper集群服务元数据和所述Zookeeper集群备份元数据,便于查看历史记录。同时,需要备份所述Zookeeper集群备份元数据,保证备份文件可用性。
(2)Zookeeper服务获取模块
需要传入的参数:Zookeeper集群节点元数据;
在元数据管理端,根据传入的所述Zookeeper集群节点元数据,解析得到所有的Zookeeper服务主机名。然后,调用salt接口,获取所述Zookeeper服务主机名对应的Zookeeper进程信息,然后解析所述Zookeeper进程信息,得到集群端口号,记录Zookeeper服务的IP和端口到Zookeeper集群服务元数据中,获取Zookeeper集群进程信息方式如下:
#salt‘Zookeeper服务主机名’cmd.run‘ps-ef|egrep Zookeeper|grep-v grep’
解析所述Zookeeper进程信息,得到Zookeeper服务的端口号。
(3)任务调度模块
需要传入的参数:Zookeeper集群服务元数据;
在元数据管理端,解析所述Zookeeper集群服务元数据,得到所有Zookeeper集群的所有成员的IP和端口,然后调用数据备份模块,传入Zookeeper集群的端口和Zookeeper集群所有成员的IP。
采用定时任务形式,每天调用一次任务调度模块,本模块调用数据备份模块。
(4)数据备份模块
需要传入的参数:Zookeeper集群服务元数据
在元数据管理端,解析所述Zookeeper集群服务元数据,得到所有Zookeeper集群的端口号和Zookeeper集群成员的主机名,本模块采用Zookeeper备份工具zktreeutil,传入以上参数,执行Zookeeper数据备份,产生的备份数据保存在元数据管理端指定的目录中,称之为Zookeeper备份文件。不同Zookeeper集群的备份文件,以端口作为区分。
如果备份操作成功执行,调用备份存储模块,否则,调用备份文件管理模块清理失败的备份文件。
(5)备份存储模块
需要传入的参数:Zookeeper备份文件名、存储节点主机名、存储目录;
在元数据管理端,根据Zookeeper备份策略,调用salt接口,发送指令到存储节点对应的salt客户端,创建备份文件所需的存储目录。然后,调用salt接口,发送所述Zookeeper备份文件到指定的存储节点的存储目录下。最后,记录所述备份文件名、存储节点主机名、存储目录和备份日期到Zookeeper集群备份元数据中。
(6)数据恢复模块
需要传入参数:Zookeeper集群端口号和备份日期;
在元数据管理端,根据传入的Zookeeper集群端口号和备份日期,扫描Zookeeper集群备份元数据,找到对应的Zookeeper备份文件名、、存储节点主机名、存储目录。然后,调用salt接口,从存储节点上获取备份文件到元数据管理端,然后通过salt自身接口,发送所述Zookeeper备份文件到恢复节点指定的目录下。最后,在恢复节点上启动一个新的Zookeeper服务,该Zookeeper服务采用单机模式,调用Zookeeper数据恢复工具zktreeutil,从备份文件中恢复数据到新Zookeeper中。
(7)备份文件管理模块
需要传入的参数:备份文件名或者Zookeeper备份元数据
为了便于区分,采用不同的选项传入参数,比如,-f Zookeeper数据备份文件名,-m Zookeeper备份元数据
在数据备份模块执行结束后,如果备份失败,那么调用本模块,采用–f备份文件名传入参数;另外,每天定期执行本模块,传入参数为:-m Zookeeper备份元数据,结合Zookeeper备份策略,如果缺少年份备份,那么从月份备份中选择一个备份文件作为年份备份,如果缺少月份备份,那么从天备份中选择一个备份文件作为月份备份,最后,清理过期备份文件,既满足多层次备份,又可以节省存储空间。
一种基于salt的Zookeeper备份管理方法,该方法包括:
(1)调用元数据管理模块,更新Zookeeper集群节点元数据,在调用Zookeeper服务获取模块结束后,在元数据管理端更新Zookeeper集群服务元数据;在调用备份存储模块结束后,在元数据管理端更新Zookeeper集群备份元数据。
(2)调用Zookeeper服务获取模块,扫描Zookeeper集群节点元数据,获取到所有Zookeeper集群节点上的所有Zookeeper集群成员的IP和端口信息,并且记录在Zookeeper集群服务元数据中。
(3)定期运行任务调度模块,扫描Zookeeper集群服务元数据,调用对应的数据备份模块,从而触发Zookeeper数据备份操作。
(4)数据备份模块调用Zookeeper备份工具,根据传入的参数,针对每个Zookeeper集群,执行一次备份操作。如果备份失败,那么调用备份文件管理模块,否则,调用备份存储模块。
(5)调用备份存储模块,在数据备份模块执行结束后,返回Zookeeper备份文件名,然后,备份存储模块发送所述Zookeeper备份文件到存储节点指定存储目录下,同时,更新Zookeeper集群备份元数据。
(6)调用备份文件管理模块,每天定期调用本模块,按照Zookeeper备份策略要求,删除过期的备份文件、失败的备份文件。
(7)调用数据恢复模块,元数据管理端调用本模块,发送指定的备份文件到存储节点,在存储节点上启动一个新Zookeeper服务,并且采用Zookeeper数据恢复工具,恢复备份文件数据到该Zookeeper服务中,从而得到所需数据。