CN115827316A - 数据备份方法、装置、设备及存储介质 - Google Patents
数据备份方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115827316A CN115827316A CN202211224034.XA CN202211224034A CN115827316A CN 115827316 A CN115827316 A CN 115827316A CN 202211224034 A CN202211224034 A CN 202211224034A CN 115827316 A CN115827316 A CN 115827316A
- Authority
- CN
- China
- Prior art keywords
- library
- standby
- main
- metadata
- backup
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的实施例公开了一种数据备份方法、装置、设备及存储介质,方法应用于数据备份系统,数据备份系统包括主库,主库具有备库,方法包括:将主库与备库进行连接,以使主库和备库相互访问;将所产生的元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步;获取代码文件,并将代码文件推送至主库,以使主库通过同步脚本将代码文件同步至备库进行备份。本申请实施例的技术方案,采用消息队列和脚本的方式实现了元数据和代码的热备份,无需停机,保证了数据资产的安全,也不影响用户或开发人员使用数据。
Description
技术领域
本申请涉及一种计算机技术领域,提供一种数据备份方法、数据备份装置、电子设备及计算机可读存储介质。
背景技术
目前,在数字化转型大背景下,企业纷纷将原有的系统上云,而上云的关键步骤即把数据托管到云端。作为云存储,不仅要保证数据的安全性,还要保证数据的实时性能,其实时性,是不仅能够支持用户随时拉取数据做持续集成,还要保障在高并发调用时的性能,须通过热备份才能保证业务的实时性,而目前热备份方式是通过停机的方式进行导入导出,影响用户或开发人员使用,通过停机的方式不能保证数据安全。
发明内容
本申请的目的在于提供一种数据备份方法、数据备份装置、电子设备及计算机可读存储介质,采用消息队列和脚本的方式实现了元数据和代码的热备份,无需停机,保证了数据资产的安全,也不影响用户或开发人员使用数据。
本申请提出一种数据备份方法,应用于数据备份系统,所述数据备份系统包括主库,所述主库具有备库,所述方法包括:将所述主库与所述备库进行连接,以使所述主库和所述备库相互访问;将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步;获取代码文件,并将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份。
进一步地,所述主库的数量为至少两个;所述将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步,包括:在所述消息队列中创建交换机,以及各个主库分别对应的子主队列和所述备库对应的备队列;通过路由键将所述交换机与各队列进行绑定;将所产生的元数据传输至所述交换机,以使所述交换机根据所述元数据中包含的路由键将所述元数据发送至目标子主队列和所述备库对应的备队列中,通过所述目标子主队列和所述备队列将所述元数据发送至所述主库和所述备库进行同步。
进一步地,所述将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步,包括:若所产生的元数据的数据类型为写数据,则将所述元数据传输至所述消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步。
进一步地,所述方法还包括:若所产生的元数据的数据类型为读数据,则通过访问代理服务器将所述元数据路由至所述主库。
进一步地,所述连接所述主库与所述备库,以使所述主库和所述备库相互访问,包括:为所述主库和所述备库分别生成密钥对;建立所述主库和所述备库的连接通道;将所述主库的公钥发送至所述备库,并将所述备库的公钥发送至所述主库,以使所述主库和所述备库相互免密访问。
进一步地,所述将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份,包括:在所述主库创建代码仓库,并在所述代码仓库的目录中创建用于触发代码同步的同步脚本和用于关联所述备库的钩子函数;将来自客户端的所述代码文件推送至所述主库,以使所述主库触发所述同步脚本,以调用所述钩子函数将代码文件同步至所述备库。
进一步地,所述方法还包括:在所述主库出现故障时,修改代理服务器配置,以将备库的IP地址替换掉所述主库服务的IP地址;且修改客户端上所述主库的代码仓库地址,以将所述备库切换为所述主库。
本申请还提出一种数据备份装置,部署于数据备份系统,所述数据备份系统包括主库,所述主库具有备库,所述装置包括:连接模块,用于将所述主库与所述备库进行连接,以使所述主库和所述备库相互访问;元数据同步模块,用于将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步;代码同步模块,用于获取代码文件,并将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份。
本申请还提出一种电子设备,所述电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个被所述一个或多个处理器执行时,使得所述电子设备实现如上所述的方法。
本申请还提出一种计算机可读存储介质,其上存储有计算机可读指令,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行如上所述的方法。
与现有技术相比,本申请具有如下有益效果:
本申请提供的技术方案中,通过消息队列将所产生的元数据同步至主库和备库,通过将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份,即采用消息队列和脚本的方式实现了元数据和代码的热备份,无需停机,保证了数据资产的安全,也不影响用户或开发人员使用数据。
附图说明
图1示出了本申请涉及的一种实施环境的示意图;
图2示出了本申请一示例性实施例示出的一种数据备份方法的流程图;
图3示出了图2所示实施例中的在步骤S120在一示例性实施例中的流程图;
图4示出了图2所示实施例中的步骤S110在一示例性实施例中的流程图;
图5示出了图2所示实施例中的步骤S130在一示例性实施例中的流程图;
图6示出了图2所示实施例中的还包括的主备库切换的流程图;
图7示出了本申请一示例性实施例示出的一种数据备份系统架构示意图;
图8示出了基于图7的系统架构的元数据同步的流程示意图;
图9示出了一种基于图7的系统架构的代码同步示意图;
图10示出了本申请一示例性实施例示出的一种主库代码仓库的示意图;
图11示出了本申请一示例性实施例示出的一种备库代码仓库的示意图;
图12示出了本申请一示例性实施例示出的一种主备切换示意图;
图13示出了本申请一示例性实施例示出的一种数据备份装置的结构示意图;
图14示出了适于用来实现本申请实施例的电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
还需要说明的是:在本申请中提及的“多个”是指两个或者两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
请参阅图1,图1是本申请涉及的一种实施环境的示意图。该实施环境包括数据备份系统,该数据备份系统包括主库服务器10和备库服务器20,主库服务器10上设有主库,该主库具有备库,备库设于备库服务器20,主库服务器10和备库服务器20可以通过网络连接,网络可以是有线网络,也可以是无线网络,本处也不进行限制。
该数据备份系统还包括客户端30和数据备份装置40,客户端30用于对主库服务器和备库服务器中的数据进行管理,例如该客户端30为DevOps(Development和Operations的组合词)平台;该客户端30还可以产生代码文件,例如该客户端30可以是Gitlab客户端或IDE(Integrated Development Environment,集成开发工具)。
数据备份装置40用于将主库与备库进行连接,以使主库和备库相互访问,将客户端产生的元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步,获取客户端代码文件,并将代码文件推送至主库,以使主库通过同步脚本将代码文件同步至备库进行备份。
在一些实施例中,也可以是主库服务器10与备库服务器20连接,客户端30将产生的元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步,客户端获取代码文件,并将代码文件推送至主库,以使主库通过同步脚本将代码文件同步至备库进行备份。
其中,主库服务器和备库服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content DeliveryNetwork,内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器;数据备份装置也可以为服务器,本处不对此进行限制。
以下基于图1所示的实施环境对数据备份方法进行详细说明:
请参阅图2,图2是本申请一示例性实施例示出的一种数据备份方法的流程图,该数据备份方法由图1所示的数据备份系统的客户端或数据备份装置执行,该数据备份方法包括步骤S110至步骤S130,详细介绍如下:
S110、将主库与备库进行连接,以使主库和备库相互访问。
在本申请实施例中,主库即主用数据库,备库即备用数据库,备用数据库用于备份主库中的数据。主库的数量可以是一个,也可以是多个,备库的数量也可以一个或多个,当主库的数量为多个,可以根据基于不同服务区分不同的主库,例如服务1对应主库1,服务2对应主库2,在此不进行限定。
在本申请实施例中,将主库与备库进行连接,进而主库与备库连通,且主库可以访问备库,备库也可以访问主库;其中主库与备库的连接可以是直接连接,也可以间接连接,在此不进行限定。
在一些实施例中,在将主库和备库进行连接后,由于主库和备库可以相互访问,则备库可以备份主库中的所有数据,此时,主库和备库已完全同步。
S120、将所产生的元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步。
需要说明的是,所产生的元数据指的对所提供的业务进行管理所产生的元数据,例如对用户、权限和代码仓库的管理所产生的元数据,假设修改了用户A的联系信息,则会产生用户A修改联系信息的元数据。
本申请实施例中,所产生的元数据会根据数据产生时间的先后顺序依次传输至消息队列,消息队列可以分别与主库和备库连接,进而在将所产生的元数据传输至消息队列中,消息队列会将元数据发送至主库和备库,由主库和备库对该元数据进行相应处理,例如主库和备库会基于用户A修改联系信息的元数据对用户A的联系信息进行修改。
S130、获取代码文件,并将代码文件推送至主库,以使主库通过同步脚本将代码文件同步至备库进行备份。
需要说明的是,本申请实施例中,代码文件和所产生的元数据是通过两种不同的方式进行备份的。其中,代码文件指的是记录了源代码文件。
获取代码文件可以是在技术人员新编码生成新的代码文件时,获取该代码文件,其中,技术人员可以在Gitlab客户端或IDE开发工具上提交,进而本申请实施例中通过Gitlab客户端或IDE开发工具获取代码文件。
获取代码文件后,将代码文件推送至主库,而主库中存储有同步脚本,该同步脚本用于将主库中的代码文件同步至备库,进而主库接收到代码文件,立即触发同步脚本,以将该代码文件同步至备库进行备份。
本申请实施例中,通过消息队列将所产生的元数据同步至主库和备库,通过将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份,即采用消息队列和脚本的方式实现了元数据和代码的热备份,无需停机,保证了数据资产的安全,也不影响用户或开发人员使用数据。
下面对这些步骤S110~S130进行详细描述。
在本申请实施例中,主库的数量为至少两个,如图3所示,图3示出了图2所示实施例中的步骤S120的流程图,包括:
S121、在消息队列中创建交换机,以及各个主库分别对应的子主队列和备库对应的备队列。
在本申请实施例中,在消息队列中创建交换机、各子队列和备队列,其中子队列与主库一一对应,备队列与备库对应;其中,交换机用于根据不同的规则将数据分发到不同的队列,子主队列和备队列用于将接收到的数据传输至对应的主库和备库。
S122、通过路由键将交换机与各队列进行绑定。
在本申请实施例中,为了使得交换机将数据准确发放到对应的队列,需要通过路由键Binding Key将交换机与各主子队列和备队列进行绑定。
在一示例中,交换机与各主子队列的Binding Key不同,例如交换机与各子队列的Binding Key为“主库n.队列类别”,通过主库n表明是对应什么队列,通过队列类别表明元数据是基于什么业务类型所产生的,例如主库2.用户,表示对应主库2对应的队列,且该元数据针对的是用户业务类型。
S123、将所产生的元数据传输至交换机,以使交换机根据元数据中包含的路由键将元数据发送至目标子主队列和备库对应的备队列中,通过目标子主队列和备队列将元数据发送至主库和备库进行同步。
在本申请实施例中,将所产生的元数据传输至交换机时,该元数据携带有指定的Binding Key,进而交换机可以基于元数据中携带的Binding Key和与所有主子队列的Binding Key,确定元数据对应的目标主子队列,之后将该元数据发送至目标主子队列,由于备库只有一个备队列,同时也会将元数据直接发送至备库对应的备队列中,进而目标子主队列将元数据发送至主库,备队列将元数据发送至备库进行同步。
例如所产生的元数据是针对所提供的用户服务的用户A的联系信息修改,而用户服务对应主库2,则元数据携带的指定的Binding Key为主库2.用户,则交换机将该元数据发送到主库2对应的子主队列2中,同时将该元数据发送至备队列中。
在本申请实施例中,交换机为主题交换机,主题类型的交换机会根据通配符对Binding Key进行匹配,只要Binding Key满足某个通配符的条件,就会被路由到对应的队列上。此时,将所产生的元数据传输至主题交换机,以使得主题交换机根据通配符对元数据中包含的路由键进行匹配,并在路由键满足目标通配符的条件时,将元数据发送至与路由键对应的目标子主队列和备库对应的备队列中。
如前所述,主题交换机会根据通配符对Binding Key进行匹配,其中通配符的匹配规则可为:Binding Key必须是一串字符串,每个单词用“.”分隔;符号“#”表示匹配一个或多个单词;符号“*”表示匹配一个单词。因此主题交换机收到元数据后,根据通配符对元数据中包含的路由键进行匹配。
在本申请实施例,通过路由键将交换机与各队列进行绑定,进而将元数据传输至交换机后,交换机可以基于路由键准确、快速地将元数据传输到对应队列中,以通过队列传输给主库和备库。
需要说明的是,在本申请实施例中,采用的读写分离原则,即读数据和写数据分离,而读数据和写数据采用不同的方式进行备份,因此将所产生的元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步之前,还需要判断所产生的元数据的数据类型。
若所产生的元数据的数据类型为写数据,则将元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步。
可以理解的是,若所产生的元数据的数据类型为写数据,则必然需要会改变主库和备库中的数据,例如增加数据,修改数据,因此需要通过消息队列将元数据发送至主库和备库,以使得主库和备库同步基于元数据改变所存储的数据。
在本申请实施例中,采取的读写分离原则,若所产生的元数据的数据类型为读数据,则通过访问代理服务器将元数据路由至主库。其中代理服务器与主库和备库连接。
由于读数据并不会改变主库所存储的数据,主库和备库已经同步,因此可以不用将元数据同步至备库中,即所产生的元数据的数据类型为读数据时,可通过访问代理服务器将元数据路由到主库,由主库执行元数据。例如元数据为读取用户B的联系方式,则主库将用户B的联系方式路由至代理服务器,以使得用户可以读取。
在本申请实施例中,通过读写分离,将写数据通过消息队列传输,将读数据通过代理服务器路由,在保证数据得到有效处理的情况下,避免了资源的占用,提高主库的性能。
值得注意的是,如图4所示,图4示出了图2所示实施例中的步骤S110的流程图,包括:
S111、为主库和备库分别生成密钥对。
在本申请实施例中,为了保证主库和备库中的数据安全性,需要为主库和备库分别生成密钥对,其中,密钥对包括公钥和私钥。
可选的,可以在主库中,使用预设账号为主库和备库分别生成密钥对,可以理解的是,虽然使用的预设账号相同,但主库和备库中的密钥对不同,在一示例中,密钥对为SSH(Secure Shell)密钥对。
S112、建立主库和备库的连接通道。
可以理解的是,主库和备库运行在两台服务器,因此可连接两台服务器,以建立主库和备库的连接通道。
S113、将主库的公钥发送至备库,并将备库的公钥发送至主库,以使主库和备库相互免密访问。
在本申请实施例中,将主库的公钥发送至备库,并将备库的公钥发送至主库,进而主库访问备库时,可以基于备库的公钥实现免密访问,备库访问主库时,可以基于主库的公钥实现免密访问。
在本申请实施例中,通过密钥对保证了主库和备库中数据的安全性,通过将对应的公钥发送至对方,在保证数据安全的情况下,实现了免密访问。
如图5所示,图5示出了图2所示实施例中的步骤S130的流程图,包括:
S131、在主库创建代码仓库,并在代码仓库的目录中创建用于触发代码同步的同步脚本和用于关联备库的钩子函数。
在本申请实施例中,连接主库和备库后,可以关联镜像仓库。首先,在主库创建代码仓库,该代码仓库用于存储代码文件,并在成功创建代码仓库后,会自动在代码仓库对应目录创建触发代码同步的同步脚本和用于关联备库的钩子函数custom_hooks。
S132、将代码文件推送至主库,以使主库触发同步脚本,以调用钩子函数将代码文件同步至备库。
用户在客户端或开发工具上提交代码文件,将代码文件推送至主库,主库自动触发同步脚本的运行,以钩子函数custom_hooks,将代码文件同步至备库。
可以理解的是,主库和备库的结构应当相同,在主库创建代码文件时,也需要在备库创建代码文件,进而主库将代码文件同步至备库的代码文件。
本申请实施例中,通过在代码仓库的目录中创建同步脚本和钩子函数,进而可以实现自动将代码文件同步至备库,实现了代码热备份。
在本申请实施例中,数据备份方法还包括主备库切换流程,如图6所示,还包括:
S140、在主库出现故障时,修改代理服务器配置,以将备库的IP地址替换掉主库服务的IP地址。
在本申请实施例中,主库可能会出现故障,在主库出现故障时,为了保障运行,可以将备库切换为主库。其中,需要完成两处修改,一是修改代理服务器的配置,代理服务器上有主库和备库的相关配置,将备库的IP地址替换为主库的IP地址,进而针对元数据为读数据类型时,可通过代理服务器直接访问备库,针对元数据为写数据类型,在将元数据传输到消息队列后,由于主库出现故障,则通过消息队列将元数据同步至备库。
S150、且修改客户端上主库的代码仓库地址,以将所述备库切换为所述主库。
在本申请实施例中,步骤S140是针对元数据需要做的修改,步骤S150是针对代码文件需要做的修改。如前所述,用户是将代码文件提交到客户端,客户端将代码文件推送至主库,因此需要修改客户端上的主库的代码仓库地址,将主库的代码仓库地址修改为备库的代码仓库地址,进而客户端会将代码文件推送至备库。
待主库恢复后,主库和备库可以相互访问,则主库可以访问备库以获取未同步的数据,然后切换回来。
在本申请实施例中,步骤S140和步骤S150的执行顺序可以是S140先执行,也可以是S150先执行,还可以同时执行,在此不进行限定。
本申请实施例中,备库只有在主库出现问题时顶替换上,且通过代理服务器的配置修改和客户端上代码仓库的地址的修改,即可实现主备切换,主备切换代价较小,操作简单,提高了用户使用时的体验感。
为了便于理解,本实施例以一个较为具体的示例对数据备份方法进行说明。该数据备份方法是基于Gitlab的数据备份方法,通过设计Topic消息队列服务来完成Gitlab服务的仓库、用户、权限等元数据的同步,通过提交代码触发自定义脚本来同步代码,进而实现整个代码仓库的热备份,解决了传统技术中代码仓库的备份通过停机的方式进行导入导出,既保证了代码资产的安全,也可以不影响用户或开发人员使用代码仓库,同时其简单的操作即可实现主备库的切换,极大的提高了用户体验感。
如图7所示,图7为本申请实施例提供的一种数据备份系统架构示意图,该系统架构示意图包括DevOps平台、消息队列服务、Gitlab消费微服务、Gitlab客户端或IDE开发工具、Gitlab主库服务器和Gitlab备库服务器,其中,Gitlab主库服务器包括多个,每个服务器上设有前述的主库,备库服务器上设有备库,即存在多个主库和一个备库。
基于图7所示的系统架构设计图,DevOps平台对用户、权限、代码仓库的管理会产生消息(即前述的元数据)至消息队列服务,Gitlab消费微服务会消费消息,该消息会通过Gitlab消费微服务被一主库(Gitlab主库服务器)和备库(Gitlab备库服务器)。
用户在Gitlab客户端或IDE开发工具提交代码文件后,Gitlab客户端或IDE开发工具会调用git_push函数将本地更新的代码文件推送到一主库和备库。
可以理解的是,主库和备库之间可以相同访问,因此备库可以通过custom_hooks将相关数据推送到主库。
如图8所示,图8示出了一种基于图7的系统架构的元数据同步的流程示意图。图7中的消息队列服务是通过集成开源组件RabbitMQ实现消息队列,消息队列服务包括Topic(主题)交换机、各个主库对应的队列,以及备库对应的队列。主题交换机与各个队列之间的绑定设计是通过库名.队列类名;主库队列的Binding Key为“主库n.队列类别”;备库队列的Binding Key为“*.队列类别”。这样所有的消息都会发送给备库队列一份;队列则依据名称和消费者一一对应。其中,消费者微服务包括分别与备库、各个主库对应的消费者,进而消费者会将消息发送到对应的主库和备库。
例如元数据写操作,在上DevOps平台上修改了在Gitlab服务器2(主库2)上用户手机号码信息,则会产生用户修改消息。该消息的Binding为服务2.用户修改,根据Topic的匹配规则,会发送到2条消息队列中,名为“主库2.用户修改”和“*.用户修改”,它们分别绑定了主库1消费者和备库消费者。消费者消费消息执行调用主库2和备库的服务API接口修改用户的手机号码。
如图9所示,图9示出了一种基于图7的系统架构的代码同步示意图。Gitlab主库服务器执行完创建代码仓库后,即在主库中,会在代码仓库目录中自动创建同步代码脚本,用户在Gitlab客户端或IDE开发工具上提交代码至主库时,可以自动触发脚本,同步提交代码至备库服务,如此一来,实现了Gitlab的代码仓库热备份功能。
其中,一个主库和一个备库实现步骤包括:
1、以物理机的方式在Linux服务器上部署安装好主库的Gitlab代码仓库和备库的Gitlab代码仓库。
2、连通两台服务器,相互添加SSH权限,免密相互访问。
在主库服务器中,使用服务器中的git账户,(git账号默认存在),生成./SSH目录及密钥对文件。将id_rsa.pub(公钥)的内容,分别添加到主库服务的SSH keys设置处和备库服务器的SSH keys设置处。
3、关联镜像仓库。
Gitlab主库服务器一旦消费完创建仓库的消息,并成功创建仓库后,会自动在对应仓库路径生成同步脚本。脚本内容如下:
#!/bin/bash //脚本起始行
cd/var/opt/Gitlab/git-data/repositories/$repositories_path/ //进入对应仓库目录进行下面的操作
git remote add--mirror=push$USER git@$Gitlab_IP:$repositories_path//添加远程仓库镜像,用于备份
mkdircustom_hooks //创建自定义的名称的文件夹,用于存放子脚本
cd custom_hooks //进入创建的文件夹
touch post-receive //创建文件post-receive
cat>post-receive<<EOF //在文件post-receive中写入子脚本内容,内容如下:
#!/bin/bash //子脚本起始行
echo"$USER" //输出当前用户
exec git push-u$USER& //使用当前用户执行推送代码至镜像仓库动作
EOF //子脚本写入完毕
chmod-R 755post-receive//修改文件post-receive权限755
结合图9所示,用户在Gitlab客户端或IDE开发工具提交代码文件后,Gitlab客户端或IDE开发工具会调用git_push函数提交代码至主库的代码仓库1,由于主库和备库可以通过SSH密钥相互访问,主库自动运行上述的同步脚本,以调用custom_hooks将代码文件路径1推送到备库的代码仓库1。
如图10和图11所示,图10示出了一种主库代码仓库的示意图,图11示出了一种备库代码仓库的示意图,由Gitlab客户端或IDE开发工具,添加README.md文件提交代码文件(test-push.tet)至主库。同时在备库中也能自动有该文件(test-push.tet)。
若备库替换为主库,则Git客户端或IDE开发工具提交代码文件后,代码文件会推送到备库的代码仓库2,同理,备库自动运行上述的同步脚本,以调用custom_hooks将代码文件路径2推送到主库的代码仓库2。
如前所述,本申请实施例中的可以进行主备切换。如图12所示,图12示出了一种主备切换示意图。本申请的Gitlab服务可支持分布式架构,Gitlab接口的调用采用的是读写分离原则。写操作经过消息队列服务会被主库服务和备库服务消费,而读操作则通过访问Nginx(前述的代理服务器)路由到不同的主库节点服务,备库只有在主库出现问题时顶替换上;只需修改2处配置即可完成切换。1、修改Nginx配置,将备库服务的IP替换掉某一主库服务的IP;2、开发人员修改Gitlab客户端和IDE开发工具上配置的Gitlab仓库地址即可完成备库的替换。当Gitlab主库服务恢复正常,再修改回来,即完成了主备切换。
例如,查看Gitlab服务2上某一用户的读操作,则由DevOps平台直接调用了Gitlab服务的查询API接口,然后由Nginx路由到Gitlab服务2执行。
本申请实施例提供的方法与现有的技术中代码仓库的备份通过停机的方式进行导入导出方式的相比,不仅通过备份保障了代码资产安全,还保证了系统的实时性,热备份不需要关停代码仓库;此外,主备切换代价较小,提高了用户使用时的体验感;使用Topic消息队列来实现元数据的同步,API的调用实现了读写分离,提高了Gitlab代码仓库的性能。同时,本发明设计能够支持Gitlab代码仓库分布式架构的部署,是对生产系统安全保障的一个很好的支持。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的数据备份方法。对于本申请装置实施例中未披露的细节,请参照本申请上述的数据备份方法的实施例。
如图13所示,图13是本申请的一示例性实施例示出的一种数据备份装置的结构示意图,该装置部署于数据备份系统,装置包括:
连接模块1310,用于将主库与备库进行连接,以使主库和备库相互访问;
元数据同步模块1320,用于将所产生的元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步;
代码同步模块1330,用于获取代码文件,并将代码文件推送至主库,以使主库通过同步脚本将代码文件同步至备库进行备份。
在本申请的一些实施例中,基于前述方案,主库的数量为至少两个;元数据同步模块1320进一步在消息队列中创建交换机,以及各个主库分别对应的子主队列和备库对应的备队列;通过路由键将交换机与各队列进行绑定;将所产生的元数据传输至交换机,以使交换机根据元数据中包含的路由键将元数据发送至目标子主队列和备库对应的备队列中,通过目标子主队列和备队列将元数据发送至主库和备库进行同步。
在本申请的一些实施例中,基于前述方案,元数据同步模块1320进一步用于若所产生的元数据的数据类型为写数据,则将元数据传输至消息队列中,以通过消息队列将元数据发送至主库和备库进行同步。
在本申请的一些实施例中,基于前述方案,装置还包括访问模块,该访问模块用于若所产生的元数据的数据类型为读数据,则通过访问代理服务器将元数据路由至主库。
在本申请的一些实施例中,基于前述方案,连接模块1310进一步用于为主库和备库分别生成密钥对;建立主库和备库的连接通道;将主库的公钥发送至备库,并将备库的公钥发送至主库,以使主库和备库相互免密访问。
在本申请的一些实施例中,基于前述方案,代码同步模块1330进一步用于在主库创建代码仓库,并在代码仓库的目录中创建用于触发代码同步的同步脚本和用于关联备库的钩子函数;将来自客户端的代码文件推送至主库,以使主库触发同步脚本,以调用钩子函数将代码文件同步至备库。
在本申请的一些实施例中,基于前述方案,该装置还包括切换模块,用于在主库出现故障时,修改代理服务器配置,以将备库的IP地址替换掉主库服务的IP地址;且修改客户端上主库的代码仓库地址,完成备库替换主库。
需要说明的是,上述实施例所提供的装置与上述实施例所提供的方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
本申请实施例的装置中,元数据同步模块:将产生用户、权限、代码仓库管理的消息发送至Topic类型的消息队列,其消息会被消费服务中的一个主库和备库同时消费,然后调用Gitlab的接口进行操作。
代码同步模块:本发明在Gitlab服务器执行完创建代码仓库后,会在对应代码仓库目录中自动创建同步代码脚本,用户在Git客户端或IDE开发工具上提交代码至主库时,可以自动触发脚本,同步提交代码至备库服务。
Gitlab服务可支持分布式架构,Gitlab接口的调用采用的是读写分离原则。写操作经过消息服务会被主备服务消费,而读操作则通过访问Nginx路由到不同的主库节点服务,备库只有在主库出现问题时顶替换上。
在一示例性实施例中,一种电子设备,包括一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个被一个或多个处理器执行时,使得电子设备实现如前所述的方法。可以理解的是,该电子设备可以部署在服务器内。
图14是根据一示例性实施例示出的一种电子设备的结构示意图。
需要说明的是,该电子设备只是一个适配于本申请的示例,不能认为是提供了对本申请的使用范围的任何限制。该电子设备也不能解释为需要依赖于或者必须具有图14中示出的示例性的电子设备中的一个或者多个组件。
如图14所示,在一示例性实施例中,电子设备包括处理组件1401、存储器1402、电源组件1403、多媒体组件1404、音频组件1405、处理器1406、传感器组件1407和通信组件1408。其中,上述组件并不全是必须的,电子设备可以根据自身功能需求增加其他组件或减少某些组件,本实施例不作限定。
处理组件1401通常控制电子设备的整体操作,诸如与显示、数据通信以及日志数据同步相关联的操作等。处理组件1401可以包括一个或多个处理器1406来执行指令,以完成上述操作的全部或部分步骤。此外,处理组件1401可以包括一个或多个模块,便于处理组件1401和其他组件之间的交互。例如,处理组件1401可以包括多媒体模块,以方便多媒体组件1404和处理组件1401之间的交互。
存储器1402被配置为存储各种类型的数据以支持在电子设备的操作,这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令。存储器1402中存储有一个或多个模块,该一个或多个模块被配置成由该一个或多个处理器1406执行,以完成上述实施例中所描述的方法中的全部或者部分步骤。
电源组件1403为电子设备的各种组件提供电力。电源组件1403可以包括电源管理系统,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。
多媒体组件1404包括在电子设备和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括TP(Touch Panel,触摸面板)和LCD(Liquid Crystal Display,液晶显示器)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
音频组件1405被配置为输出和/或输入音频信号。例如,音频组件1405包括一个麦克风,当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。在一些实施例中,音频组件1405还包括一个扬声器,用于输出音频信号。
传感器组件1407包括一个或多个传感器,用于为电子设备提供各个方面的状态评估。例如,传感器组件1407可以检测到电子设备的打开/关闭状态,还可以检测电子设备的温度变化。
通信组件1408被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,例如Wi-Fi(Wireless-Fidelity,无线网络)。
可以理解,图14所示的结构仅为示意,电子设备可以包括比图14中所示更多或更少的组件,或者具有与图14所示不同的组件。图14中所示的各组件均可以采用硬件、软件或者其组合来实现。
在一示例性实施例中,一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前所述的方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
需要说明的是,本申请实施例所示的计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(ErasableProgrammable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
上述内容,仅为本申请的较佳示例性实施例,并非用于限制本申请的实施方案,本领域普通技术人员根据本申请的主要构思和精神,可以十分方便地进行相应的变通或修改,故本申请的保护范围应以权利要求书所要求的保护范围为准。
Claims (10)
1.一种数据备份方法,其特征在于,应用于数据备份系统,所述数据备份系统包括主库,所述主库具有备库,所述方法包括:
将所述主库与所述备库进行连接,以使所述主库和所述备库相互访问;
将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步;
获取代码文件,并将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份。
2.根据权利要求1所述的方法,其特征在于,所述主库的数量为至少两个;所述将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步,包括:
在所述消息队列中创建交换机,以及各个主库分别对应的子主队列和所述备库对应的备队列;
通过路由键将所述交换机与各队列进行绑定;
将所产生的元数据传输至所述交换机,以使所述交换机根据所述元数据中包含的路由键将所述元数据发送至目标子主队列和所述备库对应的备队列中,通过所述目标子主队列和所述备队列将所述元数据发送至所述主库和所述备库进行同步。
3.根据权利要求1所述的方法,其特征在于,所述将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步,包括:
若所产生的元数据的数据类型为写数据,则将所述元数据传输至所述消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若所产生的元数据的数据类型为读数据,则通过访问代理服务器将所述元数据路由至所述主库。
5.根据权利要求1所述的方法,其特征在于,所述连接所述主库与所述备库,以使所述主库和所述备库相互访问,包括:
为所述主库和所述备库分别生成密钥对;
建立所述主库和所述备库的连接通道;
将所述主库的公钥发送至所述备库,并将所述备库的公钥发送至所述主库,以使所述主库和所述备库相互免密访问。
6.根据权利要求5所述的方法,其特征在于,所述将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份,包括:
在所述主库创建代码仓库,并在所述代码仓库的目录中创建用于触发代码同步的同步脚本和用于关联所述备库的钩子函数;
将来自客户端的所述代码文件推送至所述主库,以使所述主库触发所述同步脚本,以调用所述钩子函数将代码文件同步至所述备库。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
在所述主库出现故障时,修改代理服务器配置,以将备库的IP地址替换掉所述主库服务的IP地址;
且修改客户端上所述主库的代码仓库地址,以将所述备库切换为所述主库。
8.一种数据备份装置,其特征在于,部署于数据备份系统,所述数据备份系统包括主库,所述主库具有备库,所述装置包括:
连接模块,用于将所述主库与所述备库进行连接,以使所述主库和所述备库相互访问;
元数据同步模块,用于将所产生的元数据传输至消息队列中,以通过所述消息队列将所述元数据发送至所述主库和所述备库进行同步;
代码同步模块,用于获取代码文件,并将所述代码文件推送至所述主库,以使所述主库通过同步脚本将所述代码文件同步至所述备库进行备份。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备执行权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行权利要求1至7中的任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211224034.XA CN115827316A (zh) | 2022-10-08 | 2022-10-08 | 数据备份方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211224034.XA CN115827316A (zh) | 2022-10-08 | 2022-10-08 | 数据备份方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115827316A true CN115827316A (zh) | 2023-03-21 |
Family
ID=85524351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211224034.XA Pending CN115827316A (zh) | 2022-10-08 | 2022-10-08 | 数据备份方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115827316A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116578437A (zh) * | 2023-07-07 | 2023-08-11 | 中国电信股份有限公司 | 数据管理方法、装置、计算机设备、存储介质和程序产品 |
-
2022
- 2022-10-08 CN CN202211224034.XA patent/CN115827316A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116578437A (zh) * | 2023-07-07 | 2023-08-11 | 中国电信股份有限公司 | 数据管理方法、装置、计算机设备、存储介质和程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110113407B (zh) | 小程序状态同步方法、设备和计算机存储介质 | |
CN111614490B (zh) | 基于顶级容器集群对托管容器集群的管理系统及方法 | |
CN109313634A (zh) | 用于单个文件的文件同步暂停 | |
JP2016529599A (ja) | コンテンツクリップボードの同期 | |
CN103180842A (zh) | 云计算系统和用于该云计算系统的数据同步方法 | |
US10310919B2 (en) | Dynamic queue alias | |
CN108810150B (zh) | 协同办公系统应用级灾备系统的数据复制方法 | |
CN114422343B (zh) | 业务配置方法、设备、系统及计算机可读存储介质 | |
CN112148798A (zh) | 应用于分布式系统的数据处理方法及装置 | |
CN109891849A (zh) | 高度可用且可靠的秘密分发基础设施 | |
US10855776B2 (en) | Method and device for managing sessions | |
CN112714158A (zh) | 事务处理方法、中继网络、跨链网关、系统、介质和设备 | |
CN115517009B (zh) | 集群管理方法、集群管理装置、存储介质与电子设备 | |
CN112256676A (zh) | 一种数据库迁移的方法、装置、设备和介质 | |
CN115827316A (zh) | 数据备份方法、装置、设备及存储介质 | |
JP2015506112A (ja) | 一時的障害中における第2場所へのリクエストのリダイレクト | |
CN111325552A (zh) | 数据处理方法及装置、电子设备、存储介质 | |
CN113259476B (zh) | 消息推送方法及系统 | |
CN113010498B (zh) | 一种数据同步方法、装置、计算机设备及存储介质 | |
CN109635039B (zh) | 多数据中心数据同步方法及系统 | |
EP4102360A1 (en) | Method and apparatus for starting up blockchain system, electronic device, and non-transitory computer-readable storage medium | |
CN111083192B (zh) | 数据共识方法、装置及电子设备 | |
CN102930368B (zh) | 容错外部应用服务器 | |
CN113761075A (zh) | 切换数据库的方法、装置、设备和计算机可读介质 | |
CN111596953A (zh) | 版本管理系统、开发数据传输控制方法及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |