通用方案:ECS物理机上实例磁盘配置文件缺失的修复方法

通用方案:ECS物理机上实例磁盘配置文件缺失的修复方法

更新时间:2020-10-14 14:44:40

1. 概述

本文主要介绍在专有云环境中,ECS物理机上实例磁盘配置文件缺失的修复方法。

方案总览

类别 内容
风险等级(方案执行的影响)
操作方式 黑屏
操作复杂度
预估执行时长 120分钟
客户业务的影响
可监控性 不支持
有效性(重启、重拉、补丁、升级、扩容等配置是否丢失) 临时
数据修订(变更是否涉及增删改操作)
执行灰度策略 请向产品侧咨询,明确灰度策略
首次发布时间 N/A
预计完成时间 N/A

1.1. 适用范围

  • 专有云版本:V3.*
  • 产品:ECS

1.2. 风险说明

实例所在物理机上磁盘配置文件缺失本身属于异常现象,需要修复。

2. 问题描述

由于现场环境对应VM的conf文件缺失,从而在升级、扩容、排查问题等场景下若没有提前排查,在直接重启tdc服务后,running状态的实例所在物理机上的/guest/[$Instance_ID]/conf/目录下存在.conf磁盘配置文件缺失的情况。实例内部缺失磁盘对应的读写,则无法正常运行,从而导致业务异常,因此需要处理conf文件缺失的实例。

说明:[$Instance_ID]为实例ID。

3. 解决方案

3.1. 环境检查

上传批量检查的脚本

  1. 登录OPS服务器,如何登录服务器请参见专有云如何登录OPS服务器
  2. 执行以下命令,创建文件存放目录。
    mkdir -p /tmp/check_ecs_vm_conf/msg
    说明:msg目录为固定的,必须与本文保持一致。
  3. 上传check_ecs_vm_conf.zip文件到OPS服务器的/tmp/check_ecs_vm_conf/目录。
  4. 执行以下命令,校验MD5值。
    说明:MD5值为b6862d87cb7f3da05de9d7651c67bde9
    md5sum check_ecs_vm_conf.zip
    系统显示类似如下。
  5. 执行以下命令,进入上传文件所在的目录。
    cd /tmp/check_ecs_vm_conf/
  6. 执行以下命令,解压文件。
    unzip check_ecs_vm_conf.zip
  7. 执行ll命令,检查解压后的压缩文件,确认包含check_ecs_vm_conf.pycommand.pylog.py三个脚本文件,以及msg的文件目录。

检查环境中实例的conf文件

  • 执行以下命令,针对整个环境检查。若是环境中有很多个ECS实例以及集群,可以使用search命令在后端执行,这样即使窗口中断之后,进程还在后台运行。
    说明:脚本的输出结果在msg目录中。
    /home/tops/bin/python check_ecs_vm_conf.py
    系统显示类似如下。

    若存在异常,则会返回类似如下的错误信息,请联系阿里云技术支持进行处理。
    [2020-07-10 17:38:00,000] [ERROR] [check_ecs_vm_conf.py:95] all vm device check down, vm don't find device conf count [2], vm list is : ['/guest/i-tx905uqhaXXXXgbn4ii/conf/46125-21678.conf', '/guest/i-tx905XXXXXm1j9gbn4ii/conf/46125-21679.conf']
    系统显示类似如下。
  • 执行以下命令,针对单个物理机检查。
    /home/tops/bin/python check_ecs_vm_conf.py [$Hostname]
    说明:[$Hostname]需要查询的物理机的主机名。
    系统显示类似如下。
  • 执行以下命令,针对多个物理机检查。
    /home/tops/bin/python check_ecs_vm_conf.py [$Hostname1],[$Hostname2],[$Hostname3],...
    说明:多台物理机查询的时候,物理机与物理机之间用英文的逗号(,)隔开即可。
    系统显示类似如下。

结果的输出文件分析

每次执行脚本文件,都会生成一个日志文件,该文件记录的就是脚本的输出信息,可以针对输出的日志进行分析,查看是否存在缺失异常的conf文件。如存在异常信息,请联系阿里云技术支持协助处理。

说明:日志文件存放在msg目录中。

3.2. 实施步骤

确定磁盘文件缺失的实例

  1. 根据日志查看异常conf文件所在的物理机。
  2. 登录异常的物理机,执行以下命令,查看相应的实例状态。
    sudo virsh list --all|grep [$Instance_ID]
    说明:[$Instance_ID]为实例ID。
    系统显示类似如下。
  3. 登录ECSAG服务器,如何登录ECSAG服务器,请参见专有云如何登录ECSAG服务器
  4. 执行以下命令,查看实例状态。
    go2which [$Instance_ID]
    系统显示类似如下。
  5. 登录物理机,使用ll命令查看实例对应的磁盘conf文件是否都存在。
    说明:磁盘文件所在目录为/guest/[$Instance_ID]/conf,多个磁盘就存在多个conf文件。以下示例中,实例实际有3个磁盘,但是以下目录中只有系统盘的磁盘文件,因此判定磁盘conf文件缺失。

修复磁盘文件缺失的实例

以下2种方法中,任何一种修复方式都需要重启实例,需要确认之后进行操作,请谨慎操作,修复期间实例需要暂时停止,业务也会中断。

方法一:重启实例
  1. 登录ECSAG服务器,执行以下命令,重启磁盘文件缺失的ECS实例。
    go2hyapi restart_vm vm_name=[$Instance_ID]
    系统显示类似如下。
  2. 执行以下命令,检查实例状态,确保实例状态是running。
    go2which [$Instance_ID]
    系统显示类似如下。
  3. 登录实例所在的物理机,进入磁盘文件所在的目录,使用ll命令确认缺失的磁盘文件重启实例后已生成。
方法二:冷迁移实例
  1. 登录ECSAG服务器,执行以下命令,停止磁盘文件缺失的ECS实例。
    go2hyapi stop_vm vm_name=[$Instance_ID]
    系统显示类似如下。
  2. 执行以下命令,检查实例状态,确保实例状态是stopped。
    go2which [$Instance_ID]
    系统显示类似如下。
  3. 执行以下命令,迁移磁盘文件缺失的实例。
    go2hyapi recover_vm vm_name=[$Instance_ID] region_id=[$Region_ID]
    说明:[$Region_ID]为实例所在的区域ID。
    系统显示类似如下。
  4. 执行以下命令,检查实例状态,确保实例状态是running,且实例所在的物理机发生了变化。
    go2which [$Instance_ID]
    系统显示类似如下。
  5. 登录实例迁移后所在的物理机,进入磁盘文件所在的目录,确认缺失的磁盘文件已生成。

3.3. 结果验证

登录OPS服务器,依次执行以下命令,确认环境中无异常信息输出。

cd /tmp/check_ecs_vm_conf
/home/tops/bin/python check_ecs_vm_conf.py

系统显示类似如下。

4. 回滚方案

磁盘文件缺失本身属于异常现象,无需回滚。