一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种MongoDB数据库备份、恢复方法与流程

2022-02-20 20:43:27 来源:中国专利 TAG:

一种mongodb数据库备份、恢复方法
技术领域
1.本发明涉及分布式数据库及云服务领域,尤其涉及一种mongodb数据库备份、恢复方法。


背景技术:

2.mongodb作为一款开源的文档数据库,也是一款具有高可用性、高性能的分布式数据库。mongodb由c 语言编写,充分利用了内存计算的优势,兼具了较强的扩展性和稳定性。mongodb有别于关系型数据库和非关系型数据库,它是一个介于二者之间的数据库,数据结构以key-value键值对的方式将数据存储为文档,易于分散的数据使得数据库更易进行扩展。mongodb适用于关系相对简单、存储数据量相对较大的场景。得益于部署快捷、使用简易的特点,mongodb正被越来越多的用户广泛使用。
3.针对于数据库备份与恢复的问题,percona backup for mongodb(pbm)作为一项分布式、低影响的解决方案,能够对mongodb集群进行一致备份与恢复等操作,能够应对部分或全部数据丢失的特殊情况,将mongodb数据库还原至最佳的可用备份快照,在容灾容错方面表现良好。目前pbm支持的存储方式主要包括以下几种:microsoft azure blob存储、filesystem存储、s3兼容存储。
4.目前采用filesystem的方式是将备份文件和其他数据库信息以压缩文件的方式存储在本地中,恢复时也同样是通过解压缩本地文件并读取的方式进行备份文件的还原。使用filesystem的存储方式,存储数据量不断增大后,存储与读取备份文件的速度将受到影响。


技术实现要素:

