大数跨境
0
0

云原生|速来!5分钟秒懂云原生容灾备份实践

云原生|速来!5分钟秒懂云原生容灾备份实践 AI实践工程院
2023-06-07
4
导读:有备份,心不慌~

本期摘要

随着云计算技术的不断发展,云原生架构已成为越来越多企业的首选。然而,云原生架构也面临着容灾备份的挑战。


本文将介绍云原生容灾备份的实践方法及具体步骤

 作者 

刘健 | 后端开发工程师

一位神秘的程序员~



01

需备份的数据


kubernetes在运行中,通常会产生两类数据:


  1. kubernetes集群资源对象数据。

  2. 容器运行时产生的数据。


针对cloudUp项目而言,需要备份的数据如下:


  1. kubernetes集群资源对象数据:kubernetes集群资源对象数据,通常存储在集群控制平面连接的etcd中。所以只需要备份etcd中的数据就可以了。


  2. 容器运行时产生的数据:cloudUp容器在运行过程中,会产生以下数据。


  • Postgres:cloudUp portal端使用的关系数据库。用于存储portal的用户数据,配置数据等。


  • Mongo:cloudUp devops端使用的nosql数据库。用于存储devops端的系统配置数据,任务数据等。


  • Mysql:cloudUp devops端使用的关系数据库。用于存储devops的用户数据,及用户登录数据等。


  • minio:cloudUp devops端使用的对象数据库。用于存储devops运行时产生的日志数据等。



02

在云航项目中使用



//backup微服务


响应⽤户的备份策略,并创建备份任务。备份策略有:即时备份和定时备份。 


触发备份任务时,微服务中,创建备份任务pod。并监听pod的运行状态。记录任务执行结果到数据库中。 


//备份任务


备份任务使用独立的pod运行。备份任务采用命令行的方式,接收备份参数并进行相应处理。 


备份任务可以将cloudUp中的数据备份到minio,sftp和独立数据卷中,也可以在备份的数据中选择某⼀个进行恢复。



03

备份任务说明


备份恢复采用单独工具的方式独立开发。可以通过Pod的方式与cloudUpi配套使用,也可以某个独立的环境中使用。

某个独立的环境中使用。


某个独⽴的环境中使⽤。



//备份/恢复kubernetes


对于kuberentes,只需要对etcd进行备份与恢复。etcd官方提供了snapshot的方式进行数据备份与恢复。本次也是依赖于官方提供的备份方式进行备份与恢复。


  • 备份etcd

etcd的备份使用官方提供的etcdctl工具。


获取工具并执行:在golang中,可以使用调用etcdutl依赖包go.etcd.io/etcd/etcdut L/v3中的snapshot..Save(的方法进行数据备份。



备份完成后,会根据传入的文件名(dbpath),生成备份文件。根据传入的参数,选择将备份文件打包并传入到stp,minio或数据卷中。


  • 恢复etcd

etcd的恢复使用官方提供的etcdctl.工具。


获取工具并执行:在golang中,可以使用调用etcdutl依赖包go,etcd.io/etcd/etcdutl/v3中的snapshot.Restore(方法进行数据恢复。



etcd的恢复,是生成一个新的etcd的数据目录,然后需要手动将新后动的etcd数据目录,替换成生成的数据目录


//备份恢复portal


portal需要备份和恢复的有postgreso。


  • 备份bostgres

postgres的备份采用官方提供的pg dump.工具。


获取pg_dump工具:pg_dump工具是postgres自带,并依赖于postgres环境运行。故采用portal使用的对应版本的oostgres作为基础镜像时,就可以使用此工具。


执行pg_dump工具:在golang中使用exec.Command方法后动pg_dump工具



  • 恢复postgres

使用对应的sqldriveri连接到新的postgres数据库。然后执行需要恢复到sql语句。



//备份恢复devops


备份和恢复devops:涉及到mongo,minio和mysql


  • 备份mongo

mongo备份使用官方提供的MongoDump工具。


获取工具并执行:在golang中,可以使用调用依赖包github.com/mongodb/mongo-tools/mongodump中的MongoDump.Dump()方法进行数据备份。



  • 恢复mongo

mongol的恢复使用了官方提供的MongoRestore工具。


获取工具并执行:在golang中,可以使用调用依赖包github,com/mongodb/mongo-tools/mongorestore中的MongoRestore.Restore()方法进行数据恢复



  • 备份minio

minio的备份,先获取一个桶下的所有object,然后逐一获取object并打包成一个统一的备份文件。



  • 恢复minio

minio的恢复,将备份的objecti重新写入到minio的对应桶中。



  • 备份mysql

mysqli备份采用mysq驱动,执行sql语句的方式,从mysql数据库中查询并拼接成sql语句。



  • 恢复mysql

mysqlt恢复采用mysql驱动,执行备份sql语句的方式。



//备份数据存储


根据传入的参数,决定将数据存储到那个目标存储中心。cloudUp定义了三个存储中心。


Minio:传入的参数store-.minio-file有值时,将数据存储到minio中。


SFTP:传入的参数store-sftp-file有值时,将数据存储到sftp中。


volume:传入的参数store-volume-file有值时,将数据存储到volume中。




本次分享就到这里啦~



Hello~

这里是神州数码云基地
编程大法,技术前沿,尽在其中
超多原创技术干货持续输出ing~


想要第一时间获取
超硬技术干货
快快点击关注+设为星标


拜托拜托啦

这对“我们”都很重要哦~


- END -



往期精选




云原生丨Kubernetes Operator测试实例




云原生丨Kubernetes Operator在项目中的开发应用




云原生丨Packer插件开发在项目中如何应用?



了解云基地,就现在!



【声明】内容源于网络
0
0
AI实践工程院
我们致力于用数字技术重构企业价值,助力企业实现数字化转型升级。
内容 434
粉丝 0
AI实践工程院 我们致力于用数字技术重构企业价值,助力企业实现数字化转型升级。
总阅读278
粉丝0
内容434