扫码阅读
手机扫码阅读

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

298 2023-09-23

本期摘要

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

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

作者

刘健 | 后端开发工程师

一位神秘的程序员~

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~

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247522997&idx=1&sn=14e05fa9f559c98405721cf53600aedf&chksm=c02fa113f758280593013b406e390f2ea2331dc8026e929b2ee292fada1443b037f8a3550e58#rd