另一个备份-不仅仅是脚本,比系统更容易

备份系统很多,但是如果服务的服务器分散在不同的区域和客户端,又需要使用操作系统进行管理,该怎么办?







下午好,哈伯

我叫娜塔莉亚。我是NPO Christa应用程序管理员小组的团队负责人。我们是我们公司一组项目的运营商。我们有一个非常特殊的情况:我们在公司的服务器和客户场所的服务器上安装和维护我们的软件。在这种情况下,无需备份整个服务器。仅“必需数据”很重要:DBMS和文件系统的各个目录。当然,客户拥有(或没有)自己的备份程序,并且经常提供某种外部存储以在其中存储备份。在这种情况下,创建备份后,我们将发送到外部存储。



有一段时间,出于备份目的,我们使用了一个bash脚本,但是随着选项的增加,该脚本的复杂性也成比例地增加,并且有一次我们需要“将其销毁,然后...”。



现成的解决方案因各种原因而无法工作:由于需要分散备份,必须在客户端本地存储备份,设置的复杂性,导入替换和访问限制。



在我们看来,编写自己的东西更容易。同时,我希望获得在接下来的N年中足以满足我们情况的东西,但可能会扩大范围。



问题条件如下:



  1. 基本备份实例是自治的,可以在本地工作
  2. 备份和日志始终存储在客户端网络中
  3. – «»
  4. Linux, ,
  5. ssh,
  6. ( ) ,


您可以看到我们在这里得到的内容:github.com/javister/krista-backup该

软件是用python3编写的;适用于Debian,Ubuntu,CentOS,AstraLinux 1.6。



该文档位于存储库的docs目录中。



系统使用的基本概念:

操作-一种实现一项基本操作的操作(数据库备份,目录备份,从目录A到目录B的传输等)。现有操作位于core / actions目录

任务中-一个任务,一组描述一个逻辑“备份任务”

时间表的操作-一个时间表,带有任务执行时间的可选指示的任务集



备份配置存储在yaml文件中;常规配置结构:



  • 通用设置
  • 操作部分:此服务器上使用的操作的描述
  • 时间表部分:所有任务(动作集)的描述,以及如果需要进行此类任务,则由官方进行发布的时间表


可以在此处找到配置示例。



应用程序当前可以执行的操作:



  • 支持我们的主要操作:通过pg_dump进行PostgreSQL备份,通过tar进行文件系统目录备份;外部存储操作;目录之间的rsync;轮换备份(删除旧副本)
  • 调用外部脚本
  • 手动执行单个任务



    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • 您可以在crontab中添加(或删除)单独的任务或整个计划



    /opt/KristaBackup/KristaBackup.py enable all
  • 根据备份结果生成触发文件。该功能与Zabbix一起用于监视备份非常有用
  • 可以在Webapi或Web模式下在后台工作



    /opt/KristaBackup/KristaBackup.py web start [--api]


两种模式之间的区别:webapi没有正确的Web界面,但是应用程序响应来自另一个实例的请求。对于Web模式,您需要安装flask和几个其他软件包,并且这在任何地方都是不可接受的,例如,在经过认证的AstraLinux SE中。



通过Web界面,您可以查看已连接服务器的备份状态和日志:“ Web实例”通过API向“备份实例”请求数据。访问网络需要授权,而不需要访问webapi。







错误传递的备份日志以彩色标记:警告-黄色,错误-红色。











如果管理员不需要参数备忘单,并且服务器操作系统是同类的,则可以编译文件并分发现成的软件包。



我们主要通过Ansible分发此实用程序,首先将其推广到一些最不重要的服务器,然后再对所有其他服务器进行测试。



结果,我们获得了一个紧凑的独立复制实用程序,该自动化实用程序适合即使没有经验的管理员也可以进行操作。对我们来说很方便-也许对您也有用吗?



All Articles