如何创建周期性本地+异地备份
ZStack Cloud支持通过系统登录或第三方API工具 (例如Postman) 使用HTTP方式调用API创建周期性云主机/云盘备份。本文主要以管理员身份 (admin) 登录管理节点系统,介绍如何创建周期性本地+异地备份。您也可以使用云平台其他已授权账户/用户身份登录。
调用API登录云平台前,需确保:
- 已准备好云主机所需的基础资源,包括:物理机、主存储、镜像、镜像服务器、计算规格、二层网络、三层网络,并成功创建云主机。详细可参考如何初始化云平台。
- 已准备好远端备份服务器。
场景假设
用户需对一台业务云主机进行周期性备份,备份数据同时存储在一个本地备份服务器和一个远端备份服务器中,具体环境配置和备份策略如下:
| 备份服务器 | 服务器IP |
|---|---|
| 本地备份服务器 (使用平台已有镜像服务器) | 172.26.52.185 |
| 远端备份服务器 | 172.26.51.160 |
| 策略条目 | 策略详情 |
|---|---|
| 备份方式 | 增量+自定义全量策略 |
| 增量备份 | 每周周日00:00:00,生成一次增量备份 |
| 全量备份 | 每月1日00:00:00,生成一次全量备份 |
| 本地备份保留策略 | 保留最近8份备份数据 |
| 远端备份保留策略 | 永久保留 |
API调用流程概览
- 登录云平台 logInByAccount
- 将已有镜像服务器添加为本地备份服务器 CreateSystemTag *2
- 添加远端备份服务器
- 添加远端备份服务器 AddImageStoreBackupStorage
- 将远端备份服务器加载到区域 AttachBackupStorageToZone
- 创建定期备份任务
- 创建定时任务组 CreateSchedulerJobGroup
- 创建定时器1 (触发全量备份) CreateSchedulerTrigger
- 定时任务组绑定定时器1 AddSchedulerJobGroupToSchedulerTrigger
- 更新定时任务组 UpdateSchedulerJobGroup
- 创建定时任务 CreateSchedulerJob
- 将定时任务添加到定时任务组 AddSchedulerJobsToSchedulerJobGroup
- 创建定时器2 (触发增量备份) CreateSchedulerTrigger
- 定时任务组绑定定时器2 AddSchedulerJobGroupToSchedulerTrigger
API调用流程
API详细调用流程如下:
- 进入管理节点系统,发送以下Curl请求登录云平台以获取Session
ID:
其中:curl -H "Content-Type: application/json;charset=UTF-8" \ -X PUT -d '{"logInByAccount":{"accountName":"admin","password":"b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e 5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86" }}' \ http://localhost:8080/zstack/v1/accounts/login- password字段需填入经过SHA-512算法加密的密码
返回结果为:
其中:{"inventory":{"uuid":"61116d3b03f74c9687503d29da7b1a99","accountUuid":"36c27e8ff05c4780bf6d2fa65700f22e","userUuid":"36c27e8ff05c4780bf6d2fa65700f22e","expiredDate":"Apr 18, 2024 7:54:31 PM","createDate":"Apr 18, 2024 5:54:31 PM","noSessionEvaluation":false}}- uuid字段即为获取的本次Session的ID
- 将已有镜像服务器添加为本地镜像服务器
- 添加Systemtag
backup::network::cidrcurl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"resourceType":"ImageStoreBackupStorageVO","resourceUuid":"eda4fff1e5394cbe86a256ebfbd22973","tag":"backup::network::cidr::192.168.1.0/24"}}' \ http://localhost:8080/zstack/v1/system-tags其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/system-tags
- tag字段需填入
backup::network::cidr::192.168.1.0/24,为本地备份服务器添加备份网络,192.168.1.0/24是本次添加的备份网络 - resourceUuid字段需填入镜像服务器的UUID
返回结果为:{"inventory":{"inherent":false,"uuid":"a62ebeff1a2340a3924273caf1048a59","resourceUuid":"eda4fff1e5394cbe86a256ebfbd22973","resourceType":"ImageStoreBackupStorageVO","tag":"backup::network::cidr::192.168.1.0/24","type":"System","createDate":"Apr 18, 2024 5:56:11 PM","lastOpDate":"Apr 18, 2024 5:56:11 PM"}} - 添加Systemtag
allowbackupcurl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"resourceType":"ImageStoreBackupStorageVO","resourceUuid":"eda4fff1e5394cbe86a256ebfbd22973","tag":"allowbackup"}}' \ http://localhost:8080/zstack/v1/system-tags
其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/system-tags
- tag字段需填入
allowbackup,表示允许该镜像服务器同时作为本地备份服务器 - resourceUuid字段需填入镜像服务器的UUID
返回结果为:{"inventory":{"inherent":false,"uuid":"25c9b5fd33a64fbc9830a063c8885be5","resourceUuid":"eda4fff1e5394cbe86a256ebfbd22973","resourceType":"ImageStoreBackupStorageVO","tag":"allowbackup","type":"System","createDate":"Apr 18, 2024 5:59:05 PM","lastOpDate":"Apr 18, 2024 5:59:05 PM"}} - 添加Systemtag
- 添加远端备份服务器
- 添加远端备份服务器:
curl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"hostname":"172.26.51.160","username":"root","password":"password","sshPort":22.0,"url":"/backup","name":"Remote-Backup","systemTags":[remotebackup]}}' \ http://localhost:8080/zstack/v1/backup-storage/image-store其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/backup-storage/image-store
- hostname字段需填入远端备份服务器的IP地址
- username字段需填入远端备份服务器用户名
- password字段需填入远端备份服务器密码
- sshPort字段需填入远端备份服务器SSH端口
- name字段用于设置远端备份名称
- url字段用于设置备份数据在远端备份服务器上的挂载路径
- systemTags字段需填入[remotebackup],表示允许该服务器用作远端备份服务器
返回结果为:{"inventory":{"hostname":"172.26.51.160","username":"root","sshPort":22,"uuid":"0bbe78419a99458eb8e25d6fd594e7ef","name":"Remote-Backup","url":"/backup","totalCapacity":154610401280,"availableCapacity":141946306560,"type":"ImageStoreBackupStorage","state":"Enabled","status":"Connected","createDate":"Apr 18, 2024 6:32:53 PM","lastOpDate":"Apr 18, 2024 6:33:38 PM","attachedZoneUuids":[]}}其中,uuid字段即为远端备份服务器的UUID
- 将远端备份服务器加载到区域:
curl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{}}' http://localhost:8080/zstack/v1/zones/65f7d08cb61d4c988140f1c7edbc3795/backup-storage/0bbe78419a99458eb8e25d6fd594e7ef其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/zones/{zoneUuid}/backup-storage/{backupStorageUuid}
- {zoneUuid}需填写加载区域的UUID
- {backupStorageUuid}需填写远端备份服务器的UUID
返回结果为:{"inventory":{"hostname":"172.26.51.160","username":"root","sshPort":22,"uuid":"0bbe78419a99458eb8e25d6fd594e7ef","name":"Remote-Backup","url":"/backup","totalCapacity":154610401280,"availableCapacity":141946564608,"type":"ImageStoreBackupStorage","state":"Enabled","status":"Connected","createDate":"Apr 18, 2024 6:32:53 PM","lastOpDate":"Apr 18, 2024 6:40:59 PM","attachedZoneUuids":["65f7d08cb61d4c988140f1c7edbc3795"]}}
- 添加远端备份服务器:
- 创建定期备份任务
- 创建定时任务组
curl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"name":"BackupJob","type":"vmBackup", "parameters":{"retentionType":"Count","retentionValue":"8","backupStorageUuids":"eda4fff1e5394cbe86a256ebfbd22973","remoteBackupStorageUuids":"0bbe78419a99458eb8e25d6fd594e7ef","networkWriteBandwidth":"","networkReadBandwidth":"","volumeReadBandwidth":"","volumeWriteBandwidth":""}}}' \ http://localhost:8080/zstack/v1/scheduler/jobgroups其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/scheduler/jobgroups
- type字段需填写vmBackup,表示该定时任务组用于创建云主机备份
- retentionType字段用于设置本地备份服务器的备份数据保留方式,Count表示按份保留;如设置为Days,表示按天保留
- retentionValue字段用于设置本地备份服务器的备份数据保留份数/天数
- 支持添加remoteRetentionType和remoteRetentionValue字段,用于设置远端备份服务器上的数据保留策略,此处未设置,表示永久保留
- networkReadBandwidth和networkWriteBandwidth字段用于设置网络上/下行带宽,此处无限制
- volumeReadBandwidth和volumeWriteBandwidth字段用于设置磁盘读写速度,此处无限制
返回结果为:{"inventory":{"uuid":"81341e22e42243309874cd8dbcc66ead","name":"BackupJob","state":"Enabled","createDate":"Apr 18, 2024 7:07:40 PM","lastOpDate":"Apr 18, 2024 7:07:40 PM","jobType":"vmBackup","jobData":"{\"retentionPolicy\":{\"retentionType\":\"Count\",\"retentionValue\":8},\"backupStorageUuids\":[\"eda4fff1e5394cbe86a256ebfbd22973\"],\"backupQosStruct\":{},\"name\":\"BackupJob\",\"createDate\":\"Apr 18, 2024 7:07:40 PM\",\"accountUuid\":\"36c27e8ff05c4780bf6d2fa65700f22e\"}","jobClassName":"org.zstack.storage.backup.CreateVmBackupJob","triggersUuid":[],"jobsUuid":[]}}其中,uuid即为定时任务组的UUID。
- 创建定时器1 (触发全量备份)
curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"name":"BackupJob","schedulerType":"cron","cron":"00 00 00 1 1/1 ?"}}' \ http://localhost:8080/zstack/v1/scheduler/triggers其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/scheduler/triggers
- cron字段用于设置全项备份的触发规则,00 00 00 1 1/1 ?表示每1个月1号00:00:00执行1次
返回结果为:{"inventory":{"uuid":"78edd478571045c68861e290fe14e0f7","name":"BackupJob","cron":"00 00 00 1 1/1 ?","schedulerType":"cron","repeatCount":0,"jobsUuid":[],"jobGroupsUuid":[]}}其中,uuid即为定时器1 (触发全量备份) 的UUID
- 定时任务组绑定定时器1
curl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"triggerNow":false}}' http://localhost:8080/zstack/v1/scheduler/jobgroups/81341e22e42243309874cd8dbcc66ead/scheduler/triggers/78edd478571045c68861e290fe14e0f7其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://zstack/v1/scheduler/jobgroups/{schedulerJobGroupUuid}/scheduler/triggers/{schedulerTriggerUuid}
- {schedulerJobGroupUuid}需填写定时任务组的UUID
- {schedulerTriggerUuid}需填写定时器1的UUID
- triggerNow字段用于指定是否立即执行一次
返回结果为:{"inventory":{"schedulerJobGroupUuid":"81341e22e42243309874cd8dbcc66ead","schedulerTriggerUuid":"78edd478571045c68861e290fe14e0f7","createDate":"Apr 18, 2024 7:28:11 PM","lastOpDate":"Apr 18, 2024 7:28:11 PM"}} - 更新定时任务组
curl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X PUT -d '{"updateSchedulerJobGroup":{"name":"BackupJob","uuid":"81341e22e42243309874cd8dbcc66ead","parameters":{"backupStorageUuids":"eda4fff1e5394cbe86a256ebfbd22973","remoteBackupStorageUuid":"0bbe78419a99458eb8e25d6fd594e7ef","name":"BackupJob","createDate":"Apr 18, 2024 7:07:40 PM","accountUuid":"36c27e8ff05c4780bf6d2fa65700f22e","retentionValue":"8","retentionType":"Count","fullBackupTriggerUuid":"78edd478571045c68861e290fe14e0f7"}}}' \ http://localhost:8080/zstack/v1/scheduler/jobgroups/81341e22e42243309874cd8dbcc66ead/actions其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/scheduler/jobgroups/{schedulerJobGroupUuid}/actions
- {schedulerJobGroupUuid}需填写定时任务组的UUID
- fullBackupTriggerUuid字段需填写定时器1 (触发全量备份) 的UUID
- 其他字段与创建该定时任务组时保持一致
返回结果为:{"inventory":{"uuid":"81341e22e42243309874cd8dbcc66ead","name":"BackupJob","state":"Enabled","createDate":"Apr 18, 2024 7:07:40 PM","lastOpDate":"Apr 18, 2024 8:11:38 PM","jobType":"vmBackup","jobData":"{\"retentionPolicy\":{\"retentionType\":\"Count\",\"retentionValue\":8},\"backupStorageUuids\":[\"eda4fff1e5394cbe86a256ebfbd22973\"],\"remoteBackupStorageUuid\":\"0bbe78419a99458eb8e25d6fd594e7ef\",\"backupQosStruct\":{},\"fullBackupTriggerUuid\":\"78edd478571045c68861e290fe14e0f7\",\"name\":\"BackupJob\",\"createDate\":\"Apr 18, 2024 7:07:40 PM\",\"accountUuid\":\"36c27e8ff05c4780bf6d2fa65700f22e\"}","jobClassName":"org.zstack.storage.backup.CreateVmBackupJob","triggersUuid":["bb1d5ec438414df6bc6ddc7ea05c8da6","78edd478571045c68861e290fe14e0f7"],"jobsUuid":["b1cd596438aa4457b775449efcb4932a"]}} - 创建定时任务
curl -H "Content-Type: application/json" -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"name":"BackupJob","targetResourceUuid":"9728cf1777484508aa54a21ba414ba00","type":"vmBackup","parameters":{"retentionType":"Count","retentionValue":"8","backupStorageUuids":"eda4fff1e5394cbe86a256ebfbd22973","remoteBackupStorageUuid":"0bbe78419a99458eb8e25d6fd594e7ef","networkWriteBandwidth":"","networkReadBandwidth":"","volumeReadBandwidth":"","volumeWriteBandwidth":""}}}' \ http://localhost:8080/zstack/v1/scheduler/jobs其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/scheduler/jobs
- targetResourceUuid字段需填写需要备份的云主机根云盘UUID
- parameters中的字段和创建定时任务组时保持一致
返回结果为:{"inventory":{"uuid":"b1cd596438aa4457b775449efcb4932a","targetResourceUuid":"9728cf1777484508aa54a21ba414ba00","name":"BackupJob","state":"Enabled","createDate":"Apr 18, 2024 7:54:33 PM","lastOpDate":"Apr 18, 2024 7:54:33 PM","jobData":"{\"retentionPolicy\":{\"retentionType\":\"Count\",\"retentionValue\":8},\"backupStorageUuids\":[\"eda4fff1e5394cbe86a256ebfbd22973\"],\"remoteBackupStorageUuid\":\"0bbe78419a99458eb8e25d6fd594e7ef\",\"backupQosStruct\":{},\"uuid\":\"b1cd596438aa4457b775449efcb4932a\",\"name\":\"BackupJob\",\"createDate\":\"Apr 18, 2024 7:54:33 PM\",\"accountUuid\":\"36c27e8ff05c4780bf6d2fa65700f22e\"}","jobClassName":"org.zstack.storage.backup.CreateVmBackupJob","triggersUuid":[],"schedulerJobGroupUuids":[]}}其中,uuid即为该定时任务的UUID
- 将定时任务添加到定时任务组
curl -H "Content-Type: application/json" -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"schedulerJobGroupUuid":"81341e22e42243309874cd8dbcc66ead","schedulerJobUuids":["b1cd596438aa4457b775449efcb4932a"]}}' \ http://localhost:8080/zstack/v1/scheduler/jobgroups/81341e22e42243309874cd8dbcc66ead/job其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/scheduler/jobgroups/{schedulerJobGroupUuid}/job
返回结果为:{"inventories":[{"schedulerJobGroupUuid":"81341e22e42243309874cd8dbcc66ead","schedulerJobUuid":"b1cd596438aa4457b775449efcb4932a","createDate":"Apr 18, 2024 7:59:42 PM","lastOpDate":"Apr 18, 2024 7:59:42 PM"}]} - 创建定时器2
(触发增量备份)
curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"name":"BackupJob","schedulerType":"cron","cron":"00 00 00 ? * SUN"}}' \ http://localhost:8080/zstack/v1/scheduler/triggers其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://localhost:8080/zstack/v1/scheduler/triggers
- cron字段用于设置增量备份的触发规则,00 00 00 ? * SUN表示每周日00:00:00执行一次
返回结果为:{"inventory":{"uuid":"bb1d5ec438414df6bc6ddc7ea05c8da6","name":"BackupJob","cron":"00 00 00 ? * SUN","schedulerType":"cron","repeatCount":0,"jobsUuid":[],"jobGroupsUuid":[]}}其中,uuid即为定时器2 (触发增量备份) 的UUID
- 定时任务组绑定定时器2
curl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: OAuth 61116d3b03f74c9687503d29da7b1a99" \ -X POST -d '{"params":{"triggerNow":false}}' http://localhost:8080/zstack/v1/scheduler/jobgroups/81341e22e42243309874cd8dbcc66ead/scheduler/triggers/bb1d5ec438414df6bc6ddc7ea05c8da6其中:- Authorization字段需填入登录云平台时获取的Session ID
- HTTP请求URL为:http://zstack/v1/scheduler/jobgroups/{schedulerJobGroupUuid}/scheduler/triggers/{schedulerTriggerUuid}
- {schedulerJobGroupUuid}需填入定时任务组的UUID
- {schedulerTriggerUuid}需填入定时器2的UUID
- triggerNow字段用于指定是否立即执行一次
返回结果为:{"inventory":{"schedulerJobGroupUuid":"81341e22e42243309874cd8dbcc66ead","schedulerTriggerUuid":"bb1d5ec438414df6bc6ddc7ea05c8da6","createDate":"Apr 18, 2024 8:14:11 PM","lastOpDate":"Apr 18, 2024 8:14:11 PM"}}
- 创建定时任务组
至此,用户已成功为业务云主机创建定期备份任务:
- 每周周日00:00:00将生成一份增量备份,同时存储在本地备份服务器和远端备份服务器。
- 每月1日00:00:00将生成一份全量备份,同时存储在本地备份服务器和远端备份服务器。
- 本地备份服务器保留最近8份备份,远端备份服务器永久保留备份。
登录云平台UI界面,可以看见该备份任务已被创建,且配置了如预期的备份策略,如图 1所示:图 1. 登录UI查看备份任务和策略


