应急预案:专有云V3环境中ECS实例误删除的恢复方法

应急预案:专有云V3环境中ECS实例误删除的恢复方法

更新时间:2020-08-11 13:39:48

1. 概述

本文主要介绍在专有云V3环境中,ECS实例误删除的恢复方法。

1.1. 适用范围

  • 专有云V3企业版,ECS
    说明:适用于专有云V3.0.0~V3.11.0企业版,包含V3.0.0和V3.11.0环境。

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L2(二线技术支持工程师)
  • 临时或固化方案:临时
  • 操作复杂度:高
  • 预估执行时长:180分钟
  • 是否影响业务:是
    说明:操作过程中后羿磁盘回收时间从24小时变成360小时,需要关注ECS盘古的水位巡检。
  • 风险等级:高
    说明:本方案为误删除ECS实例后的应急恢复方案,可能会丢失数据或者无法完全恢复。

2. 问题描述

在专有云V3环境中,ECS实例误删除后,需要恢复系统盘和数据盘,IP地址可以改变。

说明:此种场景可通过本方案进行排查修复,此方案需要在阿里云技术支持双人复核下进行变更操作。

3. 解决方案

3.1. 环境检查

检查ECS实例释放时间

  1. 登录ECSAG服务器,关于如何登录ECSAG服务器,请参见专有云如何登录ECSAG服务器
  2. 执行以下命令,记录ECS实例释放时间。
    go2which [$Instance_ID]
    说明:[$Instance_ID]为ECS实例ID。
    系统显示类似如下,观察status为destroyed,表示已释放。

    说明:gmt_modify的值为实例释放的时间,此截图中可以确认实例释放时间为2019年11月10日 13点03分43秒。

检查后端ECS实例云磁盘到底层盘古延迟删除时间

  1. 登录houyiregiondb数据库,关于如何登录数据库请参见专有云如何查找ecsdriver和houyiregiondb数据库
  2. 执行以下SQL语句,查看延迟删除时间,deleted_disk_preserve的值表示磁盘延迟删除时间,单位为小时。
    select * from cluster_info \G
    系统显示类似如下。

对比ECS实例释放时间与当前时间差

对比ECS实例释放时间与当前时间差是否在延迟删除时间内。根据检查ECS实例释放时间检查后端ECS实例云磁盘到底层盘古延迟删除时间的结果进行对比,截图中的示例结果如下:

  • 本示例中已知ECS实例误删除时间为2019年11月10日13点03分43秒。
  • 恢复时间为2019年11月10日13点30分00秒。

因此并没有到延迟删除时间范围外,可以恢复系统盘和数据盘的数据。

查询需要恢复ECS实例的系统盘与数据盘信息

登录houyiregiondb数据库,执行以下SQL语句,查看误删除的ECS实例的磁盘信息。

select * from device where name='[$Instance_ID]' or partition_name='[$Instance_ID]' \G

如果查询到多条记录,则需要查看ECS实例状态,使用go2which命令查询的gmt_modify对应的时间,查看对应的系统盘或数据盘信息。确认device表的gmt_detach字段与对应gmt_modify字段的值一致,说明查询到的记录为误删除时被释放的需要恢复的系统盘和数据盘记录。

3.2. 实施步骤

调整后端磁盘延迟删除时间

  1. 登录houyiregiondb数据库,执行以下SQL语句,备份cluster_info表。
    create table cluster_info_bak as select * from cluster_info \G
    系统显示类似如下。
  2. 执行以下SQL语句,调整后端磁盘延迟删除时间从24小时变更至360小时。
    update cluster_info set deleted_disk_preserve='360' where cluster_id='[$Cluster_ID]' \G
    注意
    • 此处是为了保证给恢复误删实例云盘数据保留充足的时间。调整此延迟删除参数前需关注ECS实例对应集群盘古水位,检查是否处于告警阈值75% ,如果已经到达75%,则需实时监控盘古水位情况,并且在数据恢复后立即回滚此时间,从360小时变更为24小时。
    • [$Cluster_ID]为集群ID。
    系统显示类似如下。

订正后端磁盘状态为old

  1. 在订正前登录houyiregiondb数据库,执行以下SQL语句,检查磁盘信息。
    select id,status,partition_name,pangu_cluster_id,device_id
    from device
    where name='[$Instance_ID]' or partition_name='[$Instance_ID]';
    系统显示类似如下。
  2. 登录OPS1服务器,执行以下命令,备份houyiregiondb数据库的device表。
    mysqldump -h[$Host] -u[$User] -P[$Port] -p[$Password] houyiregiondb device > /tmp/device.sql
    说明:这里需要确认文件内容完全备份成功。
    系统显示类似如下。
  3. 登录houyiregiondb数据库,执行以下SQL语句,更新磁盘状态。
    update device 
    set status='old'
    where partition_name='[$Instance_ID]' and id='[$ID]' and pangu_cluster_id='[$Pangu_Cluster_ID]' and device_id='[$Device_ID]';
    说明:此步中除了status变为old外,[$Instance_ID]、[$ID]、[$Pangu_Cluster_ID]、[$Device_ID]均参见本章节的步骤1查询的结果。
    系统显示类似如下。
  4. 订正后,执行以下SQL语句,检查磁盘信息,确认磁盘状态变为old。
    select id,status,partition_name,pangu_cluster_id,device_id
    from device
    where name='[$Instance_ID]' or partition_name='[$Instance_ID]';
    系统显示类似如下。

  5. 登录ECSAG服务器,执行go2riverdbrnd命令,进入riverdb数据库。
  6. 执行以下SQL语句,检查riverdb数据库中磁盘的信息。
    select id,partition_name,cluster_id,device_id,pangu_path,status 
    from device
    where cluster_id='[$Cluster_ID]' and device_id='[$Device_ID]';
    系统显示类似如下,status0,则符合预期。