5.为了解决以上技术问题,本发明提供了一种mongodb数据库备份、恢复方法,对于无法对mongodb进行直接的远程对象存储的问题,提供了基于swift的存储方法,并对各个数据库节点进行重新部署,配置agent进程,通过命令行的方式进行备份与恢复。
6.本发明的技术方案是:
7.一种mongodb数据库备份、恢复方法,使用openstack swift进行远程存储,将mongodb中的备份文件与文件元信息数据上传至远端的swift服务端进行存储。
8.步骤如下:
9.(1)实现storage接口,新增swift备份、恢复功能;
10.(2)部署mongodb实例节点,建立mongodb集群;
11.(3)部署docker镜像,运行agent;
12.(4)修改配置文件,启用swift存储;
13.(5)执行命令进行数据备份,查看备份列表;
14.(6)读取备份列表,执行命令进行数据恢复。
15.进一步的,
16.实现storage接口,新增swift备份、恢复功能包括如下步骤:
17.1)通过实现storage接口的五个方法。
18.2)在备份、恢复功能的底层逻辑进行调用。
19.通过storage接口,调用save、sourcereader、filestat、list、delete五大方法,在底层逻辑中实现对文件的存储、读取、删除操作;在swift协议下,通过读取配置文件以持有swift连接信息进行远程操作,来重新实现这五个方法。
20.进一步的,
21.部署mongodb实例节点,建立mongodb集群包括如下步骤:
22.1)以副本集的搭建方式建立由单个主节点与两个从节点构成的mongodb集群;
23.2)记录节点信息,进行mongodb自定义数据库创建。
24.进一步的,
25.部署docker镜像,运行agent包括如下步骤:
26.1)制作持有可执行文件的docker镜像,上传至mongodb并使用;
27.2)配置url信息在主从节点分别启动agent。
28.进一步的,
29.修改配置文件,启用swift存储包括如下步骤:
30.1)指定多个参数,修改配置文件,使用config命令进行配置。
31.2)通过status命令验证配置是否正确。
32.进一步的,
33.执行命令进行数据备份,查看备份列表包括如下步骤:
34.1)配置验证正确后,使用backup命令备份;
35.2)使用list命令查看备份列表,使用delete-backup删除备份文件。
36.进一步的,
37.拉取备份列表,执行命令进行数据恢复包括如下步骤:
38.1)使用list命令查看可用的备份,以restore 备份文件名的形式进行恢复;
39.2)进行mongodb数据库进行恢复情况验证。
40.本发明的有益效果是
41.1)、能够有效简化mongodb数据库存储与恢复的流程,仅通过较少的命令行即可实现备份与恢复。
42.2)、使用远程swift服务端进行备份存储,能够减少本地磁盘io,提升存储速度与恢复速度。
43.3)、备份在远程swift服务端而非本地存储的方式能够保障数据的安全性,减少人为操作的影响。
附图说明
44.图1是本发明的工作流程示意图。
具体实施方式
45.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例
中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
46.swift与mongodb适配性很高,mongodb面向集合存储,存储对象类型的数据难度更低,通过远端存储备份并直接进行恢复的方式能够减少磁盘io,有效简化备份恢复的流程。
47.本发明提供了使用openstack swift进行远程存储的方法,将mongodb中的备份文件与文件元信息等数据上传至远端的swift服务端进行存储。swift是openstack开源云计算项目的子项目之一。swift存储相较于已有的filesystem等存储方式,在于非文件系统和实时数据存储,而是采用对象存储的方式,能够长期存储永久类型的静态数据,并且具备了更强的扩展性与可靠性。这种对于对象进行存储的方式,更利于数据的查询、更新等操作。并且swift的系统架构是完全对称的,swift各个节点对等能够有效降低运维成本。
48.具体的技术方案分为以下几部分:
49.1)实现storage接口,新增swift备份、恢复功能;
50.2)部署mongodb实例节点,保证主从同步;
51.3)部署docker镜像,运行agent;
52.4)执行命令进行数据备份,查看备份列表;
53.5)读取备份列表,执行命令进行数据恢复。
54.其中,
55.(1)实现storage接口,新增swift备份、恢复功能。通过storage接口,调用save、sourcereader、filestat、list、delete等五大方法,在底层逻辑中实现对文件的存储、读取、删除等操作。原有的filesystem本地存储、s3存储、azure存储等即是通过这样的方式实现备份、恢复等功能。因此在新的swift协议下,通过读取配置文件以持有swift连接信息进行远程操作,来重新实现这五个方法。storage接口如下:
[0056][0057]
save方法主要用于备份功能中,将备份文件上载至远程的swift服务端;sourcereader方法主要用于备份恢复功能中,将已上传的备份文件下载至mongodb实例中;filestat方法应用范围较广,可读取指定的远程swift服务端中的对象文件,并返回所读单个文件的信息,如遇到文件为空或不存在的场景,则会返回一个不为空并标记错误信息的error;list方法可以根据用户的指定前缀和后缀,列出远程swift服务端中符合条件的文件列表,作为一个文件信息的切片返回,值得注意的是,前后缀都可以进行省略;delete方法可用于删除远程swift服务端中指定文件名的对象文件。
[0058]
(2)部署mongodb实例节点,建立mongodb集群。按用户需求修改mongodb配置文件,以副本集的搭建方式建立由单个主节点与两个从节点构成的mongodb集群。记录三个mongodb实例节点的实例id与ip等信息,以用于在后续的configure命令时进行重构url等配置。在实例上通过mongo命令可进入到mongodb,通过use database_name命令进行自定义数据库的创建,并通过db.createcollection(name,options)进行集合的创建,以验证后续备份恢复的情况。mongodb主从实例间应保持通信,主实例接收所有的写操作,其他实例能够接收主实例的操作,保持主从实例的数据同步。若主节点发生宕机,该搭建方式也能够自主选举出新的主实例节点。
[0059]
(3)部署docker镜像,运行agent。在虚机环境中根据dockerfile制作持有pbm与pbm-agent可执行程序的镜像文件,并上传至mongodb实例进行拉取使用,在后续的命令行操作中将调用docker镜像中的可执行程序。在主节点与从节点分别启动agent,启动时需要对mongodb的url和mongodb的实例id以及端口号进行指定,确保agent能够连接到mongodb。其中agent是运行在mongodb集群内的每个节点上运行的进程,进行实际的备份与恢复操作。agent在启动后处于监听状态,当有新的命令行传入时解析命令并执行备份、恢复等操作。
[0060]
(4)修改配置文件,启用swift存储。在主从实例的agent全部启动后执行config命令进行配置,通过pmb-cli这个命令行程序,它指示着agent执行操作,最终将config命令所配置的信息写入到mongodb的一个名为pbmconfig的集合中。在配置过程中,需要注意的是应指定file参数,根据用户设置的配置文件本地路径,读取所需的配置选项。配置文件可以选择使用yaml文件、bson文件、json文件等,并且需要在文件中配置多个参数,如storageurl、令牌文件的存储路径、swift远端的文件存储路径以及swift中存储容器的信息,根据实际的用户存储需求配置account、container等参数。配置文件格式如下:
[0061][0062]
连接远程的swift服务端需要提供令牌进行验证,同时需要根据用户需求对storageurl进行配置,确认在swift中的存储位置。config命令执行结束后,会显示出配置文件中各配置项的信息。最后在配置结束后,使用status命令进行查询,能够查看到主从实例中agent的运行状态,所对应的实例id与ip地址是否对应正确,以及显示是否进行过备份、时间点恢复的备份情况等信息。
[0063]
(5)执行命令进行数据备份,查看备份列表。agent正确启动并使用config正确配置后,对当前时间状态下的mongodb数据库执行backup命令进行备份操作。backup命令首先
获取时间戳以进行备份文件命名,agent在监听状态下获取到backup命令,随后获取当前节点的信息与存储方法的信息,并且会在pbmbackups集合中查找当前环境下备份的元信息,以及进行确认当前节点为主节点或从节点、节点是否为单独的节点而非集群等判断。
[0064]
实现备份功能主要依赖于底层的save方法与filestat接口,save方法传入读取文件的接口,将读入的文件作为对象,以调用swift协议下的上传操作,在持有正确连接信息的情况下,backup命令最终将时间戳命名的备份文件上载至远程的swift服务端。一般情况下,backup命令会最终将以oplog(operation log,操作日志)和dump(mongodump,mongodb备份)为后缀的压缩文件进行存储,压缩文件的格式通常被指定为s2。需要注意的是,由于以上操作依赖于docker容器,因此需要添加挂载目录的参数,使得调用save、list等接口时能够实时读取目录下的token等。对于已存在的备份文件,可以用过delete-backup命令 备份文件名的方式进行删除。最后需要确认status命令查询到的备份文件是否为已完成状态,若备份已完成,其文件名后括号内会标明complete,并显示完成时间。如“2021-07-29t07:29:08z 1.78mb[complete:2021-07-29t07:29:30]”。
[0065]
(6)读取备份列表,执行命令进行数据恢复。使用list命令查看已备份的文件,调用backuplist函数在pbmbackups集合中进行查询。获取到如“2021-08-28t09:29:37z”等文件名组成的文件列表,可以在恢复前进入mongodb数据库对数据进行更改以对比验证后续的备份恢复情况。随后以restore 备份文件的方式进行数据恢复,restore命令首先会在pbmbackups集合中获取备份文件元信息,进行备份文件是否存在、备份文件状态是否为成功备份等判断,随后发送恢复命令的信息并写入pbmcmd集合,随后进行底层的备份恢复。恢复完成后,可进行mongodb数据库对比数据的恢复情况。
[0066]
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献