备份对象
-
关系型数据库
-
非关系型数据库
-
业务代码和配置
-
中间件配置
-
系统配置
-
各后台配置
-
各产品使用文档
-
代码库
-
日志
备份方式
-
定时任务
-
脚本工具
-
调度平台
-
通知系统
备份特性
-
异地备份
-
实时备份
-
周期性备份
-
定时备份
-
保留时长
实践方法
本文以理论为主,具体的实际操作还要根据自身情况制定计划
关系型数据库
mysql,postgre此类的关系型数据库可以购买一台其他地区的云主机,做一个从库,实现异地实时的数据备份。然后通过定时任务查询该从库,定期dump一份数据
如果是云上的数据库,都会有自动的备份(一般最多7天),可以调用公有云提供的api,将备份好的数据先下载,然后做一下同步到异地
非关系数据库
redis缓存型数据库,可以直接备份aof文件,也可以在 其他地区采购一台云主机,做一个从节点,实现异地实时的数据备份。再通过配合定时任务备份aof文件
mongodb数据库,需要使用自带的工具mongodump做定时备份,然后采购一台其他地区云主机,使用定时任务,周期性的把数据同步过去
如果是云上的非关系型数据库,同样的公有云也有备份的(一般最多7天),可以调用公有云提供的api,将备份好的数据先下载,然后做一下同步到异地,
日志文件
这里的日志文件包括了访问日志,操作日志,管理日志,错误日志,业务日志等。
可以将这些日志采集到自建立的日志中心,比如elasticsearch搭建的日志中心,或者公有云提供的日志服务
工具方面可以采用filebeat,logstash,等开源工具,也可以采用公有云提供的采集工具
将这些日志采集到日志中心后,基本上就可以实现实时的日志备份了
配置文件
配置文件种类比较多,像系统上的/etc配置,还有各业务的项目配置等,可能会因为历史原因,操作系统不同,业务代码各框架也不同,所以只能针对性的 进行备份。
这里比较推荐的是使用开源定时任务工具来做,比如go语言写的gocron,传送门: github.com/ouqiang/goc… 支持shell脚本,可视化,失败重试,失败通知等,完全可以满足要求
实现方法是写好备份脚本,然后买好其他地区云主机,通过gocron来调度,实现周期性异地备份
以下一个简单的备份脚本demo
#!/bin/bash
#声明环境
export PATH=$PATH
#定义一个当前日期变量
DATE=`/bin/date +%Y%m%d`
#创建每日备份目录
ssh -i .ssh/jpbak jpbak@IP "mkdir ${DATE}"
#每日定期将nginx配置,做异地备份
scp -i .ssh/jpbak -r /data/app/nginx jpbak@IP:/home/jpbak/${DATE}/
#每日定期将系统配置,做异地备份
scp -i .ssh/jpbak -r /etc jpbak@IP:/home/jpbak/${DATE}/
代码库和文档
代码库备份安全要求比较高,可能需要做同城多份,异地一份这样处理,在实现代码库高可用的情况下,再做每日定时备份,具体方法依 使用的代码库而不同。但主要还是将备份文件打包加密 直另一区域
文档备份安全要求也比较高,和代码库一样涉及到公司的核心,所以在备份时需要采用加密,物理隔离等方式来实现
保留时长
日志文件一般6个月以上既可,重要的需要保存2年以上,业务配置和系统配置 需要分版本来做,制定几个周期版本可供在灾难时恢复既可