给临时恢复的云盘创建快照

  1. 登录ECSAG服务器,执行以下命令,查看区域ID。
    go2houyirnd -Ne " select big_region_no from big_region_info;"
    系统显示类似如下。
  2. 执行以下命令,创建快照。
    go2hyapi create_snapshot region_id=[$Region_ID] disk_id=[$Disk_ID]
    说明
    系统显示类似如下。
  3. 创建快照期间可以通过执行以下命令,查看创建快照的进度,开始progress的值为0,快照创建完成后progress变为100
    go2snapshot [$Disk_ID]
    系统显示类似如下,表示快照创建完成。

下载并导出系统盘快照

  1. 登录ECSAG服务器,执行以下命令,查看并记录access_id、access_key、domain、ocm_addr的值。
    go2houyiregiondbrnd -e "select access_id,access_key,domain,ocm_addr from oss_info;"
  2. 执行以下命令,下载并导出系统盘快照。
    说明:如果有多个云盘快照需要下载,请一个下载好之后,再下载另外一个。
    sudo /opt/tdc/tdc_admin rs --snapshot_id=[$Logical_ID] --oss_snapshot_domain=[$Domain] --oss_access_id=[$Access_ID] --oss_access_key=[$Access_Key] --oss_ocm_address=[$Ocm_Addr] --dump_data=true --output=/tmp/[$File].raw
    说明
    • [$Domain]、[$Access_ID]、[$Access_Key]、[$Ocm_Addr]为上一步获取的值。
    • [$Logical_ID]为给临时恢复的云盘创建快照中步骤3输出的logical_id的值。
    • [$File]为导出的快照文件名。
    系统显示类似如下。

上传自定义镜像

此步骤可参考以下KB文档,即可上传系统盘。

说明:Linux系统可能会出现新建ECS后实例无法登录系统的情况,此时可通过VNC登录,按Ctrl+D,输入root密码进入,修改/etc/fstab文件,注释之前挂载的数据盘的行,保存后重启ECS实例即可,正常进入操作系统。

  • KB 92127 通用方案:专有云V3环境如何上传自定义镜像

数据盘数据恢复

  1. 通过专有云控制台或者其他PAAS平台,创建一个测试的ECS实例,然后挂载一块数据盘。
    说明:挂载的数据盘与误删除ECS实例恢复的数据盘容量大小相同,并且正常挂载到测试ECS实例中。
  2. 登录ECSAG服务器,执行以下命令,挂载磁盘到测试ECS实例。
    go2hyapi attach_disk region_id=[$Region_ID] instance_id=[$Instance_ID] disk_id=[$Disk_ID]
    系统显示类似如下,说明数据盘挂载完成。
  3. 登录测试ECS实例,将临时恢复的数据盘的数据拷贝到前端正常创建的数据盘中。
  4. 拷贝完毕后,将测试ECS实例在前端正常关机。
  5. 在拷贝完数据后,将正常的数据盘在前端PAAS平台卸载,然后挂载到通过自定义镜像恢复的ECS实例中。
  6. 此时误删除的ECS实例就恢复完成。

3.3. 结果验证

ECS实例恢复完毕,确认检查无问题。

4. 回滚方案

  1. 登录houyiregiondb数据库,执行以下SQL语句,将后端磁盘延迟删除时间从360小时回滚为24小时。
    update cluster_info set deleted_disk_preserve='24' where cluster_id='[$Cluster_ID]' \G
    系统显示类似如下。
  2. 验证数据无问题后,静默7天无问题,将创建测试的ECS实例通过第三方PAAS平台或专有云控制台进行释放。
  3. 登录houyiregiondb数据库,执行以下SQL语句,将后端磁盘状态从old状态回滚为原来的状态。
    update device
    set status='deleted'
    where partition_name='[$Instance_ID]' and id='[$ID]' and pangu_cluster_id='[$Pangu_Cluster_ID]' and device_id='[$Device_ID]';
  4. 执行以下命令,删除快照。
    go2hyapi remove_snapshot snapshot_id=[$Logical_ID] region_id=[$Region_ID]