1. 适用场景
本文档适用于处理KVM、GPU主机故障恢复场景,用于统一、规范该类故障的标准化运维处理流程,保障主机恢复后业务正常运行。
2. 故障基础处理
2.1 故障判定与基础操作
- 主机系统损坏:直接重装操作系统
- 主机系统盘硬件损坏:更换系统盘
2.2 备用系统盘选用规则
- 更换系统盘时,优先选用库存free主机已经设置好的系统盘;
- 如果线上没有空闲主机,则优先在库存选择free机器对240GB SSD系统重装,并进行主机设置,完成设置后联系DC挪用设置好的系统盘用于更换。
3 处理流程
3.1 设置流程
3.1.1 对于使用的已经设置好的free主机的系统盘的处理流程
更换设置好的系统盘后,需要做以下配置:
1. 修改主机名字
2. 配置新的IP
3. 修改fstab文件挂载磁盘
(1)确保这3个挂载点下面没有任何数据:/Data1、/Data2、/BackUp,然后删除这3个目录并重新创建:rm -rf /Data1、/Data2、/BackUp和 mkdir /Data1、/Data2、/BackUp
(2)然后执行命令systemctl daemon-reload或者重启服务器
(3)修改fstab文件,使用UUID挂载
(4)使用命令测试挂载:mount -a
4. 导入VM(如果是shared VPS还需做NAT,参考下面步骤)
5. 修改后端设置
(1)修改里面tag
vi /etc/supervisor/conf.d/vps.conf
(2)移除重新拷贝
rm -f /etc/nginx/sites-enabled/vps_agent_api.conf
cp /root/vps_agent/config/vps_agent_api /etc/nginx/sites-enabled/vps_agent_api.conf
(3)重启Nginx
(4)然后重新生成证书(ufw disable下运行)
certbot --nginx -d xxx.cloudclusters.io
(5) 重启Nginx和supervisor
5.新建VPS备份配置文件
cd /root/vps_agent/api_server && /root/env/bin/python -c "from handlers.task_handler import KVMHandler;KVMHandler.init_backup_conf_file()" && cd -
3.1.2 对于系统重装和全新系统盘的处理流程
由于重装OS或换系统盘都是全新的系统,需要重新进行主机设置
设置步骤如下:
a. 设置主机
如果是shared主机还需要操作Step5;
备注:使用hosting_install.sh脚本进行设置时
- 使用此脚本会格式化磁盘,请先注释格式化磁盘命令后再运行
- 运行该脚本会下载模板,而主机模板会下载到/Data1/目录,系统盘故障不会影响到模板文件,模板也无需下载,直接注释掉模板下载命令
(在跑后端设置脚本时可能会因为备份盘没有mount报错,在脚本最后一行代码,可以先注释掉,在mount /BackUp之后手动跑
b. 磁盘挂载
设置完后挂载磁盘,需要修改/etc/fstab文件。
3.2 后续操作
3.2.1. VPS导入
设置完成后需要把Data1和Data2的vms导入virsh,步骤如下所示:
步骤1:处理VPS数据,生成txt文件
单台VPS的导入步骤如下所示:例:需要导入VPS Name是 vps_2222
1)进入vps_2222所在的目录
2) virsh define vps_2222.xml
3) virsh start vps_2222
4) virsh list 查看导入的vms
由于vms数量众多建议让chat写个脚本导入,思路大概是:
复制active的vms名字保存到一个txt文档,然后用循环进Data1/2批量导入txt记录的vms然后开机
步骤2:批量导入脚本如下,脚本名 import_and_start_vms.sh。
#!/bin/bash
# 定义虚拟机名称列表文件
VM_LIST_FILE="vms.txt"
# 定义虚拟机的基础路径
BASE_DIRS=("/Data1/vms" "/Data2/vms")
# 检查虚拟机名称列表文件是否存在
if [[ ! -f "$VM_LIST_FILE" ]]; then
echo "找不到虚拟机名称列表文件: $VM_LIST_FILE"
exit 1
fi
# 循环读取虚拟机名称
while IFS= read -r VM_NAME; do
# 构建虚拟机目录路径
VM_DIR=""
for BASE_DIR in "${BASE_DIRS[@]}"; do
# 检查指定目录是否存在
if [[ -d "$BASE_DIR/$VM_NAME" ]]; then
VM_DIR="$BASE_DIR/$VM_NAME"
break
fi
done
# 如果没有找到虚拟机目录,输出提示信息
if [[ -z "$VM_DIR" ]]; then
echo "找不到虚拟机目录: $VM_NAME"
continue
fi
# 构建虚拟机配置文件路径
VM_XML="$VM_DIR/${VM_NAME}.xml"
# 检查XML文件是否存在
if [[ -f "$VM_XML" ]]; then
echo "导入并启动虚拟机: $VM_NAME"
# 进入虚拟机目录
pushd "$VM_DIR" > /dev/null
# 导入虚拟机
virsh define "$VM_XML"
# 启动虚拟机
virsh start "$VM_NAME"
# 返回上一级目录
popd > /dev/null
else
echo "找不到虚拟机配置文件: $VM_XML"
fi
done < "$VM_LIST_FILE"
步骤3: 赋予执行权限:
chmod +x import_and_start_vms.sh
步骤4:将VPS_name拷贝到vms.txt 文件中,列出了待导入的虚拟机名称。将txt文件放在与脚本同一目录
步骤5 执行脚本:
./import_and_start_vms.sh
3.2.2 备份配置文件生成
新建VPS备份的配置文件
cd /root/vps_agent/api_server && /root/env/bin/python -c "from handlers.task_handler import KVMHandler;KVMHandler.init_backup_conf_file()" && cd -
3.2.3 Shared IP NAT映射添加
如果KVM主机配置了Shared IP,需要为使用了Shared IP的VPS添加NAT映射
更新/etc/ufw/before.rules文件里Shared VPS的映射关系,正常Shared IP VPS在主机里会有两条映射关系,如下图所示
替换系统盘之后不会有映射关系,会导致VPS里面有网但是不能RDP.需要做以下操作
a. 找Ai分析数据,可以这么告诉AI
一条这样的数据93.127.139.147:10001
192.168.122.3:1097,可以分析出以下两条信息.
-A PREROUTING -p tcp -i br0 -d 93.127.139.147 --dport 10001 -j DNAT --to-destination 192.168.122.3:1097
-A POSTROUTING -s 192.168.122.3/32 -o br0 -j 93.127.139.147
我将给你一组数据,请帮我按以上格式分析出数据.不要注释掉的内容,只要结果,所有数据一次性输出.把POSTROUTING的结果放一起,PREROUTING的结果放一起
b. 在OSS->VPS Hosting Servers->VPS List里把所有数据拷贝到Excle表里,删除所有其他数据,把Shared IP那一列的数据拷贝给AI(其他数据处理方法也可以,看自己习惯来)
AI会输出结果,如下图所示(尝试用过KIMI和Gemini分析数据,都是可以的)
c. 将AI输出的结果大概核对一下,粘贴到主机的/etc/ufw/before.rules文件, 用以下命令更新防火墙就可以了:
ufw reload
可以用以下命令检查映射关系是否存在
iptables-save | grep 93.127.132.191
如果不存在,但是我们确实已经将映射关系写在/etc/ufw/before.rules文件里了,可以用以下命令后再次检查
Article ID: 4183, Created: June 1 at 8:18 PM, Modified: June 15 at 4:47 AM