devstack重启恢复方案

这是一个非常实际且关键的问题!我们来一步步分析 "物理主机关机 → 重启"嵌套虚拟机 + DevStack 的影响,并给出完整的恢复操作指南。


🧩 场景回顾

  • 物理主机(Host) :运行 Linux(如 Ubuntu)
  • 虚拟机(VM) :在 Host 上通过 KVM/QEMU、VirtualBox 或 VMware 创建
  • DevStack:部署在该 VM 内部(单节点 OpenStack 开发环境)

✅ 典型拓扑:
你的笔记本/服务器KVM 虚拟机 (192.168.122.30)DevStack (Keystone/Nova/Neutron...)


🔌 一、关机对各层的影响

组件 关机时状态 开机后状态 是否自动恢复
物理主机 正常关机 需手动开机
虚拟机(VM) 被强制断电(除非优雅关机) 默认不会自动启动 ❌(需配置)
DevStack 服务 进程被 kill 不会自动启动(即使 VM 启动) ❌(需手动或配置 systemd)

⚠️ 关键结论
物理机重启后,VM 和 DevStack 都不会自动恢复运行!你需要手动干预。


🛠️ 二、开机后的完整恢复步骤

✅ 步骤 1:启动虚拟机(VM)

情况 A:你使用 libvirt/KVM(virsh)

python 复制代码
# 查看 VM 状态
virsh list --all

# 启动 VM(假设名字是 devstack-vm)
virsh start devstack-vm

# (可选)设置开机自启(推荐!)
virsh autostart devstack-vm

💡 autostart 会让 VM 在 物理机启动后自动运行(但 DevStack 服务仍需单独处理)。

情况 B:你使用 VirtualBox

bash 复制代码
VBoxManage startvm "devstack-vm" --type headless

情况 C:你使用 VMware Workstation / ESXi

  • 手动点击"开机"
  • 或在 ESXi 中设置"随主机启动"

✅ 步骤 2:登录虚拟机,检查 DevStack 服务状态

perl 复制代码
ssh stack@192.168.122.30  # 或你的 VM IP

检查 systemd 服务(现代 DevStack 默认方式):

perl 复制代码
# 查看所有 DevStack 服务状态
systemctl list-units | grep devstack

# 检查 Keystone 是否运行
systemctl is-active devstack@keystone

❌ 如果返回 inactive,说明服务未启动。


✅ 步骤 3:启动 DevStack 服务

方式 A:如果你使用 systemd 模式(推荐)

只需启动所有 DevStack 服务:

perl 复制代码
# 启动所有 DevStack 服务
sudo systemctl start 'devstack@*'

# 验证
systemctl status devstack@keystone devstack@nova-api

✅ 优势:服务会按依赖顺序启动,日志可通过 journalctl 查看。

方式 B:如果你使用 传统模式(非 systemd)

需要重新运行 DevStack 脚本:

bash 复制代码
cd ~/devstack
./rejoin-stack.sh   # 重新 attach 到已存在的服务(如果支持)
# 或
./stack.sh          # 重新完整部署(较慢,但可靠)

⚠️ 注意:./stack.sh 会重建数据库和网络,可能导致之前创建的虚拟机丢失!


✅ 步骤 4:验证 OpenStack 功能

bash 复制代码
source ~/devstack/openrc admin admin

# 测试认证
openstack token issue

# 查看虚拟机(如果之前有)
openstack server list

# 访问 Dashboard
curl -s http://localhost:8080/dashboard | head -5

🔄 三、如何实现"全自动恢复"?(高级建议)

如果你希望 物理机重启后,VM 和 DevStack 全自动恢复,可以这样做:

1. 让 VM 开机自启

  • KVM/libvirtvirsh autostart devstack-vm
  • VirtualBox:需写 systemd 服务或 cron job
  • VMware:在虚拟机设置中启用"随主机启动"

2. 让 DevStack 服务随 VM 启动

在 VM 内部执行:

