文档目录

如何创建周期性本地+异地备份

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调用流程概览

  1. 登录云平台 logInByAccount
  2. 将已有镜像服务器添加为本地备份服务器 CreateSystemTag *2
  3. 添加远端备份服务器
    1. 添加远端备份服务器 AddImageStoreBackupStorage
    2. 将远端备份服务器加载到区域 AttachBackupStorageToZone
  4. 创建定期备份任务
    1. 创建定时任务组 CreateSchedulerJobGroup
    2. 创建定时器1 (触发全量备份) CreateSchedulerTrigger
    3. 定时任务组绑定定时器1 AddSchedulerJobGroupToSchedulerTrigger
    4. 更新定时任务组 UpdateSchedulerJobGroup
    5. 创建定时任务 CreateSchedulerJob
    6. 将定时任务添加到定时任务组 AddSchedulerJobsToSchedulerJobGroup
    7. 创建定时器2 (触发增量备份) CreateSchedulerTrigger
    8. 定时任务组绑定定时器2 AddSchedulerJobGroupToSchedulerTrigger

API调用流程

API详细调用流程如下:
  1. 进入管理节点系统,发送以下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
  2. 将已有镜像服务器添加为本地镜像服务器
    1. 添加Systemtag backup::network::cidr
      curl -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"}}
    2. 添加Systemtag allowbackup
      curl -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"}}
  3. 添加远端备份服务器
    1. 添加远端备份服务器:
      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

    2. 将远端备份服务器加载到区域:
      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"]}}
  4. 创建定期备份任务
    1. 创建定时任务组
      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。

    2. 创建定时器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

    3. 定时任务组绑定定时器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"}}
    4. 更新定时任务组
      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"]}}
    5. 创建定时任务
      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

    6. 将定时任务添加到定时任务组
      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"}]}
    7. 创建定时器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

    8. 定时任务组绑定定时器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查看备份任务和策略


开发手册 | 5.4.12 | ZStack Cloud · ZCF | ZStack 资源中心