【摘要】企业Harbor服务的备份与还原方案。
【文章来源】:《Harbor进阶实战》公众号
本文已参与「开源摘星计划」,欢迎正在阅读的你加入。
活动链接:github.com/weopenproje…
数据是企业的生命,如何对数据进行备份就变得尤为重要了。 同样,企业的Harbor私有镜像仓库服务中,备份工作也是运维工程师必须会的一项技能了。
前言
本篇文章将从以下几个方面详细阐述Harbor备份还原中的相关问题:
- 需要备份哪些数据?
- 备份周期应该是多长时间?
- 数据丢失后,如何快速恢复?
值得注意的是
,在Harbor的版本升级操作中,也需要先进行备份后再进行升级,防止升级失败后可以回滚到之前的状态!
环境说明
本文以Harbor安装在/app/harbor为例,数据目录、用户名、密码均以默认的方式,请根据自己实际的环境进行修改。
注意事项
在备份时请保持数据的权限不会改变,否则在恢复数据后无法启动Harbor,而且日志里同时会有文件权限相关的错误信息,这极有可能就是备份数据的文件权限不正确导致的。
Harbor中的数据
Harbor 的数据可分为几类:静态数据、动态数据;
1.1 静态数据
静态数据就是Harbor中不会变化的数据,该类数据仅需要全量备份一次即可
。
包括以下几部分:
- 1)在Harbor 安装期间通过配置文件生成的数据,主要是Harbor组件所依赖的配置文件和环境变量。这些数据通常在Harbor安装目录的
common
目录下,在Harbor各组件启动时会被挂载到对应的容器中。虽然临时数据对服务的顺利运行至关重要,但是安装程序每次都会读取 Harbor 配置文件重新生成一份临时数据,所以我们仅需备份配置文件即可,不必将整个 common 目录全部备份。 - 2)证书文件,如果是使用https的Harbor服务,将制作的证书文件存放在安装目录的ssl下(手动创建),建议阅读:《cfssl工具为Harbor颁发https证书》
- 3)在Harbor的日常维护中,获取镜像清单的
脚本
等也可进行备份。为方便对数据进行管理,该类数据属于“静态”数据,并不会再变化,建议放在Harbor的安装目录中(本处harbor安装在/app/harbor下)。
简单点就是:把Harbor的安装目录全量备份一次就可以了;
1.2 动态数据
所谓动态数据,就是在Harbor运行过程中生成的各种数据,包括数据库、缓存、镜像文件等;
该类数据需要根据实际情况来进行周期性的备份,例如一周备份一次,并保留最近4个备份文件。
存放在数据目录配置项下(即配置文件中 data_volume
参数所配置的值),这些数据主要包括 Harbor 的数据库数据、Artifacts 数据、Redis 数据、Chart 数据,以及 Harbor 各个组件所依赖的运行时数据。
$ grep ^data_volume /app/harbor/harbor.yml
data_volume: /data
$ ls /data/
|-ca_download:存放用户访问Harbor时所需的CA。
|-cert:Harbor启动HTTPS服务时所需的证书和密钥。
|-chart_storage:存放Helm v2版本的Chart数据。
|-database:存放数据库的目录,Harbor、Clair和Notary数据库的数据都在此目录下。
|-job_logs:存放JobService的日志信息。
|-redis:存放Redis数据。
|-registry:存放OCI Artifacts数据(对于大部分用户来说是镜像数据)。
|-secret:存放Harbor内部组件通信所需的加密信息。
|-trivy-adapter:存放Trivy运行时相关的数据。
如果你的Harbor是《基于离线安装的高可用Harbor集群》,则需要单独对
PostgreSQL
、Redis
两种数据库进行单独的备份。
三、备份方式
建议将Harbor的数据备份到另外一台备份主机上,对于“静态数据”使用scp全量备份一次即可;而对于“动态类数据”可使用rsync
工具结合计划任务
来进行周期性的备份。
备份操作
4.1 创建备份目录
在备份主机(192.168.2.22)上创建备份目录来存放备份文件:
$ mkdir -p /data/harbor_backup_v1
4.2 备份Harbor安装目录
在Harbor服务主机上将Harbor的安装目录中的数据全量备份一次到备份主机上即可。
$ scp /app/harbor 192.168.2.22:/data/harbor_backup_v1/harbor
4.3 备份“动态数据”
使用rsync工具备份Harbor中/data/下的所有数据(配置文件中data_volume参数指定的目录)
$ yum install -y rsync #安装rsync
$ rsync --daemon
$ echo "/usr/bin/rsync --daemon">>/etc/rc.local
$ ps -aux |grep rsync #查看rsyncd进程
$ rsync --delete -av --partial /data/ 192.168.2.22:/data/harbor_backup_v1/
Harbor的恢复(还原)
使用之前备份的文件恢复到之前版本的Harbor。 我们都明白,线上服务总会有突发事件发生,面对火灾、地震、误删数据或者新版本有严重Bug等的场形,我们都会有恢复到之前的稳定运行版本的需求。下面就介绍如何恢复Harbor。
5.1 停止Harbor
如果Harbor还在运行,则需要先停止Harbor:
$ cd /app/harbor
$ docker-compose down
5.2 删除当前的Harbor目录:
$ cd /app/
$ rm -rf harbor
5.3 恢复之前版本的Harbor目录:
将原创备份主机上的安装目录备份文件拷贝过来:
scp 192.168.2.22:/data/harbor_backup_v1/harbor /app/harbor
如果备份文件是在本机:
$ mv /my_backup_dir/harbor harbor
5.4 恢复data目录
若data目录存在,则需要先删除它(或修改目录名):
$ rm -rf /data
$ scp 192.168.2.22:/data/harbor_backup_v1/data /data
5.5 重启Harbor
$ cd harbor
$ ./install.sh
$ docker-compose ps
然后查看各个组件的服务状态是否正常!