You need to enable JavaScript to run this app.
导航

抢占式实例被回收时数据恢复最佳实践

最近更新时间2023.12.15 11:51:21

首次发布时间2022.11.03 08:26:56

本文介绍如何恢复即将被回收的抢占式实例内的数据。

操作场景

抢占式实例存在中断回收机制,在被完全回收前,实例会进入锁定状态,并触发中断事件。当您接收到抢占式实例的中断通知后,您可以通过以下操作为实例创建自定义镜像,并基于已创建的镜像新建抢占式实例,以实现实例内的数据恢复。

流程说明

alt

注意

  • 火山引擎会提前5分钟发送抢占式实例中断消息,5分钟后实例将被正式回收。但数据恢复的具体耗时取决于您实例的镜像类型与系统盘文件大小等因素。例如,系统盘文件越大,恢复时间越久。请您使用本文示例代码前务必自行进行评估与验证。
  • 本文提供的方式仅供参考,并不能保证您的实例一定会在5分钟内完成镜像创建与数据恢复。建议您定期备份数据,以获得更好的使用体验。

操作步骤

步骤一:创建抢占式实例

本文以调用RunInstances接口创建并自动启动抢占式实例为例。您也可以参考购买抢占式实例,通过云服务器控制台创建抢占式实例。

请求示例

以下代码适用于创建一台实例计费方式采用按量计费 PostPaid 、抢占策略采用系统自动出价 SpotAsPriceGo 的通用型g2i抢占式实例。

GET /?Action=RunInstances&Version=2020-04-01&ZoneId=cn-beijing-a&ImageId=image3tgt71djf14bwbh7****&InstanceTypeId=ecs.g2i.xlarge&InstanceName=instance-test&InstanceChargeType=PostPaid&SpotStrategy=SpotAsPriceGo&Count=1&Password=password@123&NetworkInterfaces.1.SubnetId=subnet-3thbjdy3rh4bwbh8****&NetworkInterfaces.1.SecurityGroupIds.1=sg3thbinrkp94bwbha****&Volumes.1.VolumeType=PTSSD&Volumes.1.Size=40 HTTP/1.1
Host: open.volcengineapi.com
Region: cn-beijing
Service: ecs

返回示例

返回 InstanceIds 表示抢占式实例创建成功。

"Result": {
        "InstanceIds": [
            "i-3tigy72q3u3vj0******"
        ]
    }

步骤二:接收抢占式实例中断消息

火山引擎会提前5分钟通过站内信、短信或邮件发送即将中断抢占式实例的通知,同时会生成系统事件。本文介绍调用DescribeSystemEvents接口查看抢占式实例的事件信息。

请求示例

GET /?Action=DescribeSystemEvents&Version=2020-04-01&ResourceIds.1=i-3tigy72q3u3vj0****** HTTP/1.1
Host: open.volcengineapi.com
Region: cn-beijing
ServiceName: ecs

返回示例

若返回结果中包含状态为 ScheduledSpotInstanceInterruption.Delete 事件,表示该抢占式实例即将中断。

"Result": {
        "SystemEvents": [
            {
                "Id": "t-3ti9101aju3vj0******",
                "CreatedAt": "2022-06-15T16:34:34+08:00",
                "UpdatedAt": "2022-06-15T16:34:49+08:00",
                "ResourceId": "i-3tigy72q3u3vj0******",
                "Type": "SpotInstanceInterruption.Delete",
                "Status": "Scheduled",
                "OperatedEndAt":"2021-07-10T18:11:46+08:00"
            }
        ],
        "NextToken": "bHpwdXJja2RxemU1eG5sb3NzdGcW1-RCEq******"
    }

步骤三:为即将被回收的抢占式实例创建自定义镜像

接收到实例中断消息后,调用CreateImage接口为当前实例创建自定义镜像。

请求示例

GET /?Action=CreateImage&Version=2020-04-01&InstanceId=i-3tigy72q3u3vj0******&ImageName=image-1 HTTP/1.1
Host: open.volcengineapi.com
Region: cn-beijing
ServiceName: ecs

返回示例

返回 ImageId 表示自定义镜像创建成功。

{
    "Result": {
        "ImageId": "image-3teco18f1w5a71******"
    }
}

创建自定义镜像后,您可以调用DescribeImages接口查看镜像的状态。镜像状态变为可用(available),则执行下一步操作。

GET /?Action=DescribeImages&Version=2020-04-01&ImageIds.1=image-3teco18f1w5a71******  HTTP/1.1
Host: open.volcengineapi.com
Region: cn-beijing
Service: ecs

步骤四:使用自定义镜像新建抢占式实例实现数据恢复

调用RunInstances接口,使用步骤三得到的自定义镜像重新创建一台抢占式实例,具体参数请参考步骤一,其中:

  • ImageId 需替换为新的镜像ID。
  • 新实例所属可用区 ZoneId 建议与源实例保持一致。