备份和还原
本主题介绍 Paragon Automation 中可用的备份和还原功能。尽管 Paragon Automation 是基于 GUI 的应用程序,但备份和还原操作是通过 Paragon Insights cMGD CLI 管理的。Postgres 是微服务的主要持久存储数据库。备份文件保存在群集节点上的本地持久卷中。备份过程可以在微服务运行时执行,不会影响群集的操作。但是,对于还原过程,微服务将停止,并且在还原数据库之前群集无法正常运行。
目前,您无法自定义选择要备份和还原的应用程序。您只能备份和恢复每个组件的一组预配置和固定的应用程序和管理设置,如 表 1 中所列。
设备 |
警报/警报设置 |
管理员组 |
主题 |
绘图设置 |
用户定义的操作和功能 |
剧本 |
摘要配置文件 |
审核日志 |
设备组 |
引入设置 |
拓扑筛选器配置 |
网络组 |
SNMP 代理配置 |
探路者设置 |
通知设置 |
IAM 设置 |
LSP 策略和配置文件 |
保留策略 |
工作流程 |
报告生成设置(目标、报告和计划程序设置) |
备份过程具有以下限制:
-
遥测数据 - 默认情况下,不会备份从设备捕获的数据。必须手动备份遥测数据。
更多信息,请参见 备份与恢复 TSDB。
-
瞬态数据和日志记录数据 - 不会备份正在处理的数据和过期事件。例如:
-
生成的警报和警报
-
未提交的配置更改
-
大多数应用程序日志
-
-
非 Paragon Automation 配置 — 将不会备份在 Paragon Automation 支持的第三方服务上完成的配置。例如:
-
LDAP 用户详细信息
-
-
拓扑摄取配置 - 不会备份与 BGP-LS 路由器对等以获取拓扑信息的 cRPD 配置。这必须根据需要再次手动重新配置。有关详细信息,请参阅 修改 cRPD 配置。
您可以使用通过 Kubernetes 作业调用的容器化脚本来实施备份和还原过程。
您可以使用 备份配置中所述的说明手动备份群集。您还可以使用备份脚本按照 备份和还原脚本中所述的说明备份群集。
同样,您可以使用 还原配置中所述的说明手动还原备份的配置。您还可以使用还原脚本,按照 备份和还原脚本中所述的说明还原备份的配置。
对于 Paragon Automation 23.2 版,只有在对全新 23.2 版安装执行虚拟备份后,才能从 Paragon Automation 的早期版本中恢复备份配置。要在 23.2 版群集上使用还原操作,我们建议您:
-
将当前的 Paragon Automation 集群升级到 23.1 版。
-
备份 23.1 版配置。
-
安装 23.2 版群集。
备份 23.2 群集。
将 23.1 版配置复制到备份的 23.2 版位置。
-
恢复复制的备份配置。
备份配置
大多数 Paragon Automation 应用程序中的数据主要存储在 Postgres 中。备份配置时,将备份系统确定的预定义数据。执行备份时,操作系统和微服务不受影响。在备份运行时,您可以继续使用 Paragon Automation。您将使用由 Paragon Insights(以前称为 Healthbot)管理的管理守护程序 (MGD) CLI 来执行备份。
要备份当前的 Paragon Automation 配置,请执行以下操作:
常用的 kubectl 命令查看备份详细信息
若要查看备份的状态或备份文件的位置,或查看有关备份文件的详细信息,请使用以下命令。
-
备份作业存在于通用命名空间中,并使用
common=db-backup
标签。要查看所有备份作业,请执行以下操作:root@primary-node:~# kubectl get -n common jobs -l common=db-backup NAME COMPLETIONS DURATION AGE db-backup-hello-world 1/1 3m11s 2d20h
-
要查看特定 Kubernetes 作业的更多详细信息,请执行以下操作:
root@primary-node:~# kubectl describe -n common jobs/db-backup-hello-world
-
要查看特定 Kubernetes 作业的日志,请执行以下操作:
root@primary-node:~# kubectl logs -n common --tail 50 jobs/db-backup-hello-world
-
要确定备份文件的位置,请执行以下操作:
root@primary-node:~# kubectl get -n common pvc db-backup-pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE db-backup-pvc Bound local-pv-cb20f386 145Gi RWO local-storage 3d3h
输出将指向本地持久卷。使用该持久卷确定存储备份文件的节点。
root@primary-node:~# kubectl describe -n common pv local-pv-cb20f386 Node Affinity: Required Terms: Term 0: kubernetes.io/hostname in [10.49.xxx.x2] Message: Source: Type: LocalVolume (a persistent volume backed by local storage on a node) Path: /export/local-volumes/pv*
要查看所有备份文件,请登录到节点并导航到备份文件夹的位置。
root@primary-node:~# ssh root@10.49.xxx.x2 root@10.49.xxx.x2:~# ls -l /export/local-volumes/pv*
若要查看常见的备份和还原失败方案,请参阅 常见备份和还原问题。
还原配置
您可以从之前备份的配置文件夹恢复 Paragon Automation 配置。还原操作会使用所有备份的配置信息重写数据库。不能有选择地还原数据库。执行还原操作时,会生成 Kubernetes 作业,这会停止受影响的微服务。作业将还原备份的配置并重新启动微服务。在恢复过程完成之前,Paragon Automation 将保持无法正常运行。
您无法同时运行多个还原作业,因为 Kubernetes 作业会在还原过程中停止微服务。此外,不能同时运行备份和还原过程。
强烈建议您在维护时段内还原配置,否则系统可能会进入不一致状态。
要将 Paragon Automation 配置恢复到之前备份的配置,请执行以下操作:
用于查看还原详细信息的常用 kubectl 命令
要查看还原过程的详细信息和状态,请使用以下命令:
-
还原作业存在于通用命名空间中并使用
common=db-restore
标签。要查看所有还原作业,请执行以下操作:root@primary-node:~# kubectl get -n common jobs -l common=db-restore NAME COMPLETIONS DURATION AGE db-restore-hello-world 0/1 20s 21s
-
要查看特定 Kubernetes 作业的更多详细信息,请执行以下操作:
root@primary-node:~# kubectl describe -n common jobs/db-restore-hello-world
-
要查看特定 Kubernetes 作业的日志,请执行以下操作:
root@primary-node:~# kubectl logs -n common --tail 50 jobs/db-restore-hello-world
若要查看常见的备份和还原失败方案,请参阅 常见备份和还原问题。
备份和还原脚本
您还可以使用 Paragon Automation 备份和还原脚本来简化备份和还原操作。本主题介绍备份和还原脚本操作以及有关脚本用法的注意事项。
备份脚本操作
备份脚本会自动备份当前配置。备份脚本的主要好处是,您可以将其作为具有所需频率的 cron 作业运行,以便计划定期备份。此外,备份脚本会创建可区分的带日期戳的备份文件夹,如果脚本在不同的日期运行,则不会覆盖这些文件夹。
要使用备份脚本备份配置,请执行以下操作:
-
登录到任何一个主节点。
-
执行备份脚本。
root@primary-node:~# data.sh --backup
该脚本运行备份作业来备份当前配置。将创建一个备份文件夹,并将其保存在其中一个群集节点上的本地持久卷中。文件夹名称采用 <name>-year_month_day 格式。群集节点中的文件夹包含所有备份的配置元数据。
该脚本还会在主节点的当前路径中创建同名文件夹。主节点中的备份文件夹包含在还原备份配置时使用的基本平台所需的 JSON 文件。
脚本运行时,将生成备份摘要并显示在屏幕上。摘要包含备份文件的节点和位置。例如:
===============================Backup Report================================ Name: db-backup-paa-2023-10-18 Namespace: common Selector: controller-uid=446d45fd-0a7e-4b21-94b1-02f079b11879 Labels: apps=db-backup common=db-backup id=paa-2023-10-18 Annotations: <none> Parallelism: 1 Completions: 1 Start Time: Wed, 18 Oct 2023 08:39:04 -0700 Completed At: Wed, 18 Oct 2023 08:39:23 -0700 Duration: 19s Pods Statuses: 0 Running / 1 Succeeded / 0 Failed Pod Template: Labels: app=db-backup common=db-backup controller-uid=446d45fd-0a7e-4b21-94b1-02f079b11879 id=paa-2023-10-18 job-name=db-backup-paa-2023-10-18 Service Account: db-backup Containers: db-backup: Image: localhost:5000/eng-registry.juniper.net/northstar-scm/northstar-containers/ns_dbinit:release-23-1-ge572e4b914 Port: <none> Host Port: <none> Command: /bin/sh Args: -c exec /entrypoint.sh --backup /paa-2023-10-18 Environment: PG_HOST: atom-db.common PG_PORT: 5432 PG_ADMIN_USER: <set to the key 'username' in secret 'atom.atom-db.credentials'> Optional: false PG_ADMIN_PASS: <set to the key 'password' in secret 'atom.atom-db.credentials'> Optional: false Mounts: /opt/northstar/data/backup from postgres-backup (rw) Volumes: postgres-backup: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: db-backup-pvc ReadOnly: false Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 47m job-controller Created pod: db-backup-paa-2023-10-18-95b8j Normal Completed 47m job-controller Job completed ============================================================================= Running EMS Backup. ===============================Get Backup file location====================== Name: local-pv-81fa4ecb Labels: <none> Annotations: pv.kubernetes.io/bound-by-controller: yes pv.kubernetes.io/provisioned-by: local-volume-provisioner-10.16.18.20-b73872bc-257c-4e82-b744-c6981bc3e131 Finalizers: [kubernetes.io/pv-protection] StorageClass: local-storage Status: Bound Claim: common/db-backup-pvc Reclaim Policy: Delete Access Modes: RWO VolumeMode: Filesystem Capacity: 149Gi Node Affinity: Required Terms: Term 0: kubernetes.io/hostname in [10.16.18.20] Message: Source: Type: LocalVolume (a persistent volume backed by local storage on a node) Path: /export/local-volumes/pv1 Events: <none> ============================================================================= Running Pathfinder Kubernetes Config Backup. ============================================================================= ...<snipped>... =============================Backup Completed================================
在此示例中,包含所有备份元数据的备份文件夹存储在 IP 地址为 10.16.18.20 的群集节点中的 /export/local-volumes/pv1 文件夹中。
还原脚本操作
还原脚本会自动还原备份的配置。
要使用还原脚本还原配置,请执行以下操作:
-
登录到任何一个主节点。
获取 MGD 容器名称:
#kubectl get po -n healthbot | grep mgd
执行恢复命令。
#kubectl exec -ti -n healthbot mgd-858f4b8c9-sttnh -- cli request system restore path /paa-2023-10-18
在通用命名空间中找到还原 Pod。
#kubectl get po -n common | grep restore db-restore-paa-2023-10-18-6znb8
检查还原容器中的日志。
#kubectl logs -n common db-restore-paa-2023-10-18-6znb8
跟踪日志并刷新,在日志末尾查找“还原完成”。
2023-10-18 16:01:11,127:DEBUG:pg_restore: creating ACL "metric_helpers.TABLE pg_stat_statements" 2023-10-18 16:01:11,129:DEBUG:pg_restore: creating ACL "metric_helpers.TABLE table_bloat" 2023-10-18 16:01:11,131:DEBUG:pg_restore: creating ACL "pg_catalog.TABLE pg_stat_activity" 2023-10-18 16:01:11,137:INFO:Restore complete 2023-10-18 16:01:11,388:INFO:Deleted secret ems/jobmanager-identitysrvcreds 2023-10-18 16:01:11,396:INFO:Deleted secret ems/devicemodel-connector-default-scope-id 2023-10-18 16:01:11,396:WARNING:Could not restore common/iam-smtp-config, iam-smtp-bkup.yml not found 2023-10-18 16:01:21,405:DEBUG:Waiting for secrets to be deleted (10/60) sec 2023-10-18 16:01:21,433:INFO:Created secret ems/jobmanager-identitysrvcreds 2023-10-18 16:01:21,443:INFO:Created secret ems/devicemodel-connector-default-scope-id 2023-10-18 16:01:21,444:INFO:Starting northstar applications 2023-10-18 16:01:22,810:INFO:Starting ems applications 2023-10-18 16:01:23,164:INFO:Starting auditlog applications 2023-10-18 16:01:23,247:INFO:Starting iam applications
登录到 23.2 版 UI 并验证还原的数据。
备份和还原脚本的注意事项
备份和还原脚本的注意事项如下:
-
可以每周运行脚本,也可以每天只运行一次脚本。在 24 小时内多次运行它们会返回错误,因为当天已经有一个名为 <name>-year_month_day 的备份文件夹。如果需要在同一 24 小时内进行手动备份,则必须使用
kubectl delete -n common jobs
命令删除作业。例如:# kubectl delete -n common jobs db-backup-paa-2023_20_04
-
这些脚本根据备份文件的频率和大小用备份文件填充磁盘空间。请考虑删除过时的备份元数据和文件以释放磁盘空间。您可以使用命令
kubectl delete -n common jobs
删除 Kubernetes 元数据。例如:# kubectl delete -n common jobs db-backup-paa-2023_20_04
您可以通过删除在运行备份脚本时摘要中显示的本地卷路径中的 /root/ 文件夹中创建的 <name> 年月日文件夹来删除备份文件。