bash 复制代码
# 启用所有 DevStack 服务的开机自启
sudo systemctl enable 'devstack@*'

✅ 这样,VM 启动后,systemd 会自动拉起 Keystone、Nova、Neutron 等服务。

3. (可选)添加健康检查脚本

创建一个监控脚本 /usr/local/bin/check-devstack.sh

bash 复制代码
#!/bin/bash
if ! systemctl is-active --quiet devstack@keystone; then
    sudo systemctl start 'devstack@*'
fi

并通过 cron 每分钟检查一次。


⚠️ 四、注意事项与风险

风险 说明 建议
IP 变更 VM 重启后 IP 可能变化(如果 DHCP) 使用静态 IP 或更新 local.conf 中的 HOST_IP
数据库损坏 强制断电可能导致 MariaDB 损坏 尽量优雅关机;定期备份 /opt/stack/data/
网络重置 Neutron 的 Linux Bridge/OVS 可能需重建 DevStack 通常能自动恢复,若不行则 ./stack.sh
资源不足 物理机内存不足导致 VM 无法启动 确保 Host 有足够资源(建议 ≥16GB RAM)

ip变更问题解决

针对ip可能变化,做了以下配置 在 libvirt/KVM 中绑定 MAC → IP(适合 KVM 用户)

步骤 1:获取 VM 的 MAC 地址

perl 复制代码
virsh dumpxml devstack-vm | grep "mac address" # 输出:<mac address='52:54:00:a1:b2:c3'/>

步骤 2:编辑 libvirt 网络配置(通常是 default 网络)

arduino 复制代码
virsh net-edit default

<ip> 段内添加 <host> 条目:

xml 复制代码
<network> <name>default</name> <bridge name='virbr0'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> <!-- 添加这一行 --> <host mac='52:54:00:a1:b2:c3' ip='192.168.122.30'/> </dhcp> </ip> </network>

步骤 3:重启网络

sql 复制代码
virsh net-destroy default virsh net-start default

📌 五、最佳实践总结

操作 命令/配置
1. VM 开机自启 virsh autostart devstack-vm
2. DevStack 服务自启 sudo systemctl enable 'devstack@*'
3. 启用 journald 持久化 sudo mkdir -p /var/log/journal
4. 使用静态 IP 在 VM 网络配置中固定 IP
5. 关机前优雅停止 在 VM 中执行 ./unstack.sh(可选但推荐)

💡 理想流程

物理机关机 → VM 自动保存状态(或优雅关机)→ 物理机开机 → VM 自动启动 → DevStack 服务自动恢复 → 一切如常!


✅ 最终答案

物理服务器关机再开机后:

  1. 虚拟机不会自动启动 (除非你配置了 autostart

  2. DevStack 服务不会自动运行(即使 VM 启动了)

  3. 你需要手动:

    • 启动虚拟机
    • 在 VM 中启动 DevStack 服务(sudo systemctl start 'devstack@*'
  4. 为避免每次手动操作,建议配置:

    • VM 开机自启
    • DevStack 服务开机自启

这样,重启物理机后,DevStack 环境就能"无缝恢复"了!

相关推荐
Otto_10272 天前
Rocky版本中安装Networking-SFC插件
openstack
询问QQ:180809514 天前
Simulink微电网分布式储能下垂控制 SOC均衡(三电池组)
openstack
FGGIT5 天前
openEuler集群下OpenStack Keystone认证系统的安装配置、集成与高可用实践
openstack
chian-ocean5 天前
基于openEuler集群的OpenStack云计算平台基础部署实战指南
服务器·云计算·openstack
xy1230616 天前
OpenStack Train 部署实战(一):双节点基础环境搭建
openstack
别多香了16 天前
OpenStack 核心服务与实操
openstack
哈里谢顿20 天前
openstack 中的二层网络跟三层网络范围对比
openstack
哈里谢顿21 天前
devstack中的systemd管理介绍
openstack
哈里谢顿21 天前
在远程服务器上部署 DevStack 后如何访问 Horizon Dashboard?
openstack