CN110109779A - 一种基于微服务进行数据恢复演练环境搭建的方法 - Google Patents
一种基于微服务进行数据恢复演练环境搭建的方法 Download PDFInfo
- Publication number
- CN110109779A CN110109779A CN201910588768.8A CN201910588768A CN110109779A CN 110109779 A CN110109779 A CN 110109779A CN 201910588768 A CN201910588768 A CN 201910588768A CN 110109779 A CN110109779 A CN 110109779A
- Authority
- CN
- China
- Prior art keywords
- data
- docker container
- docker
- mirror image
- container
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1464—Management of the backup or restore process for networked environments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于微服务进行数据恢复演练环境搭建的方法,其主要使用容器化的微服务去搭建数据库开发测试环境,快速实现数据恢复演练。同时,在客户端主机挂载外部数据卷,然后容器内数据库的数据目录通过微服务目录映射存放到挂载的外部数据卷中,从而将数据库数据与数据库应用程序隔离,实现数据持久化。本发明充分利用了容器化技术体积小巧,启动快速,高资源利用率与高隔离度的特点,通过镜像快速分发与部署,可快速搭建数据库开发测试环境进行数据恢复演练。无论部署在什么环境,数据库程序都能保持一致的运行效果,并且通过数据与数据库应用程序的隔离,实现数据在本地数据卷上的持久化。
Description
技术领域
本发明属于计算机技术领域,特别涉及一种基于微服务进行数据恢复演练环境搭建的方法。
背景技术
对于数据库开发或测试环境的搭建,业内传统的做法一般是在物理机或虚拟机(VMware)上安装操作系统以及对应的数据库应用软件。这样不仅非常耗时,而且数据库软件的安装过程中经常会遇到各种本地库的依赖和软件之间的冲突,解决起来相当麻烦。所以数据库开发测试或管理人员在进行数据恢复演练等操作的过程中,迫切的需要引入一种新方法,能够快速搭建起所需的各种不同数据库的运行环境。
近些年来诞生的微服务正是解决此问题的有效手段,它具有开发时间短、复杂度可控、独立部署、技术选型灵活、容错、扩展等众多优势。微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调和配合,为用户提供最终价值。一个大型复杂软件应用由一个或多个微服务组成,系统中的各个微服务可被独立部署,它们之间是松耦合的。每个服务运行在独立的进程中,服务与服务间采用轻量级的通信机制互相沟通。微服务的目的是有效的拆分应用,实现敏捷开发和部署。
同时,在测试以外的需求下,直接使用微服务进行数据恢复演练时数据并不可靠。在单个服务出现异常时,数据得不到及时有效的保存和恢复。所以,为了确保数据的持久化,需要引入一种数据持久化方法,该方法需要将服务内的数据与可靠的外部环境相关联。同时,在服务切换时,尽量做到业务数据的不中断。本方案基于此目标,整合出一套通过微服务进行数据恢复演练环境搭建的方法。
发明内容
发明目的:本发明针对现有技术存在的问题,提供一种能够及时有效的对数据进行保存和恢复的基于微服务进行数据恢复演练环境搭建的方法。
技术方案:为实现上述目的,本发明提供了一种基于微服务进行数据恢复演练环境搭建的方法,包括以下步骤:
步骤1:在客户端主机上对Docker容器进行初始化操作;
步骤2:客户端主机从远程服务器的本地仓库上拉取镜像;
步骤3:查询拉取镜像子进程的状态;如果拉取镜像子进程结束,则表示镜像拉取完成,继续执行步骤4;如果拉取镜像子进程没有结束,则隔一段设定的时间继续查询拉取镜像子进程的状态;
步骤4:查询镜像是否拉取成功;镜像拉取结束后检查本地是否已存在此镜像,若不存在说明镜像拉取失败,退出主程序;若镜像存在则说明镜像拉取成功,继续执行步骤5;
步骤5:挂载外部数据卷到客户端主机的目录下;
步骤6:生成Docker容器并启动Docker容器;
步骤7:查询Docker容器状态;启动Docker容器后根据Docker容器的ID查询Docker容器的运行状态;若Docker容器状态为已退出,说明Docker容器运行出错,此时卸载外部数据卷并退出主程序;若Docker容器状态为运行中,则执行步骤8;
步骤8:进入Docker容器执行数据库的数据恢复演练操作;如果在执行数据恢复演练操作过程中Docker容器停止工作,则进入步骤9的操作;如果完成了数据库的操作,则进入步骤10的操作;
步骤9:Docker容器停止工作后被程序自动删除;自动选择一个新的Docker容器,重复步骤1~步骤8的操作;
步骤10:Docker容器停止工作后被程序自动删除;
步骤11:卸载外部数据卷,结束操作。
其中,所述步骤1中的所述初始化操作包括:这个接口用于Docker连接的初始化工作;Docker容器中的进程通过绑定的/var/run/docker.sock文件与Docker守护进程通信,执行各种管理操作。
进一步,所述步骤6中启动Docker容器的方法为:先进行客户端主机与Docker容器的端口映射和卷映射;Docker容器启动成功后返回这个Docker容器的ID;其中客户端主机与Docker容器的卷映射是将Docker容器内的目录映射到外部客户端主机挂载的数据卷上,模式为可读写。
工作原理:本发明使用容器化的微服务去搭建数据库开发测试环境,快速实现数据恢复演练。同时,在客户端主机挂载外部数据卷,然后容器内数据库的数据目录通过微服务目录映射存放到挂载的外部数据卷中,这样可以在Docker容器内直接共享和重用数据卷,也可以直接对数据卷里的内容进行修改,即使容器被删除,此数据卷也会一直存在。从而数据就不再是应用程序的一部分,而是独立于应用的管理和控制,能够进行独立发展。如果Docker容器出现问题停止服务,或者被删除,或者Docker容器内的数据库程序瘫痪,数据库管理员可以立刻启动一个新的Docker容器,数据会拷贝到新初始化的数据卷中,确保服务的连续性。在数据量庞大时,我们也可以对数据库进行进一步的拆分,每一部分运行在单独的容器中,保证局部数据读写的性能;采用这样的方法将数据库数据与数据库应用程序隔离,实现数据持久化,在服务切换时,做到业务数据不中断。
有益效果:与现有技术相比,本发明充分利用了容器化技术体积小巧,启动快速,高资源利用率与高隔离度的特点,通过镜像快速分发与部署,可快速搭建数据库开发测试环境进行数据恢复演练。无论部署在什么环境,数据库程序都能保持一致的运行效果,并且通过数据与数据库应用程序的隔离,实现数据在本地数据卷上的持久化。
附图说明
图1为本发明的工作流程图。
具体实施方式
下面结合附图对本发明做更进一步的解释。
本实施例基于主流Linux系统,如rpm系列的RedHat/CentOS,采用Docker容器技术构建数据库的微服务运行环境。其主要由服务端和客户端两大部分组成:包括二步,第一步是在服务器上搭建Docker私有仓库,将打包了全部所需微服务的镜像上传到此仓库;第二步是在客户端主机上启动运行Docker容器,建立数据恢复演练环境。
在服务器上搭建Docker私有仓库的流程如下:
步骤11:准备Docker仓库镜像,可以从Docker Hub拉取;
步骤12:启动Docker仓库容器,Docker仓库容器默认使用服务器的5000端口;
步骤13:将包含数据恢复演练环境的Docker镜像上传到私有仓库。
为了简化结构和操作,在客户端使用Python语言提供Docker的API(应用程序编程接口)。如图1所示,在客户端主机上启动运行Docker容器,建立数据恢复演练环境包括以下步骤:
步骤201:在客户端主机上对Docker容器进行初始化操作;
client =docker.DockerClient(base_url='unix://var/run/docker.sock');
Python语言提供Docker的API用于Docker连接的初始化工作。通过绑定的/var/run/docker.sock文件与Docker守护进程通信,执行各种管理操作。其中,client表示客户端主机,docker表示被操作对象,DockerClient为被操作对象使用的方法名称,base_url为链接名称。
步骤202:客户端主机从远程服务器的本地仓库上拉取镜像;
client.images.pull('10.0.xx.xx:5000/mysql-centos, tag='5r6');其中10.0.xx.xx为远程服务器的IP地址,mysql-centos为镜像的名称,5r6为镜像的tag(标签),主要表示客户端端拉取了一个打包了CentOS系统和MySQL数据库这两个微服务的Dcoker镜像。
此命令执行后会返回拉取镜像子进程的ID给主程序,供后续的查询操作使用。
步骤203:查询拉取镜像子进程的状态;因为每次拉取镜像需要等待一段时间,主程序获取拉取镜像子进程的ID后,会每隔一段设定时间查询此进程的状态。若发现进程结束,则表明镜像拉取完成,继续执行后续的操作。其中设定的时间根据产品的构架需求来设定。其中查询进程状态的间隔时间的设定是根据产品构架决定的。
步骤204:查询镜像是否拉取成功;镜像拉取结束后检查本地是否已存在此镜像,若不存在说明镜像拉取失败,退出主程序,若镜像存在则说明镜像拉取成功,继续执行后续的操作。
步骤205:挂载外部数据卷到客户端主机的目录下;即执行linux的mount指令。其中外部数据卷即为一个稳定的逻辑空间。
步骤206:生成Docker容器并启动Docker容器;其中,启动Docker容器的方法为:先进行客户端主机与Docker容器的端口映射和卷映射;Docker容器启动成功后返回这个Docker容器的ID;其中客户端主机与Docker容器的卷映射是将Docker容器内的目录映射到外部客户端主机挂载的数据卷上,模式为可读写。具体操作如下:
container = client.containers.run(image='mysql-centos',
ports= {'3306/tcp':3306},
volums={'/obmnt/c-xxxxxxxx':{'bind':'/obmnt/c-xxxxxxxx', 'mode':'rw'}},
command='/usr/sbin/sshd -D', tty=True, auto_remove=True, privileged=True)
container_id = container.short_id。
其中,container为Docker容器的名称,“container = client.containers.run(image='mysql-centos',”表示生成Docker容器container。
“ports= {'3306/tcp':33306}”表示将容器内的3306端口映射到外部客户端主机的3306端口上。
“volums={'/obmnt/c-xxxxxxxx':{'bind':'/obmnt/c-xxxxxxxx','mode':'rw'}},”表示将容器内的目录/obmnt/c-xxxxxxxx映射到外部客户端主机挂载的数据卷/obmnt/c-xxxxxxxx上,模式为可读写。
“command='/usr/sbin/sshd -D', tty=True, auto_remove=True, privileged=True)”表示启动容器时执行指令/usr/sbin/sshd -D',tty=True表示分配了一个终端,auto_remove=True表示启用自动删除,privileged=True表示赋予容器高级权限。
“container_id = container.short_id”表示Docker容器启动成功返回此Docker容器的ID:container_id,后续对容器的操作都使用此ID。
步骤207:查询Docker容器状态;启动Docker容器后根据Docker容器的ID查询Docker容器的运行状态;若Docker容器状态为已退出,说明Docker容器运行出错,此时卸载外部数据卷并退出主程序;若Docker容器状态为运行中,则执行步骤208;
步骤208:进入Docker容器执行数据库的数据恢复演练操作;如果在执行数据恢复演练操作过程中Docker容器停止工作,则进入步骤209的操作;如果完成了数据库的操作,则进入步骤210的操作;
container.exec_run(command),其中command为数据库恢复演练的操作命令,跟在一台物理机或虚拟机上的数据库操作完全一样。
步骤209:Docker容器停止工作后被程序自动删除;自动选择一个新的Docker容器,重复步骤206~步骤208的操作。
步骤210:Docker容器停止工作后被程序自动删除;容器停止后被程序自动删除,由于数据卷和容器的生命周期完全独立,客户端主机数据卷中的内容依然被保留了下来。
步骤211:卸载外部数据卷,结束操作。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (3)
1.一种基于微服务进行数据恢复演练环境搭建的方法,其特征在于:包括以下步骤:
步骤1:在客户端主机上对Docker容器进行初始化操作;
步骤2:客户端主机从远程服务器的本地仓库上拉取数据库镜像;
步骤3:查询拉取镜像子进程的状态;如果拉取镜像子进程结束,则表示镜像拉取完成,继续执行步骤4;如果拉取镜像子进程没有结束,则隔一段设定的时间继续查询拉取镜像子进程的状态;
步骤4:查询镜像是否拉取成功;镜像拉取结束后检查客户端主机是否已存在此镜像,若不存在说明镜像拉取失败,退出主程序;若镜像存在则说明镜像拉取成功,继续执行步骤5;
步骤5:挂载外部数据卷到客户端主机的目录下;
步骤6:生成Docker容器并启动Docker容器;
步骤7:查询Docker容器状态;启动Docker容器后根据Docker容器的ID查询Docker容器的运行状态;若Docker容器状态为已退出,说明Docker容器运行出错,此时卸载外部数据卷并退出主程序;若Docker容器状态为运行中,则执行步骤8;
步骤8:进入Docker容器执行数据库的数据恢复演练操作;如果在执行数据恢复演练操作过程中Docker容器停止工作,则进入步骤9的操作;如果完成了数据库的操作,则进入步骤10的操作;
步骤9:Docker容器停止工作后被程序自动删除;自动生成一个新的Docker容器,重复步骤6~步骤8的操作;
步骤10:Docker容器停止工作后被程序自动删除;
步骤11:客户端主机卸载外部数据卷,结束操作。
2.根据权利要求1所述的基于微服务进行数据恢复演练环境搭建的方法,其特征在于:所述步骤1中的所述初始化操作包括:Docker容器中的进程通过绑定的/var/run/docker.sock文件与Docker守护进程通信。
3.根据权利要求1所述的基于微服务进行数据恢复演练环境搭建的方法,其特征在于:所述步骤6中启动Docker容器的方法为:先进行客户端主机与Docker容器的端口映射和卷映射;Docker容器启动成功后执行接口调用返回这个Docker容器的ID;其中客户端主机与Docker容器的卷映射是将Docker容器内的目录映射到客户端主机挂载的外部数据卷上,模式为可读写。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910588768.8A CN110109779A (zh) | 2019-07-02 | 2019-07-02 | 一种基于微服务进行数据恢复演练环境搭建的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910588768.8A CN110109779A (zh) | 2019-07-02 | 2019-07-02 | 一种基于微服务进行数据恢复演练环境搭建的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110109779A true CN110109779A (zh) | 2019-08-09 |
Family
ID=67495909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910588768.8A Pending CN110109779A (zh) | 2019-07-02 | 2019-07-02 | 一种基于微服务进行数据恢复演练环境搭建的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110109779A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732411A (zh) * | 2021-01-27 | 2021-04-30 | 济南浪潮高新科技投资发展有限公司 | 一种基于云边端架构的云端推理模型下发至边端的方法 |
CN113220638A (zh) * | 2021-07-08 | 2021-08-06 | 浩鲸云计算科技股份有限公司 | 一种利用容器技术建立数据库快照的方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105681420A (zh) * | 2016-01-18 | 2016-06-15 | 浪潮集团有限公司 | 一种基于Docker实现交换机操作系统备份的方法 |
US20170235649A1 (en) * | 2015-12-14 | 2017-08-17 | Jignesh Kaushik Shah | Container aware networked data layer |
CN107526626A (zh) * | 2017-08-24 | 2017-12-29 | 武汉大学 | 一种基于CRIU的Docker容器热迁移方法及系统 |
CN108762882A (zh) * | 2018-04-02 | 2018-11-06 | 杭州朗和科技有限公司 | 一种Docker容器的迁移方法、迁移装置、介质和计算设备 |
CN109274722A (zh) * | 2018-08-24 | 2019-01-25 | 北京北信源信息安全技术有限公司 | 数据共享方法、装置以及电子设备 |
-
2019
- 2019-07-02 CN CN201910588768.8A patent/CN110109779A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170235649A1 (en) * | 2015-12-14 | 2017-08-17 | Jignesh Kaushik Shah | Container aware networked data layer |
CN105681420A (zh) * | 2016-01-18 | 2016-06-15 | 浪潮集团有限公司 | 一种基于Docker实现交换机操作系统备份的方法 |
CN107526626A (zh) * | 2017-08-24 | 2017-12-29 | 武汉大学 | 一种基于CRIU的Docker容器热迁移方法及系统 |
CN108762882A (zh) * | 2018-04-02 | 2018-11-06 | 杭州朗和科技有限公司 | 一种Docker容器的迁移方法、迁移装置、介质和计算设备 |
CN109274722A (zh) * | 2018-08-24 | 2019-01-25 | 北京北信源信息安全技术有限公司 | 数据共享方法、装置以及电子设备 |
Non-Patent Citations (2)
Title |
---|
SQTCE: "利用docker还原数据库", 《HTTPS://BLOG.51CTO.COM/536410/2176325?SOURCE=DRA》 * |
赵旭 等: "基于Docker 容器动态迁移数据分流框架", 《西华师范大学学报( 自然科学版)》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732411A (zh) * | 2021-01-27 | 2021-04-30 | 济南浪潮高新科技投资发展有限公司 | 一种基于云边端架构的云端推理模型下发至边端的方法 |
CN113220638A (zh) * | 2021-07-08 | 2021-08-06 | 浩鲸云计算科技股份有限公司 | 一种利用容器技术建立数据库快照的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111522628B (zh) | 一种基于OpenStack的Kubernetes集群搭建部署方法、架构及存储介质 | |
CN107526626B (zh) | 一种基于CRIU的Docker容器热迁移方法及系统 | |
US20210208974A1 (en) | Container-Based Application Data Protection Method and System | |
US7000235B2 (en) | Method and apparatus for managing data services in a distributed computer system | |
JP5183802B2 (ja) | 仮想化された計算機システム用の分散仮想スイッチ | |
US20220326941A1 (en) | Techniques for updating edge devices | |
US8949364B2 (en) | Apparatus, method and system for rapid delivery of distributed applications | |
US20020103889A1 (en) | Virtual storage layer approach for dynamically associating computer storage with processing hosts | |
US8103842B2 (en) | Data backup system and method for virtual infrastructure | |
CN106790483A (zh) | 基于容器技术的Hadoop集群系统及快速构建方法 | |
US8103721B2 (en) | Computing system and method of changing I/O configuration thereof | |
US20070258388A1 (en) | Virtual server cloning | |
US20130212580A1 (en) | System and method for managing a virtual machine environment | |
CN115495409A (zh) | 用于经由云交换促进容器间通信的方法和系统 | |
US20110208928A1 (en) | System and Method for Improving Performance of Data Container Backups | |
US20070067435A1 (en) | Virtual data center that allocates and manages system resources across multiple nodes | |
CN109831500A (zh) | Kubernetes集群中配置文件与Pod的同步方法 | |
US8230416B2 (en) | System, method and article of manufacture for using shadow installations of software modules during distributed system upgrade | |
US20210374010A1 (en) | Emulating high-frequency application-consistent snapshots by forming restore point data sets based on remote site replay of i/o commands | |
US20100058319A1 (en) | Agile deployment of server | |
CN110347483B (zh) | 物理机到虚拟机迁移方法、装置及存储介质 | |
TW200525948A (en) | Apparatus and method for managing and transporting virtual disks over a network to networked stations | |
CN112882726B (zh) | 基于Hadoop和Docker的环境系统的部署方法 | |
US11894983B2 (en) | Simulation and testing of infrastructure as a service scale using a container orchestration engine | |
CN110109779A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190809 |
|
RJ01 | Rejection of invention patent application after publication |