You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们
导航

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

最近更新时间2023.08.01 10:44:23

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

在收到抢占式实例的中断通知后,您可以参考本文操作恢复实例内的数据。

背景信息

抢占式实例可能会因为市场供需变化或价格因素而被强制回收,在被完全回收前,实例会进入锁定状态,并触发中断事件。当接收到抢占式实例的中断通知后,您可以通过以下操作为实例创建自定义镜像,并基于已创建镜像新建抢占式实例,以实现实例内的数据恢复。

操作流程如下所示:

注意事项

说明

本文提供的示例代码仅供参考,并不能保证您的实例一定会在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 查看镜像的状态。

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

镜像状态变为可用(available),则执行下一步操作。

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

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

  • ImageId 需替换为新的镜像ID。

  • 新实例所属可用区 ZoneId 建议与源实例保持一致。